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:
- organizacji GCP.
- Folder w organizacji.
- 2 projekty GCP w tej samej organizacji umieszczone w folderze.
- Wymagane uprawnienia na poziomie organizacji.
- Konto rozliczeniowe dla obu projektów.
- Podstawowy samouczek I dotyczący Ustawień usługi VPC – konfiguracja Ustawień usługi VPC i Menedżera kontekstu dostępu.

Resources-setup
- Skonfiguruj zasoby zgodnie z opisem w sekcji „Konfiguracja zasobów” w podstawowym samouczku I dotyczącym Ustawień usługi VPC.
- Sprawdź, czy masz wymagane uprawnienia do administrowania Cloud Storage.
- 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.

- 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.
- W konsoli Google wybierz ProjectX. W tym projekcie utworzymy zasobnik na dane i obiekt.
- Upewnij się, że Cloud Shell używa ProjectX. W tym celu uruchom to polecenie:
gcloud config set project PROJECT_ID
- W środowisku programistycznym uruchom to polecenie:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
- 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.
- Prześlij obiekt do zasobnika.
gcloud storage cp /home/${USER}/hello.txt gs://BUCKET_NAME
- 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.
- W konsoli Google wybierz organizację i uzyskaj dostęp do ustawień usługi VPC. Sprawdź, czy jesteś w zakresie organizacji.
- 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
- 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: {}":

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

- 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.
- 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"
- 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
- 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.
- Otwórz selektor projektów i wybierz ProjectZ.
- 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"
- 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.
- 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
- 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.
- W konsoli Cloud otwórz selektor projektów i wybierz ProjectZ, a następnie otwórz Compute Engine > Instancje maszyn wirtualnych.
- Kliknij przycisk SSH, aby połączyć się z instancją maszyny wirtualnej i uzyskać dostęp do wiersza poleceń.
- 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).
- 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
- 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.
- Aby usunąć instancję maszyny wirtualnej, zaznacz pole wyboru po lewej stronie nazwy instancji, a następnie kliknij Usuń.

- 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”.
- 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ń.
- 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ń.
- 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
- Zapoznaj się z dokumentacją Ustawień usługi VPC.
- Zapoznaj się z dokumentacją Menedżera kontekstu dostępu.
- Zapoznaj się z dokumentacją narzędzia do rozwiązywania problemów z VPC-SC.
- Zapoznaj się z dokumentacją reguł dotyczących ruchu przychodzącego i wychodzącego.
- Zapoznaj się z dokumentacją dotyczącą testu .
- Więcej informacji znajdziesz w dokumentacji Cloud Storage.
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.