1. Wprowadzenie
Z tego ćwiczenia w programie dowiesz się, jak chronić interfejs BigQuery API za pomocą Ustawień usługi VPC. Ćwiczenia z programowania rozpoczynają się bez usługi interfejsu API chronionej granicą usługi, dzięki czemu można uruchamiać zapytania w publicznych zbiorach danych, a wyniki zapisywać w tabeli projektu. Zapytanie jest wykonywane w jednym projekcie, a tabela (w której są zapisywane wyniki) jest tworzona w innym projekcie. Naśladuje to konfigurację, w której dane można przechowywać w jednym projekcie, ale trzeba uzyskać do nich dostęp w innym projekcie.
Następnie wprowadzimy granicę usług, aby chronić projekt danych. Dowiesz się, jak naprawić zaobserwowane naruszenia za pomocą reguł ruchu przychodzącego i reguł ruchu wychodzącego, a później dodasz poziom dostępu umożliwiający ograniczenie dostępu za pomocą wewnętrznych adresów IP. Cele tego ćwiczenia w Codelabs:
- Dowiedz się, jak rozwiązywać problemy z naruszeniami ruchu przychodzącego i wychodzącego za pomocą reguł ruchu przychodzącego i wychodzącego.
- Dowiedz się, dlaczego doszło do danego naruszenia.
- Przeanalizuj zakres zastosowanej poprawki naruszenia.
- Zmodyfikuj poprawkę (regułę ruchu przychodzącego / wychodzącego), aby zmienić jej zakres, wykorzystując opcję zezwalającą na ruch z wewnętrznych adresów IP w sieci VPC przy użyciu poziomów dostępu.
2. Konfiguracja zasobów i wymagania
Zanim zaczniesz
W tym ćwiczeniu w programowaniu zakładamy, że znasz już te zagadnienia:
- Podstawowe informacje o uruchamianiu zapytań BigQuery: zapoznaj się z tym ćwiczeniem z programowania, aby dowiedzieć się, jak tworzyć zapytania do zbioru danych Wikipedia w BigQuery.
- Jak utworzyć folder i nim zarządzać
- Jak utworzyć projekt w folderze lub przenieść obecny projekt do folderu
- Jak utworzyć zasadę dostępu o ograniczonym zakresie
- Jak utworzyć i skonfigurować granicę usług
- Jak znaleźć naruszenia zasad zabezpieczeń w dziennikach.
Konfiguracja
Proces wstępnej konfiguracji wygląda tak:
- organizacją Google Cloud,
- Folder w organizacji. Nazwa tego ćwiczenia to
codelab-folder
. - 2 projekty Google Cloud umieszczone w tym samym folderze
codelab-folder
. Na potrzeby tego ćwiczenia w Codelabs nazywamy jeproject-1
iproject-2
- Jeśli nie masz jeszcze utworzonego folderu i projektów, w konsoli Google Cloud utwórz folder w organizacji i utwórz w nim 2 nowe projekty.
- Wymagane uprawnienia:
- Role uprawnień do zarządzania folderami: przypisane na poziomie folderu
- Role uprawnień do zarządzania projektami: przypisywane na poziomie projektu.
- Role wymagane do skonfigurowania Ustawień usługi VPC: przypisane na poziomie organizacji
- Role uprawnień do zarządzania BigQuery: przypisane na poziomie projektu.
- Role uprawnień do zarządzania instancją Compute Engine: przypisane na poziomie projektu
- Konto rozliczeniowe dla projektów
project-2
iproject-1
.
Utwórz zwykłą granicę usług
W tym ćwiczeniu w Codelabs użyjemy standardowej granicy usług chroniącej project-1
.
- Utwórz zwykłą granicę,
perimeter-1
i dodajproject-1
.
Tworzenie maszyny wirtualnej Compute Engine
W tym ćwiczeniu w programowaniu użyjemy 1 instancji Compute Engine w regionie project-2
, która znajduje się w lokalizacji us-central1
i korzysta z domyślnej sieci VPC o nazwie default
.
- W dokumentacji znajdziesz wskazówki, jak utworzyć instancję Compute Engine z obrazu publicznego.
Koszt
Aby korzystać z zasobów Cloud/interfejsów API, musisz włączyć płatności w konsoli Google Cloud. Zalecamy wyłączenie używanych zasobów, aby uniknąć naliczania opłat po zakończeniu tego ćwiczenia. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego w wysokości 300 USD.
Zasoby, które generują opłaty, to BigQuery i instancja Compute Engine. Koszt możesz oszacować za pomocą kalkulatora cen BigQuery i kalkulatora cen Compute Engine.
3. Dostęp do BigQuery bez ograniczeń Ustawień usługi VPC
Wyślij zapytanie do publicznego zbioru danych i zapisz wyniki w lokalizacji project-1
- Aby sprawdzić, czy masz dostęp do interfejsu BigQuery API, otwórz stronę BigQuery Studio, aby sprawdzić, czy masz dostęp do
project-2
iproject-1
. Powinno być to możliwe, ponieważ nawet jeśliproject-1
znajduje się w granicach usług, granica nie chroni jeszcze żadnej usługi. - Z poziomu
project-2
uruchom podane niżej zapytanie, aby wykonać zapytanie do publicznego zbioru danych.
SELECT name, SUM(number) AS total
FROM `bigquery-public-data.usa_names.usa_1910_2013`
GROUP BY name
ORDER BY total DESC
LIMIT 10;
Po uruchomieniu zapytania do publicznego zbioru danych (bez zmiany lokalizacji project-2
):
- Kliknij Zapisz wyniki i wybierz tabelę BigQuery. (zobacz zrzut ekranu poniżej).
- Wybierz
project-1
jako projekt docelowy. - Nadaj zbiorowi danych nazwę
codelab_dataset
. Wybierz UTWÓRZ NOWY ZBIÓR DANYCH, chyba że używasz istniejącego zbioru danych. - Nadaj tabeli nazwę:
codelab-table
. - Kliknij Zapisz.
Dane publicznego zbioru danych zostały zapisane w project-1
w wyniku wykonania zapytania z project-2
.
Zbiór danych zapytania zapisany w project-1
z project-2
Nie wychodząc z BigQuery Studio (project-2
), uruchom to zapytanie, aby wybrać dane:
- Projekt:
project-1
- Zbiór danych:
codelab_dataset
- Tabela:
codelab-table
SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;
Zapytanie powinno się wykonać, ponieważ ani project-2
, ani project-1
nie mają ograniczeń korzystania z BigQuery. Dostęp do BigQuery jest możliwy z dowolnego miejsca i z dowolnego miejsca, o ile użytkownik ma odpowiednie uprawnienia.
Ten diagram ilustruje proces, w którym podmiot zabezpieczeń wysyła zapytania do zbioru danych BigQuery. Każde zapytanie BigQuery inicjuje zadanie BigQuery, które następnie wykonuje rzeczywistą operację – w tym scenariuszu – pobiera dane. Dostęp podmiotu zabezpieczeń jest prezentowany z instancji Compute Engine i z internetu podczas wysyłania zapytań z publicznego zbioru danych i z osobnego projektu Google Cloud. Proces wysyłania zapytań dotyczących danych (
GetData
) zakończył się pomyślnie, ale Ustawienia usługi VPC nie były blokowane.
4. Ochrona interfejsu BigQuery API w projekcie źródłowego zbioru danych
Zmodyfikuj konfigurację granicy perimeter-1
i ogranicz działanie usługi BigQuery API, ustawiając chroniony zasób jako project-1
.
Zweryfikuj egzekwowanie granicy usług
Z poziomu project-2
uruchom w BigQuery Studio to zapytanie jak w poprzednim kroku:
SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;
Wystąpiło naruszenie zasad usługi VPC RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER
Dziennik kontrolny naruszeń będzie znajdował się w lokalizacji project-1
, ponieważ tam wystąpiło naruszenie, które przekroczyło granicę. Dzienniki można filtrować według zaobserwowanego parametru vpcServiceControlsUniqueId
(zastąp VPC_SC_DENIAL_UNIQUE_ID
zaobserwowanym unikalnym identyfikatorem).
severity=ERROR
resource.type="audited_resource"
protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="[*VPC_SC_DENIAL_UNIQUE_ID*]"
Naruszenie zasad to egressViolations
:
principalEmail
: [konto użytkownika, który uruchamia zapytanie]callerIp
: [adres IP klienta użytkownika, który uruchamia zapytanie]
"egressViolations": [
{
"targetResource": "projects/project-2",
"sourceType": "Resource",
"source": "projects/project-1",
"servicePerimeter": "accessPolicies/REDACTED/servicePerimeters/perimeter-1",
"targetResourcePermissions": [ "bigquery.jobs.create"]
} ],
5. Naprawianie naruszenia, aby utworzyć zadanie BigQuery
Ten diagram pokazuje, kiedy podmiot zabezpieczeń wykonuje zapytanie z
project-2
dla zbioru danych w project-1
. Operacja tworzenia zadania BigQuery z projektu zbioru danych (project-1
) w projekcie, z którego zostało uruchomione zapytanie (project-2
), kończy się niepowodzeniem z naruszeniem Ustawień usługi VPC, ponieważ granica usług perimeter-1
chroni interfejs BigQuery API. Gdy granica jest skonfigurowana, nie można inicjować żadnych żądań BigQuery API z project-1
w kierunku poza granicę ani inicjować poza granicą w kierunku chronionego projektu. chyba że zezwalają na to konfiguracje granicy usług.
Naruszenie zasad dotyczących ruchu wychodzącego można naprawić, tworząc regułę ruchu wychodzącego, która opiera się na:
- źródło (FROM): adres e-mail użytkownika i kontekst (np.adres IP rozmówcy, stan urządzenia, lokalizacja itp.)
- miejsce docelowe (DO): docelowy zasób, usługa, metoda lub uprawnienie.
Aby rozwiązać zaobserwowane naruszenie dotyczące ruchu wychodzącego, utwórz regułę ruchu wychodzącego, która zezwala na ruch w kierunku zasobu targetResource (project-2
) przez konto użytkownika, które wysłało zapytanie (user@example.com
) w usłudze BigQuery oraz przy użyciu metody lub uprawnienia bigquery.jobs.create
.
Oczekiwane działanie skonfigurowanej reguły ruchu wychodzącego:
- OD | Tożsamości: tylko określona tożsamość (
user@example.com
) może przekraczać granicę granicy. - DO | projekty: określona tożsamość może przekraczać granice tylko wtedy, gdy miejscem docelowym jest określony projekt
project-2
. - DO | Usługi: określona tożsamość może inicjować ruch poza granicą, w kierunku określonego projektu tylko wtedy, gdy wywołanie interfejsu API dotyczy określonej usługi i metody. W przeciwnym razie, na przykład jeśli spróbują użyć innej usługi chronionej granicą usługi, operacja zostanie zablokowana, ponieważ inne usługi nie będą dozwolone.
Testowanie rozwiązania problemu: reguła ruchu wychodzącego
Po utworzeniu reguły ruchu wychodzącego uruchom to samo zapytanie.
SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;
Kolejne naruszenie, tym razem, będzie naruszające zasady ruchu przychodzącego NO_MATCHING_ACCESS_LEVEL
. Nowe naruszenie różni się od pierwszego pod względem projektu docelowego i metody.
Nowe naruszenie to naruszenie zasad Ingress
principalEmail
: [konto użytkownika, który uruchamia zapytanie]callerIp
: [adres IP klienta użytkownika, który uruchamia zapytanie]
ingressViolations: [
0: {
servicePerimeter: "accessPolicies/REDACTED/servicePerimeters/perimeter-1"
targetResource: "projects/project-1"
targetResourcePermissions: [0: "bigquery.tables.getData"]}
]
Naruszenie zasad bigquery.tables.getData
wynika z tego, że wywołanie interfejsu API zainicjowane przez zadanie BigQuery próbuje pobrać dane z tabeli BigQuery.
6. Naprawianie naruszenia umożliwiającego pobranie danych z tabeli BigQuery
Reguła dotycząca ruchu przychodzącego eliminuje naruszenie zasad ruchu przychodzącego, zapewniając jednocześnie szczegółową kontrolę nad tym, kto może przekraczać granicę usługi, oraz o kontekście dozwolonego dostępu, na przykład o projekcie źródłowym/ docelowym i metodzie interfejsu API, do którego ma dostęp.
Naruszenie zasad dotyczących ruchu przychodzącego jest naprawiane przez regułę ruchu przychodzącego, która jest skonfigurowana tak:
- źródło (FROM): adres e-mail użytkownika i kontekst (np.adres IP rozmówcy, stan urządzenia, lokalizacja itp.)
- miejsce docelowe (DO): docelowy zasób, usługa, metoda lub uprawnienie.
Reguła dotycząca ruchu przychodzącego zezwoli na ruch w kierunku project-1
przez określonego użytkownika w określonej usłudze i metodzie.
Oczekiwane działanie skonfigurowanej reguły ruchu przychodzącego:
- OD | Tożsamości: tylko określona tożsamość (
user@example.com
) może przekraczać granicę granicy. - DO | projekty: określona tożsamość może przekraczać granice tylko wtedy, gdy miejscem docelowym jest określony projekt
project-1
. - DO | Usługi: określona tożsamość może inicjować ruch wewnątrz granicy tylko wtedy, gdy wywołanie interfejsu API dotyczy interfejsu BigQuery API i określonej metody
bigquery.tables.getData
.
Wykonanie identycznego zapytania powinno od tej pory działać prawidłowo bez naruszeń Ustawień usługi VPC.
Ograniczyliśmy dostęp do interfejsu BigQuery API w domenie project-1
. Z tego powodu można go używać tylko w interfejsie user@example.com
, a nie przez user2@example.com
.
Ten diagram pokazuje, jak 2 różne podmioty zabezpieczeń próbują wysyłać zapytania do tego samego zbioru danych. Dostęp ze strony
user2@example.com
(niebieskie linie kropkowane) jest zabroniony przez Ustawienia usługi VPC, ponieważ nie mogą one uruchamiać operacji BigQuery z lub w kierunku project-1
ani w kierunku konfiguracji granicy usług. Dostęp przez interfejs user@example.com
(zielona linia ciągła) został przyznany, ponieważ konfiguracja Ustawień usługi VPC zezwala na wykonywanie operacji w kierunku project-1
i w kierunku.
7. Ogranicz ruch dozwolony przez granicę usług na podstawie wewnętrznego adresu IP
Bieżąca konfiguracja umożliwia wyznaczonemu użytkownikowi uruchamianie zapytań w BigQuery w usłudze project-1
z dowolnej lokalizacji. w dowolnym miejscu w internecie, o ile otrzymał on uprawnienia do wysyłania zapytań dotyczących danych i korzysta ze swojego konta. Z punktu widzenia bezpieczeństwa oznacza to, że jeśli konto zostanie przejęte, każda osoba, która uzyska do niego dostęp, będzie mogła korzystać z danych BigQuery bez żadnych dodatkowych ograniczeń.
Kolejne ograniczenia można wdrożyć za pomocą poziomu dostępu w regułach ruchu przychodzącego i wychodzącego w celu określenia kontekstu użytkownika. Możesz na przykład zezwolić na dostęp na podstawie źródłowego adresu IP w połączeniu ze skonfigurowaną wcześniej regułą ruchu przychodzącego, która zezwala na dostęp na podstawie tożsamości wywołującego. Dostęp według źródłowego adresu IP jest możliwy w przypadku obu publicznych zakresów adresów IP, o ile klient użytkownika ma przypisany publiczny adres IP, lub przez zastosowanie wewnętrznego adresu IP, jeśli klient użytkownika działa z projektu Google Cloud.
Utwórz poziom dostępu z warunkiem dostępu do wewnętrznego adresu IP
W tym samym folderze zasad dostępu o określonym zakresie otwórz stronę Menedżer kontekstu dostępu, aby utworzyć poziom dostępu.
- Na stronie Menedżer kontekstu dostępu wybierz UTWÓRZ POZIOM DOSTĘPU.
- W panelu Nowy poziom dostępu:
- Podaj tytuł: możesz użyć
codelab-al
. - W sekcji Warunki kliknij Podsieci IP.
- Wybierz kartę Prywatny adres IP i kliknij WYBIERZ SIECI VPC.
- W panelu Dodaj sieci VPC możesz wyszukać i znaleźć sieć
default
lub ręcznie wpisać pełną nazwę sieci w formacie//compute.googleapis.com/projects/project-2/global/networks/default
. - Kliknij DODAJ sieć VPC.
- Kliknij WYBIERZ PODNETY IP.
- Wybierz region, w którym znajduje się instancja maszyny wirtualnej. Wartość dla tego ćwiczenia w Codelabs:
us-central1
. - Kliknij ZAPISZ.
- Podaj tytuł: możesz użyć
Utworzyliśmy poziom dostępu, który nadal nie jest egzekwowany w przypadku żadnych zasad granicy ani zasad ruchu przychodzącego/wychodzącego.
Dodawanie poziomu dostępu do reguły ruchu przychodzącego
Aby wymusić, aby użytkownik dozwolony przez regułę ruchu przychodzącego był również zweryfikowany pod kątem poziomu dostępu, należy skonfigurować poziom dostępu w regule ruchu przychodzącego. Reguła dla ruchu przychodzącego, która zezwala na dostęp do danych zapytań, znajduje się w regionie perimeter-1
. Zmień regułę ruchu przychodzącego, aby zdefiniować źródło jako poziom dostępu codelab-al
.
Testowanie nowych konfiguracji
Po dodaniu poziomu dostępu do reguły ruchu przychodzącego to samo zapytanie BigQuery zakończy się niepowodzeniem, chyba że zostanie wykonane z poziomu klienta w sieci VPC default
w projekcie project-2
. Aby sprawdzić to działanie, wykonaj zapytanie z konsoli Google Cloud, gdy urządzenie końcowe jest połączone z internetem. Zapytanie zakończy się bezskutecznie, co będzie wskazywać na naruszenie zasad ruchu przychodzącego.
To samo zapytanie można uruchomić z sieci VPC default
w lokalizacji project-2
. Wykonanie tego samego zapytania BigQuery z instancji Compute Engine znajdującej się w regionie project-2
przy użyciu sieci VPC default
również zakończy się niepowodzeniem. Wynika to z faktu, że reguła ruchu przychodzącego jest nadal skonfigurowana tak, aby zezwalać tylko na podmiot zabezpieczeń user@example.com
. Maszyna wirtualna korzysta jednak z domyślnego konta usługi Compute Engine.
Aby wykonać to samo polecenie w instancji Compute Engine w regionie project-2
, upewnij się, że:
- Maszyna wirtualna ma zakres dostępu umożliwiający korzystanie z interfejsu BigQuery API. Aby to zrobić, wybierz Zezwól na pełny dostęp do wszystkich interfejsów Cloud APIs jako zakres dostępu do maszyny wirtualnej.
- Konto usługi podłączone do maszyny wirtualnej wymaga uprawnień do:
- Tworzenie zadań BigQuery w regionie
project-2
- Pobierz dane BigQuery z tabeli BigQuery znajdującej się w regionie
project-1
- Tworzenie zadań BigQuery w regionie
- Domyślne konto usługi Compute Engine musi być dozwolone przez regułę ruchu przychodzącego i wychodzącego.
Teraz musimy dodać domyślne konto usługi Compute Engine do reguł ruchu przychodzącego (aby umożliwić pobieranie danych z tabeli BigQuery) i do reguły ruchu wychodzącego (aby umożliwić tworzenie zadań BigQuery).
Z instancji Compute Engine w regionie project-2
w sieci VPC default
uruchom to polecenie bq query:
bq query --nouse_legacy_sql \
'SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;'
Przy obecnej konfiguracji polecenie BigQuery działa tylko wtedy, gdy:
- uruchamianie w maszynie wirtualnej przy użyciu domyślnej sieci VPC w regionie
project-2
, - znajduje się w określonym regionie
us-central1
(podsieć IP) i - uruchamianie przy użyciu domyślnego konta usługi Compute Engine skonfigurowanego w granicy usług.
Zapytanie BigQuery zakończy się niepowodzeniem, jeśli zostanie uruchomione z innego miejsca, w tym:
- jeśli jest uruchomiony w maszynie wirtualnej przy użyciu domyślnej sieci VPC w regionie
project-2
, ale znajduje się w innym regionie niż podsieć dodana na poziomie dostępu lub - jeśli jest uruchamiany przez użytkownika
user@example.com
za pomocą klienta użytkownika w internecie.
Ten diagram przedstawia dostęp zainicjowany przez ten sam podmiot zabezpieczeń (
user@example.com
) z 2 różnych lokalizacji: internetu i instancji Compute Engine. Dostęp do BigQuery bezpośrednio z internetu (niebieskie linie kropkowane) jest blokowany przez Ustawienia usługi VPC. Dostęp z maszyny wirtualnej (zielone linie ciągłe) podczas podszywania się pod domyślne konto usługi Compute Engine jest dozwolony. Zezwolenie na dostęp wynika z tego, że granica usług jest skonfigurowana tak, aby umożliwiać dostęp do zabezpieczonych zasobów z wewnętrznego adresu IP.
8. Czyszczenie
Nie ma osobnej opłaty za korzystanie z Ustawień usługi VPC, gdy nie jest ona używana, ale najlepiej jest wyczyścić konfigurację używaną w tym laboratorium. Możesz też usunąć maszynę wirtualną, zbiory danych BigQuery lub projekty Google Cloud, aby uniknąć naliczania opłat. Usunięcie projektu Cloud spowoduje zatrzymanie naliczania opłat za wszystkie zasoby w nim używane.
- Aby usunąć instancję maszyny wirtualnej, wykonaj te czynności:
- W konsoli Google Cloud otwórz stronę Instancje maszyn wirtualnych.
- Zaznacz pole wyboru po lewej stronie nazwy instancji maszyny wirtualnej, wybierz Usuń, a potem jeszcze raz kliknij Usuń, aby potwierdzić.
- Aby usunąć granicę usługi, wykonaj te czynności:
- W konsoli Google Cloud wybierz Zabezpieczenia, a następnie Ustawienia usługi VPC na poziomie, na którym są ograniczone zasady dostępu (w tym przypadku na poziomie folderu).
- Na stronie Ustawienia usługi VPC w wierszu tabeli odpowiadającym granicy, którą chcesz usunąć, kliknij Usuń.
- Aby usunąć poziom dostępu, wykonaj te czynności:
- W konsoli Google Cloud otwórz stronę Menedżer kontekstu dostępu w zakresie folderów.
- Odszukaj w siatce wiersz z poziomem dostępu, który chcesz usunąć, kliknij menu z 3 kropkami, a następnie kliknij Usuń.
- Aby wyłączyć projekty, wykonaj te czynności:
- W konsoli Google Cloud otwórz Uprawnienia Ustawienia administratora w projekcie, który chcesz usunąć.
- W sekcji Administracja Ustawienia administratora i kliknij Wyłącz.
- Wpisz identyfikator projektu i kliknij Wyłącz mimo to.
9. Gratulacje!
W ramach tego ćwiczenia w programie udało Ci się utworzyć granicę Ustawień usługi VPC, wyegzekwować jej stosowanie i rozwiązać problemy.
Więcej informacji
Możesz też sprawdzić następujące scenariusze:
- Uruchom to samo zapytanie na publicznym zbiorze danych po tym, jak projekt zostanie zabezpieczony przez Ustawienia usługi VPC.
- Dodaj
project-2
w tej samej granicach coproject-1
. - Dodaj element
project-2
w obrębie jego własnej granicy i pozostawproject-1
w obrębie jego granicy. - Uruchamiaj zapytania, aby aktualizować dane w tabeli, a nie tylko je pobierać.
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.