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 to opcja zabezpieczeń na poziomie organizacji w Google Cloud, która umożliwia klientom korporacyjnym ograniczenie ryzyka wydobycia danych. Ustawienia usługi VPC zapewniają dostęp do usług wielodostępnych w stylu zero-trust, umożliwiając klientom ograniczanie dostępu do autoryzowanych adresów IP, kontekstu klienta i parametrów urządzenia podczas łączenia się z usługami wielodostępnymi z internetu i innych usług w celu zmniejszenia zarówno celowych, jak i niezamierzonych strat. Jak widzieliśmy w podstawowym samouczku dotyczącym ustawień usługi VPC I, możesz używać ustawień usługi VPC do tworzenia granic chroniących zasoby i dane usług, które wyraźnie określisz.

Cele tego samouczka to:

  • Podstawowe informacje o ustawieniach usługi VPC
  • Aktualizowanie granicy usług i testowanie jej w trybie próbnym
  • Ochrona 2 usług za pomocą ustawień usługi VPC
  • Rozwiązywanie problemów z naruszeniem zasad ruchu wychodzącego w Ustawieniach usługi VPC podczas wyświetlania listy obiektów z Cloud Storage

2. Konfiguracja i wymagania

W tym samouczku wymagane są te elementy:

dbec101f41102ca2.png

Resources-setup

  1. Skonfiguruj zasoby zgodnie z opisem w sekcji „Konfiguracja zasobów” w podstawowym samouczku I dotyczącym Ustawień usługi VPC.
  2. Sprawdź, czy masz wymagane uprawnienia do administrowania Cloud Storage.
  3. W tym samouczku zaczniemy używać interfejsu wiersza poleceń zamiast konsoli Google Cloud. W jednym ze środowisk programistycznych skonfiguruj interfejs wiersza poleceń gcloud:
  • Cloud Shell: aby używać terminala online z już skonfigurowanym interfejsem gcloud CLI, aktywuj Cloud Shell.

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

a0ceb29950db4eac.png

  • Lokalna powłoka: aby używać lokalnego środowiska programistycznego, zainstaluj i zainicjuj gcloud CLI.

Koszt

Aby korzystać z zasobów i interfejsów API Cloud, musisz włączyć płatności w konsoli Google Cloud. Wykonanie tego laboratorium nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć 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 którym mają do dyspozycji środki w wysokości 300 USD.

Jedynymi zasobami, które generują koszty, są instancja maszyny wirtualnej i obiekt Cloud Storage. Szacowany koszt instancji maszyny wirtualnej znajdziesz w kalkulatorze cen. Szacunkowy koszt Cloud Storage znajdziesz na tej liście cen.

3. Tworzenie zasobnika i obiektu Cloud Storage

Jak wspomnieliśmy wcześniej, użyjemy ponownie zasobów utworzonych w poprzednim samouczku. Zaczniemy więc tworzyć zasobnik Cloud Storage. W tym samouczku zaczniemy używać gcloud CLI zamiast konsoli.

  1. W konsoli Google wybierz ProjectX. W tym projekcie utworzymy zasobnik na dane i obiekt.
  2. Upewnij się, że Cloud Shell używa ProjectX. W tym celu uruchom 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, aby można było go odczytać z instancji maszyny wirtualnej znajdującej się w projekcie Z. Utworzymy plik TXT.
nano hello.txt 

Dodaj do pliku tekstowego dowolne informacje.

  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, wyświetlając go.
gcloud storage ls gs://BUCKET_NAME

W konsoli powinien być widoczny plik hello.txt.

4. Ochrona interfejsu Cloud Storage API

W poprzednim ćwiczeniu utworzyliśmy obszar i zabezpieczyliśmy interfejs Compute Engine API. W tym laboratorium kodowania edytujemy obwód w trybie próbnym i dodamy Cloud Storage. Pomoże nam to określić wpływ ochrony granicy, ponieważ w dziennikach audytu będą widoczne naruszenia ustawień usługi VPC, ale zasoby pozostaną dostępne, dopóki nie wprowadzimy granicy.

  1. W konsoli Google wybierz organizację i  uzyskaj dostęp do ustawień usługi VPC. Sprawdź, czy jesteś w zakresie organizacji.
  2. Otwórz Cloud Shell i zaktualizuj granicę w trybie próbnym „SuperProtection” utworzoną 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 interfejs Cloud Storage API jest wymieniony poniżej usług objętych ograniczeniami.

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

2025ddc01a2e9a81.png

5. Sprawdzanie, czy interfejs Cloud Storage API jest chroniony

W trybie próbnym sprawdź, czy granica „SuperProtection” odrzuca dostęp, wyświetlając listę obiektów z instancji maszyny wirtualnej utworzonej w projekcie Z do projektu X, w którym znajduje się zasobnik pamięci.

  1. W konsoli Cloud otwórz selektor projektów i wybierz ProjectZ, a następnie otwórz Compute Engine > Instancje maszyn wirtualnych.
  2. Kliknij przycisk SSH, aby połączyć się z instancją maszyny wirtualnej i uzyskać dostęp do wiersza poleceń.

5ca02149b78c11f9.png

  1. Wyświetl listę przesłanego wcześniej pliku hello.txt.
