Ustawienia usługi VPC – ćwiczenia z programowania dotyczące ochrony BigQuery I

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:

Konfiguracja

Proces wstępnej konfiguracji wygląda tak:

Początkowy projekt z granicą usług bez interfejsu API.

Utwórz zwykłą granicę usług

W tym ćwiczeniu w Codelabs użyjemy standardowej granicy usług chroniącej project-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.

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

  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 i project-1. Powinno być to możliwe, ponieważ nawet jeśli project-1 znajduje się w granicach usług, granica nie chroni jeszcze żadnej usługi.
  2. 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):

  1. Kliknij Zapisz wyniki i wybierz tabelę BigQuery. (zobacz zrzut ekranu poniżej). Zapisz wyniki z BigQuery.
  2. Wybierz project-1 jako projekt docelowy.
  3. Nadaj zbiorowi danych nazwę codelab_dataset. Wybierz UTWÓRZ NOWY ZBIÓR DANYCH, chyba że używasz istniejącego zbioru danych. Wybieram projekt docelowy podczas zapisywania wyników BigQuery.
  4. Nadaj tabeli nazwę: codelab-table.
  5. 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.

Konfiguracja ćwiczeń w Codelabs bez granic usług Ustawień usługi VPC. 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.

Konfigurowanie granicy usług

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

Naruszenie Ustawień usługi VPC wychodzącego

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

Podczas tworzenia zadania BigQuery wystąpił błąd ruchu wychodzącego. 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.

Napraw konfiguracje związane z naruszeniem zasad ruchu wychodzącego.

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.

Naruszenie Ustawień usługi VPC dla ruchu przychodzącego

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.

Naprawianie naruszenia zasad ruchu przychodzącego

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.

Granica Ustawień usługi VPC chroniąca interfejs BigQuery API 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.

  1. Na stronie Menedżer kontekstu dostępu wybierz UTWÓRZ POZIOM DOSTĘPU.
  2. W panelu Nowy poziom dostępu:
    1. Podaj tytuł: możesz użyć codelab-al.
    2. W sekcji Warunki kliknij Podsieci IP.
    3. Wybierz kartę Prywatny adres IP i kliknij WYBIERZ SIECI VPC.
    4. 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.
    5. Kliknij DODAJ sieć VPC.
    6. Kliknij WYBIERZ PODNETY IP.
    7. Wybierz region, w którym znajduje się instancja maszyny wirtualnej. Wartość dla tego ćwiczenia w Codelabs: us-central1.
    8. Kliknij ZAPISZ.

Utworzyliśmy poziom dostępu, który nadal nie jest egzekwowany w przypadku żadnych zasad granicy ani zasad ruchu przychodzącego/wychodzącego.

Poziom dostępu skonfigurowany z podsieciami IP

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.

Poziom dostępu z siecią VPC

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
  • 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).

Konfiguracja granicy usług VPC z poziomami dostępu

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.

Granica usług umożliwiająca dostęp dla domyślnego konta usługi GCE. 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ć. Usunięcie instancji Compute Engine.
  • 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 co project-1.
  • Dodaj element project-2 w obrębie jego własnej granicy i pozostaw project-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.