Podstawowy samouczek II dotyczący Ustawień usługi VPC – rozwiązywanie problemów z naruszeniem zasad ruchu wychodzącego

1. Wprowadzenie

Ustawienia usługi VPC (VPC-SC) to mechanizm kontroli bezpieczeństwa na poziomie organizacji w Google Cloud, który umożliwia klientom korporacyjnym ograniczenie ryzyka związanego z wydobyciem danych. Ustawienia usługi VPC zapewniają dostęp typu „zero zaufania” do usług wielu najemców, umożliwiając klientom ograniczenie dostępu do autoryzowanych adresów IP, kontekstu klienta i parametrów urządzenia przy jednoczesnym łączeniu się z usługami wielu najemców z internetu i innych usług, co pozwala ograniczyć zarówno celowe, jak i niezamierzone straty. Jak widzieliśmy w podstawowym samouczku usługi VPC I, za pomocą Ustawień usługi VPC możesz utworzyć granice, które będą chronić zasoby i dane usług, które określisz.

Cele tego samouczka to:

  • Podstawowe informacje o Ustawieniach usługi VPC
  • Aktualizowanie granicy usług i testowanie jej za pomocą trybu próbnego
  • Ochrona 2 usług za pomocą Ustawień usługi VPC
  • Rozwiązywanie problemów związanych z naruszeniem zasad ruchu wychodzącego w Ustawieniach usługi VPC przy wyświetlaniu obiektu z Cloud Storage

2. Konfiguracja i wymagania

Aby korzystać z tego samouczka, musisz spełnić te wymagania wstępne:

dbec101f41102ca2.png

Konfigurowanie zasobów

  1. Skonfiguruj zasoby zgodnie z opisem na stronie „Resources-setup” (Konfiguracja zasobów) podstawowego samouczka I ustawień usługi VPC.
  2. Sprawdź, czy masz uprawnienia wymagane do administrowania Cloud Storage.
  3. W tym samouczku zaczniemy używać interfejsu wiersza poleceń zamiast Cloud Console. W jednym ze środowisk programistycznych skonfiguruj interfejs wiersza poleceń gcloud:
  • Cloud Shell: aby użyć terminala online ze skonfigurowanym już interfejsem wiersza poleceń gcloud, aktywuj Cloud Shell.

Aktywuj Cloud Shell, klikając ikonę w prawym górnym rogu konsoli Cloud. Inicjowanie sesji może potrwać kilka sekund. Więcej informacji znajdziesz w przewodniku po Cloud Shell.

a0ceb29950db4eac.png

  • Powłoka lokalna: aby użyć lokalnego środowiska programistycznego, zainstaluj i zainicjuj interfejs wiersza poleceń gcloud.

Koszt

Aby korzystać z zasobów i interfejsów API Cloud, musisz włączyć płatności w Cloud Console. Ukończenie tego ćwiczenia z programowania nic nie kosztuje. Aby wyłączyć zasoby w celu uniknięcia naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego w wysokości 300 USD.

Jedyne zasoby, które będą generować koszty, to instancja maszyny wirtualnej i obiekt Cloud Storage. Szacowany koszt instancji maszyny wirtualnej znajdziesz w kalkulatorze cen. Szacowany koszt Cloud Storage znajdziesz na tej liście cen.

3. Tworzenie zasobnika i obiektu na dane

Jak już wspomnieliśmy, wykorzystamy zasoby utworzone w poprzednim samouczku. Przejdziemy więc do tworzenia zasobnika Cloud Storage. W tym samouczku zamiast konsoli zaczniemy używać interfejsu wiersza poleceń gcloud.

  1. W konsoli Google wybierz ProjectX. W tym projekcie utworzymy zasobnik na dane i obiekt.
  2. Upewnij się, że w Cloud Shell skonfigurowano użycie ProjectX, uruchamiając to polecenie:
gcloud config set project PROJECT_ID
  1. W środowisku programistycznym uruchom to polecenie:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
  1. Utwórz obiekt pamięci masowej, abyśmy mogli go odczytać z instancji maszyny wirtualnej w ProjekcieZ. Utworzymy plik .txt.
nano hello.txt 

Dodaj do pliku tekstowego, co chcesz.

  1. Prześlij obiekt do zasobnika.
gcloud storage cp /home/${USER}/hello.txt gs://BUCKET_NAME
  1. Sprawdź, czy obiekt został przesłany do zasobnika, wpisując go.
gcloud storage ls gs://BUCKET_NAME

Plik hello.txt musi być widoczny w konsoli.

4. Protect Cloud Storage API

W poprzednim ćwiczeniu w Codelabs utworzyliśmy granicę i chroniony interfejs Compute Engine API. W ramach tego ćwiczenia w programie zmodyfikujemy granicę trybu uruchomienia próbnego i dodamy Cloud Storage. Pomoże nam to określić wpływ ochrony granicy dzięki wyświetlaniu w logach kontrolnych naruszeń Ustawień usługi VPC, ale zasoby pozostaną dostępne do czasu wyegzekwowania granicy.

  1. W konsoli Google wybierz swoją organizację. Otwórz Ustawienia usługi VPC. Sprawdź, czy jesteś w zakresie organizacji.
  2. Otwórz Cloud Shell i zaktualizuj granicę uruchomienia próbnego „SuperProtection” utworzone w poprzednim module:
gcloud access-context-manager perimeters dry-run update SuperProtection --policy=POLICY --add-restricted-services=storage.googleapis.com
  1. Sprawdź, czy interfejs Cloud Storage API został zaktualizowany, opisując granicę
gcloud access-context-manager perimeters dry-run describe SuperProtection --policy=POLICY 

W danych wyjściowych zobaczysz, że Cloud Storage API jest wymieniony poniżej usług z ograniczeniami.

wraz z Compute Engine API, ale z etykietą „-vpcAccessibleServices: {}":

2025ddc01a2e9a81.png

5. Sprawdzanie, czy interfejs Cloud Storage API został zabezpieczony

W trybie uruchomienia próbnego sprawdź, czy zabezpieczenie „SuperProtection” granica pokazuje nam odmowę, zamieszczając listę obiektu z instancji maszyny wirtualnej utworzonej w Projekcie Z do ProjektuX, w którym hostowany jest zasobnik na dane.

  1. W konsoli Google Cloud otwórz selektor projektów i wybierz ProjektZ, a następnie przejdź do Compute Engine > Maszyny wirtualne.
  2. Kliknij przycisk SSH, aby połączyć się z instancją maszyny wirtualnej i uzyskać dostęp do jej wiersza poleceń.

5ca02149b78c11f9.png

  1. Wymień plik hello.txt, który przesłaliśmy wcześniej.
gcloud storage ls gs://BUCKET_NAME

Interfejs Cloud Storage API jest zabezpieczony w trybie próbnym, więc możesz wyświetlić listę zasobów, ale w logach kontrolnych ProjectZ musi znajdować się komunikat o błędzie.

  1. Otwórz Logs Explorer API w Project Z i znajdź ostatni komunikat o błędzie w Ustawieniach usługi VPC. Aby uzyskać dziennik, którego szukasz:
protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS"
"(Dry Run Mode) Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:UNIQUE_ID"

Ten filtr pokaże ostatnie naruszenie w trybie próbnym, które należy do Cloud Storage. Oto przykład, jak wygląda dziennik. Możemy też sprawdzić, czy naruszenie jest związane z ruchem wychodzącym podczas próby wyświetlenia treści w zasobniku znajdującym się w ProjectX.

egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTX_ID"
sourceType: "Network"
targetResource: "projects/PROJECTZ_ID"
}
]
resourceNames: [
0: "projects//buckets/BUCKET_NAME"
]
securityPolicyInfo: {
organizationId: "ORGANIZATION_ID"
servicePerimeterName: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
vpcServiceControlsUniqueId: "UNIQUE_ID"
}
methodName: "google.storage.objects.list"
  1. Ponieważ ustaliliśmy, że wywołanie interfejsu API do Cloud Storage powoduje naruszenie Ustawień usługi VPC, wyegzekwujemy granicę zgodnie z nową konfiguracją. Otwórz Cloud Shell i wymuś granicę uruchomienia próbnego:
gcloud access-context-manager perimeters dry-run enforce SuperProtection --policy=POLICY --async
  1. Połącz się z instancją maszyny wirtualnej przez SSH i ponownie wyświetl zasobnik na dane, aby sprawdzić, czy granica uruchomienia próbnego została prawidłowo wyegzekwowana.
gcloud storage ls gs://BUCKET_NAME

W interfejsie wiersza poleceń maszyny wirtualnej zamiast listy obiektów Cloud Storage pojawi się naruszenie Ustawień usługi VPC:

ERROR: (gcloud.storage.ls) User [PROJECT_NUMBER-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:"UNIQUE_ID"

Udało nam się zapobiec wydobyciu danych dzięki użyciu Ustawień usługi VPC, które uniemożliwiają odczyt danych z zasobów spoza granic usługi lub ich kopiowanie do takich zasobów.

6. Rozwiązywanie problemów z odrzuceniem listy.

Rozwiążemy problem z odmową otrzymanego z interfejsu wiersza poleceń instancji maszyny wirtualnej. Sprawdźmy logi kontrolne i znajdźmy unikalny identyfikator Ustawień usługi VPC.

  1. Otwórz selektor projektów i wybierz ProjektZ.
  2. Znajdź w logach kontrolnych unikalny identyfikator Ustawień usługi VPC, za pomocą tego zapytania w eksploratorze logów:
resource.type="audited_resource"
protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"

Spowoduje to wyświetlenie wszystkich logów kontrolnych Ustawień usługi VPC. Będziemy szukać ostatniego dziennika błędów. Jako że wywołanie interfejsu API pochodzi z maszyny wirtualnej, podmiotem zabezpieczeń musi być konto usługi Compute Engine „PROJECT_NUMBER-compute@developer.gserviceaccount.com"

Mamy już unikalny identyfikator Ustawień usługi VPC, więc możemy go użyć, aby bezpośrednio pobrać żądany log, używając tego filtra:

protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
  1. Kliknij nagłówek Ustawienia usługi VPC i wybierz „Rozwiązywanie problemów z odmową”. Otworzy się narzędzie do rozwiązywania problemów z Ustawieniami usługi VPC.

Ten interfejs API pokaże w przyjazny dla użytkownika sposób przyczynę naruszenia i pokaże, czy było to naruszenie dotyczące ruchu przychodzącego lub wychodzącego, m.in. do innych przydatnych informacji.

W tym ćwiczeniu skupimy się na:

authenticationInfo: {
principalEmail: "PROJECT_ID-compute@developer.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTZ_ID"
sourceType: "Network"
targetResource: "projects/PROJECTX_ID"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"

Te informacje wystarczą nam, że trzeba utworzyć regułę ruchu wychodzącego, aby umożliwić kontu usługi Compute Engine dostęp do zasobnika na dane z projektu Z do ProjectX. Widzimy też, że sieć nie znajduje się w obrębie tej samej granicy, więc musimy zezwolić na komunikację VPC z usługami i udostępniać dane między ich granicami.

  1. Aktywuj Cloud Shell i utwórz plik .yaml z regułą ruchu wychodzącego za pomocą edytora tekstu.
nano egresstorage.yaml 
- egressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: \"*\"
    resources:
    - projects/PROJECTX_ID
 egressFrom:
    identities:
    - serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com
  1. Zaktualizuj zasadę dotyczącą ruchu przychodzącego, która chroni projekt Z.
gcloud access-context-manager perimeters update SuperProtection --set-egress-policies=egresstorage.yaml --policy=POLICY 

Teraz możemy ponownie spróbować uzyskać dostęp do zasobnika z poziomu instancji maszyny wirtualnej.

  1. W konsoli Google Cloud otwórz selektor projektów i wybierz ProjektZ, a następnie przejdź do Compute Engine > Maszyny wirtualne.
  2. Kliknij przycisk SSH, aby połączyć się z instancją maszyny wirtualnej i uzyskać dostęp do jej wiersza poleceń.
  3. Gdy znajdziesz się w interfejsie wiersza poleceń maszyny wirtualnej, spróbuj wyświetlić listę obiektów w zasobniku na dane.
gcloud storage ls gs://BUCKET_NAME/

Wyświetli się ten komunikat o błędzie:

ERROR: (gcloud.storage.ls) User [PROJECT_ID-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): PROJECT_ID-compute@developer.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist).
  1. Musimy przyznać kontu usługi Compute Engine uprawnienia do odczytu obiektów, aby móc wyświetlać listę obiektów w zasobniku na dane.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com --role=roles/storage.objectViewer
  1. Jeszcze raz spróbujmy wyświetlić plik hello.txt w interfejsie wiersza poleceń maszyny wirtualnej .
gcloud storage ls gs://BUCKET_NAME/
.
.
gs://BUCKET_NAME/hello.txt

Udało się wyświetlić obiekt bez naruszenia uprawnień dotyczących ustawień usługi VPC, ale co z pobraniem pliku? Spróbujmy.

gcloud storage cp gs://BUCKET_NAME/hello.txt /home/${USER}

Otrzymasz też następujący wynik

Copying gs://BUCKET_NAME/hello.txt to file:///home/${USER}
 Completed files 1/1 | 54.0B/54.0B  

7. 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ąć instancję maszyny wirtualnej lub projekty Cloud, aby uniknąć naliczania opłat. Usunięcie projektu Cloud spowoduje zatrzymanie naliczania opłat za wszystkie zasoby w nim używane.

  1. Aby usunąć maszynę wirtualną, zaznacz pole wyboru po lewej stronie nazwy maszyny wirtualnej, a potem kliknij Usuń.

da0abf0894fe03cd.png

  1. Aby usunąć granicę, wykonaj te czynności:
  • W konsoli Google Cloud kliknij Zabezpieczenia, a następnie w zakresie Organizacja kliknij Ustawienia usługi VPC.
  • Na stronie Ustawienia usługi VPC w wierszu tabeli odpowiadającym granicy, którą chcesz usunąć, kliknij „Usuń ikonę”.
  1. 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.
  • W siatce w wierszu poziomu dostępu, który chcesz usunąć, kliknij „Usuń ikonę”, a następnie kliknij Usuń.
  1. Aby usunąć obiekt i zasobnik Cloud Storage, wykonaj te czynności:
  • W konsoli Google Cloud otwórz stronę zasobników Cloud Storage .
  • Zaznacz pole wyboru obok utworzonego zasobnika.
  • Kliknij Usuń.
  • W wyświetlonym oknie potwierdź, że chcesz usunąć zasobnik.
  • Kliknij Usuń.
  1. Aby zamknąć projekt, wykonaj te czynności:
  • W konsoli Google Cloud otwórz Uprawnienia Ustawienia administratora w projekcie, który chcesz usunąć.
  • W sekcji Administracja Ustawienia administratora kliknij Wyłącz.
  • Wpisz identyfikator projektu i kliknij Wyłącz mimo to.

8. Gratulacje!

W tym ćwiczeniu w programie udało Ci się zaktualizować granicę Ustawień usługi VPC, wyegzekwować ją i rozwiązać problemy.

Więcej informacji

Licencja

To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.