gcloud storage ls gs://BUCKET_NAME

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

  1. W projekcie Z otwórz Eksplorator logów API i poszukaj ostatniego komunikatu o błędzie w Ustawieniach usługi VPC. Aby uzyskać szukany dziennik, możesz użyć tego filtra:
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 nam ostatnie naruszenie w trybie uruchomienia próbnego, które należy do Cloud Storage. Oto przykład dziennika. Możemy sprawdzić, czy naruszenie dotyczy ruchu wychodzącego, próbując wyświetlić zawartość zasobnika znajdującego się w projekcie X.

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ż potwierdziliśmy, że wywołanie interfejsu API Cloud Storage generuje naruszenie ustawień usługi VPC, zastosujemy granicę z nową konfiguracją. Otwórz Cloud Shell i wymuś zastosowanie perymetru testowego:
gcloud access-context-manager perimeters dry-run enforce SuperProtection --policy=POLICY --async
  1. Połącz się z instancją maszyny wirtualnej za pomocą SSH i ponownie wyświetl listę zasobnika pamięci, aby sprawdzić, czy obwód testowy został prawidłowo zastosowany.
gcloud storage ls gs://BUCKET_NAME

Zamiast listy obiektów Storage w interfejsie CLI maszyny wirtualnej otrzymamy informację o naruszeniu 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 za pomocą ustawień usługi VPC, które blokują odczytywanie danych z zasobu spoza granic usługi lub kopiowanie do niego danych.

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

Rozwiążemy problem z odmową, którą otrzymaliśmy z interfejsu wiersza poleceń instancji maszyny wirtualnej. Sprawdźmy logi kontrolne i poszukajmy unikalnego identyfikatora Ustawień usługi VPC.

  1. Otwórz selektor projektów i wybierz ProjectZ.
  2. Znajdź unikalny identyfikator Ustawień usługi VPC w dziennikach kontrolnych, używając 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. Wywołanie interfejsu API zostało wykonane z instancji maszyny wirtualnej, więc podmiotem 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 uzyskać żądany log bezpośrednio za pomocą tego filtra:

protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
  1. Kliknij nagłówek Ustawienia usługi VPC i wybierz „Rozwiąż problem z odmową dostępu”. Spowoduje to otwarcie narzędzia do rozwiązywania problemów w Ustawieniach usługi VPC.

Ten interfejs API wyświetli w przyjaznym interfejsie powód naruszenia oraz informację, czy było to naruszenie dotyczące ruchu przychodzącego czy wychodzącego, a także inne przydatne informacje.

W tym ćwiczeniu będziemy szukać tych informacji:

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ą, abyśmy wiedzieli, że musimy utworzyć regułę ruchu wychodzącego, która umożliwi kontu usługi Compute Engine dostęp do zasobnika z projektu Z do projektu X. Widzimy też, że sieć nie znajduje się w tej samej granicy, więc musimy zezwolić na komunikację VPC z usługami i udostępnianie danych w obrębie granic usług.

  1. Aktywuj Cloud Shell i utwórz plik .yaml z regułą wychodzącą 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ę dostępu, która chroni ProjectZ.
gcloud access-context-manager perimeters update SuperProtection --set-egress-policies=egresstorage.yaml --policy=POLICY 

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

  1. W konsoli Cloud otwórz selektor projektów i wybierz ProjectZ, a następnie otwórz Compute Engine > Instancje maszyn wirtualnych.
  2. Kliknij przycisk SSH, aby połączyć się z instancją maszyny wirtualnej i uzyskać dostęp do wiersza poleceń.
  3. Gdy otworzysz interfejs wiersza poleceń maszyny wirtualnej, spróbuj wyświetlić listę obiektów w zasobniku Storage.
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ć uprawnienia do odczytu obiektów kontu usługi Compute Engine, aby można było wyświetlać listę obiektów w zasobniku Cloud Storage.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com --role=roles/storage.objectViewer
  1. Spróbujmy jeszcze raz wyświetlić plik hello.txt z interfejsu CLI instancji VM .
gcloud storage ls gs://BUCKET_NAME/
.
.
gs://BUCKET_NAME/hello.txt

Teraz możemy wyświetlić listę obiektów bez naruszania uprawnień Ustawień usługi VPC, ale co z pobieraniem pliku? Spróbujmy.

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

Otrzymamy te wyniki:

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

7. Czyszczenie

Za korzystanie z Ustawień usługi VPC, gdy usługa nie jest używana, nie są naliczane żadne opłaty, ale zalecamy zwalnianie miejsca użytego w tym laboratorium. Aby uniknąć obciążenia konta opłatami, możesz też usunąć instancję maszyny wirtualnej lub projekty Cloud. Usunięcie projektu w chmurze spowoduje zaprzestanie naliczania opłat za wszelkie zasoby wykorzystywane w ramach tego projektu.

  1. Aby usunąć instancję maszyny wirtualnej, zaznacz pole wyboru po lewej stronie nazwy instancji, a następnie kliknij Usuń.

da0abf0894fe03cd.png

  1. Aby usunąć granicę, wykonaj te czynności:
  • W konsoli Google Cloud kliknij Zabezpieczenia, a następnie Ustawienia usługi VPC w zakresie organizacji.
  • Na stronie Ustawienia usługi VPC w wierszu tabeli odpowiadającym granicy, którą chcesz usunąć, kliknij „Ikonę usuwania”.
  1. Aby usunąć poziom dostępu, wykonaj te czynności:
  • W konsoli Google Cloud otwórz stronę Menedżer kontekstu dostępu w zakresie folderu.
  • W siatce w wierszu poziomu dostępu, który chcesz usunąć, kliknij „Ikonę usuwania”, a następnie kliknij Usuń.
  1. Aby usunąć obiekt Storage i zasobnik, 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 stronę Ustawienia w obszarze Administracja projektu, który chcesz usunąć.
  • Na stronie Ustawienia w obszarze Administracja kliknij Wyłącz.
  • Wpisz identyfikator projektu i kliknij Wyłącz mimo to.

8. Gratulacje!

W tym laboratorium z kodem zaktualizowano granicę Ustawień usługi VPC w trybie próbnym, wymuszono jej stosowanie i rozwiązano problemy z nią związane.

Więcej informacji

Licencja

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