1. Einführung
In diesem Lab erfahren Sie, wie Sie den BigQuery Data Transfer Service mithilfe von VPC Service Controls schützen, während Sie Daten von Cloud Storage in einen BigQuery-Datensatz übertragen. Anschließend schützen wir Cloud Storage und wiederholen den Vorgang, um Daten von Cloud Storage nach BigQuery zu übertragen. Der Schutz von Cloud Storage führt zu einem Verstoß gegen VPC Service Controls, der für eine erfolgreiche Übertragung behoben werden muss. Schließlich schützen wir auch BigQuery und versuchen dann, das Dataset zwischen Projekten zu kopieren. Dies führt ebenfalls zu einem Verstoß, der behoben werden muss.
In diesem Lab erfahren Sie, wie Sie Verstöße gegen Regeln für eingehenden und ausgehenden Traffic mithilfe von Regeln für eingehenden und ausgehenden Traffic beheben. Außerdem verwenden wir eine Zugriffsebene, um den Verstoß gegen die BigQuery Data Transfer-Eingangsregeln zu beheben. Die Ziele dieses Codelabs sind:
- Informationen zum Beheben von Zugriffsverstößen mithilfe von Zugriffsregeln für verschiedene Dienste, insbesondere Cloud Storage, BigQuery und BigQuery Data Transfer Service.
- Sie erfahren, warum ein bestimmter Verstoß aufgetreten ist.
2. Ressourcen – Einrichtung und Anforderungen
Hinweis
In diesem Codelab gehen wir davon aus, dass Sie bereits Folgendes wissen:
- Ordner erstellen
- Projekt in einem Ordner erstellen oder vorhandenes Projekt in einen Ordner verschieben
- Bereichszugriffsrichtlinie erstellen
- Dienstperimeter über die Google Cloud Console erstellen und konfigurieren
- Verstoßprotokolle in Audit-Logs finden
Einrichtung
Unsere Ersteinrichtung sieht so aus:
- Eine Google Cloud-Organisation.
- Einen Ordner unter „Organisation“. Für dieses Codelab nennen wir sie
codelab-folder
. - Zwei Google Cloud-Projekte im Ordner
codelab-folder
In diesem Codelab nennen wir die Projekteproject-1
undproject-2
.- Wenn Sie den Ordner und die Projekte noch nicht erstellt haben, erstellen Sie in der Google Cloud Console unter „Organisation“ einen Ordner und zwei neue Projekte.
- Erforderliche Berechtigungen: IAM-Rollen zum Verwalten von Ordnern, IAM-Rollen zum Verwalten von Projekten, IAM-Rollen zum Konfigurieren von VPC-Dienststeuerungen, IAM-Rollen zum Verwalten von BigQuery und IAM-Rollen zum Verwalten von Cloud Storage.
- Rechnungskonto für die Projekte
project-1
undproject-2
Richtlinie mit Gültigkeitsbereich und regulären Dienstperimeter erstellen
In diesem Codelab verwenden wir einen regulären Dienstperimeter, der project-2
schützt.
- Erstellen Sie eine Zugriffsrichtlinie für den Bereich, die auf Ordnerebene
codelab-folder
gilt. In diesem Codelab gehen wir davon aus, dass die erstellte Zugriffsrichtlinie die ID987654321
hat. - Erstellen Sie einen regulären Perimeter, nennen Sie ihn
perimeter-2
und fügen Sie das Projektproject-2
hinzu.
Im Perimeter perimeter-2
BigQuery Data Transfer API
einschränken.
Cloud Storage-Bucket und BigQuery-Dataset erstellen
Für dieses Codelab reicht jede CSV-Datei, unabhängig vom Inhalt. Die Haupteinschränkung bezieht sich auf die Anforderungen an die Co-Location, die Folgendes vorschreiben:
- Wenn sich Ihr BigQuery-Dataset in einer Multi-Region befindet, muss sich der Cloud Storage-Bucket mit den Daten, die Sie übertragen, in derselben Multi-Region oder an einem Standort befinden, der sich in derselben Multi-Region befindet.
- Wenn sich Ihr Dataset in einer Region befindet, muss sich der Cloud Storage-Bucket in derselben Region befinden.
In diesem Codelab gehen wir davon aus, dass sich sowohl der Cloud Storage-Bucket als auch das BigQuery-Dataset in derselben Region oder Multiregion befinden.
Neuen Cloud Storage-Bucket im Projekt project-1
erstellen
Folgen Sie der Anleitung zum Erstellen eines neuen Buckets, um einen neuen Cloud Storage-Bucket zu erstellen.
- Geben Sie als Namen des Buckets einen Namen ein, der den Anforderungen für Bucket-Namen entspricht. Für dieses Codelab nennen wir den Bucket
codelab-bqtransfer-bucket
. - Wählen Sie als Speicherort für die Daten den Standorttyp und den Speicherort aus, unter dem die Bucket-Daten dauerhaft gespeichert werden. Für dieses Codelab verwenden wir us (mehrere Regionen in den USA).
CSV-Datei erstellen
Auf Ihrem lokalen Computer oder in Cloud Shell können Sie mit dem Befehl echo
eine Beispiel-CSV-Datei namens codelab-test-file.csv
erstellen. Verwenden Sie dazu die folgenden Befehle:
echo "name,age" > codelab-test-file.csv; \
echo "Alice,10" >> codelab-test-file.csv; \
echo "Bob,20" >> codelab-test-file.csv; \
echo "Carol,30" >> codelab-test-file.csv; \
echo "Dan,40" >> codelab-test-file.csv; \
echo "Eve,50" >> codelab-test-file.csv; \
echo "Frank,60" >> codelab-test-file.csv; \
echo "Grace,70" >> codelab-test-file.csv; \
echo "Heidi,80" >> codelab-test-file.csv;
CSV-Datei in Cloud Storage-Bucket hochladen
Führen Sie nach dem Erstellen der CSV-Datei den folgenden Befehl aus, um das Dateiobjekt in den erstellten Bucket hochzuladen:
gcloud storage cp codelab-test-file.csv gs://codelab-bqtransfer-bucket
Sie können prüfen, ob die Datei in den erstellten Bucket hochgeladen wurde, indem Sie Objekte im Bucket auflisten oder den folgenden Befehl ausführen:
gcloud storage ls --recursive gs://codelab-bqtransfer-bucket/**
BigQuery-Dataset und ‑Tabelle in project-2
erstellen
- Erstellen Sie im Projekt
project-2
ein BigQuery-Dataset. Folgen Sie dazu dieser Anleitung.- Geben Sie für die Dataset-ID einen eindeutigen Dataset-Namen ein. In diesem Codelab verwenden wir:
codelab_bqtransfer_dataset
. - Wählen Sie unter Standorttyp einen geografischen Standort für das Dataset aus. In diesem Codelab verwenden wir denselben Speicherort wie den Cloud Storage-Bucket: USA (mehrere Regionen in den USA).
- Geben Sie für die Dataset-ID einen eindeutigen Dataset-Namen ein. In diesem Codelab verwenden wir:
- Erstellen Sie unter dem erstellten Dataset
codelab_bqtransfer_dataset
eine BigQuery-Tabelle. Folgen Sie dazu dieser Anleitung.- Wählen Sie im Abschnitt Quelle in der Liste Tabelle erstellen aus die Option Leere Tabelle aus.
- Geben Sie im Feld Tabelle den Namen der Tabelle ein, die Sie erstellen möchten. In diesem Codelab verwenden wir den Namen
codelab-bqtransfer-table
. - Achten Sie darauf, dass das Feld Tabellentyp auf Native Tabelle eingestellt ist.
- Geben Sie im Abschnitt Schema die Schemadefinition ein. Sie können Schemainformationen eingeben, indem Sie auf Als Text bearbeiten klicken und das folgende Schema eingeben, das dem Format der erstellten CSV-Datei entspricht.
[{ "name": "name", "type": "STRING", "mode": "NULLABLE", "description": "The name" }, { "name": "age", "type": "INTEGER", "mode": "NULLABLE", "description": "The age" }]
Kosten
Sie müssen die Abrechnung in den Projekten project-2
und project-1
aktivieren, um Cloud-Ressourcen/-APIs verwenden zu können. Wir empfehlen, verwendete Ressourcen herunterzufahren, um zu vermeiden, dass Ihnen Kosten über dieses Codelab hinaus in Rechnung gestellt werden.
Die Kosten entstehen für BigQuery und Cloud Storage. Eine Schätzung der Kosten finden Sie im BigQuery-Preisrechner und im Cloud Storage-Preisrechner.
3. Datenübertragung von Cloud Storage-Objekt zu BigQuery-Tabelle konfigurieren
Wir versuchen jetzt, einen Datenübertragungsdienst (in project-2
) zu erstellen, um von Cloud Storage (in project-1
) nach BigQuery (in project-2
) zu übertragen. Dabei sollen VPC-Dienststeuerungen den BigQuery Data Transfer Service in project-2
schützen. Wenn Sie nur den BigQuery Data Transfer Service schützen, ohne BigQuery und Cloud Storage zu schützen, können berechtigte Nutzer nur Datenübertragungen erstellen und verwalten, z. B. eine Datenübertragung manuell starten.
Datenübertragung von Cloud Storage einrichten
So erstellen Sie eine Datenübertragung:
- Rufen Sie in der Google Cloud Console von
project-2
die BigQuery-Seite auf. - Klicken Sie auf Datenübertragungen.
Verstoß beim Zugriff auf die Seite „Datenübertragungen“ untersuchen
In der Google Cloud Console sehen wir die eindeutige Kennzeichnung für VPC Service Controls. Verwenden Sie dieselbe Kennung, um Protokolle zu filtern und Details zum Verstoß zu ermitteln. Ersetzen Sie dabei OBSERVED_VPCSC_DENIAL_UNIQUE_ID
durch die beobachtete ID der Ablehnung:
protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="OBSERVED_VPCSC_DENIAL_UNIQUE_ID"
Der festgestellte Verstoß ist ein NO_MATCHING_ACCESS_LEVEL
, ein Verstoß gegen die Regeln für eingehenden Traffic, mit folgenden Details:
ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
}]
violationReason: "NO_MATCHING_ACCESS_LEVEL"
callerIp: "USER_PUBLIC_IP_ADDRESS"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.ListTransferConfigs"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}
Beim Zugriff auf die Seite „Datenübertragungen“ werden alle konfigurierten Datenübertragungen aufgelistet. Dies stellt einen Verstoß gegen die ListTransferConfigs
-Methode dar.
Verstoß für den bigquerydatatransfer.googleapis.com
-Dienst beheben
Ein Verstoß gegen die Ingress-Regel kann mit einer Zugriffsebene oder einer Ingress-Regel behoben werden. In diesem Codelab verwenden wir eine Ingress-Regel, die mit der abgelehnten Nutzeridentität konfiguriert ist und den Zugriff auf den bigquerydatatransfer.googleapis.com
-Dienst und alle Methoden ermöglicht.
Sobald die Ingress-Regel vorhanden ist, sollte der Zugriff auf die Seite Datenübertragungen problemlos funktionieren.
Einrichtung der Datenübertragung von Cloud Storage fortsetzen
Fahren Sie auf der Seite „Datenübertragungen“ mit den folgenden Schritten fort, nachdem Sie auf „Datenübertragungen“ geklickt haben:
- Klicken Sie auf + Übertragung erstellen.
- Wählen Sie im Abschnitt Quelltyp für Quelle die Option Google Cloud Storage aus.
- Geben Sie im Abschnitt Konfigurationsname für Übertragung unter Anzeigename einen Namen für die Übertragung wie
Codelab Transfer
ein. - Im Abschnitt Zeitplanoptionen:
- Wählen Sie eine Wiederholungshäufigkeit aus, z. B. 15 Minuten.
- Achten Sie darauf, Jetzt starten auszuwählen. Andernfalls beginnt die Datenübertragung erst nach der konfigurierten Wiederholungshäufigkeit.
- Wählen Sie im Abschnitt Zieleinstellungen für Ziel-Dataset das Dataset aus, das Sie zum Speichern Ihrer Daten erstellt haben:
codelab_bqtransfer_dataset
- Im Abschnitt Details zur Datenquelle:
- Geben Sie für Destination table (Zieltabelle) den Namen Ihrer Zieltabelle ein. Die Zieltabelle muss den Regeln für die Tabellenbenennung folgen. In diesem Codelab verwenden wir die Tabelle, die wir zuvor erstellt haben:
codelab-bqtransfer-table
- Geben Sie unter Cloud Storage-URI den Cloud Storage-URI ein. Für dieses Codelab verwenden wir den erstellten Bucket und die erstellte Datei:
codelab-bqtransfer-bucket/codelab-test-file.csv
- Lassen Sie unter Schreibeinstellung die Option
APPEND
ausgewählt (oder wählen SieMIRROR
aus). - Wählen Sie NICHT die Option zum Löschen der Dateien nach der Übertragung aus. Wir verwenden dieselbe Datei nämlich mehrmals. Sie können jedoch mehrere Dateien verwenden und die Quelldateien nach der Übertragung löschen.
- Wählen Sie unter Dateiformat die Option CSV aus.
- Geben Sie unter Übertragungsoptionen unter CSV das Komma („,“) als Feldtrennzeichen ein.
- Geben Sie für Destination table (Zieltabelle) den Namen Ihrer Zieltabelle ein. Die Zieltabelle muss den Regeln für die Tabellenbenennung folgen. In diesem Codelab verwenden wir die Tabelle, die wir zuvor erstellt haben:
- Wählen Sie im Menü Dienstkonto ein Dienstkonto aus den Dienstkonten aus, die mit Ihrem Google Cloud-Projekt verknüpft sind.
- Das ausgewählte Dienstkonto muss die erforderlichen Berechtigungen sowohl für Cloud Storage im Projekt haben, in dem der Speicher-Bucket gehostet wird (
project-1
in diesem Codelab), als auch für das Projekt selbst. - In diesem Codelab verwenden wir ein Dienstkonto, das in
project-2
alscodelab-sa@project-2.iam.gserviceaccount.com
erstellt wurde.
- Das ausgewählte Dienstkonto muss die erforderlichen Berechtigungen sowohl für Cloud Storage im Projekt haben, in dem der Speicher-Bucket gehostet wird (
- Klicken Sie auf Speichern.
Da wir als Zeitplanoption Jetzt starten ausgewählt haben, beginnt die erste Übertragung, sobald Speichern ausgewählt wird.
Status des Datenübertragungsdienstes prüfen
So prüfen Sie den Status der konfigurierten Datenübertragung:
- Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.
- Klicken Sie auf Datenübertragungen.
- Die Liste der konfigurierten Übertragungen wird angezeigt.
Klicken Sie auf das Dreipunkt-Menü Codelab Transfer
(unter „Anzeigename“), um eine Liste aller bisher ausgeführten Ausführungen aufzurufen.
Die Datenübertragung sollte sowohl bei manuell ausgelösten als auch bei geplanten Datenübertragungen erfolgreich sein und keine VPC Service Controls-Verstöße verursachen. Hinweis: Nur für die manuell ausgelöste Übertragung ist die Ingress-Regel erforderlich, um Zugriff auf das Hauptkonto zu gewähren, das die Übertragung manuell initiiert.
4. Einschränkungen für IP-Adressen bei manuell ausgelösten Datenübertragungen
Mit den aktuell konfigurierten Regeln für den Dateneingang kann die konfigurierte Identität die Datenübertragung manuell von jeder IP-Adresse aus auslösen.
Mithilfe der Zugriffsebene können Sie mit VPC Service Controls den zulässigen Zugriff anhand bestimmter Attribute von API-Anfragen einschränken, insbesondere:
- IP-Subnetzwerke: Prüft, ob die Anfrage von einer bestimmten IP-Adresse stammt.
- Regionen: Prüft, ob die Anfrage aus einer bestimmten Region stammt, die anhand der Geolokalisierung der IP-Adresse bestimmt wird.
- Principals: Prüft, ob die Anfrage von einem bestimmten Konto stammt.
- Geräterichtlinie: Prüft, ob die Anfrage von einem Gerät stammt, das bestimmte Anforderungen erfüllt.
Um die Überprüfung dieser Attribute zusammen mit der bereits konfigurierten Ingress-Regel zu erzwingen, müssen wir eine Zugriffsebene erstellen, die die gewünschten Attribute zulässt, und dann die erstellte Zugriffsebene als Quelle in die Ingress-Regel einfügen.
Dieses Diagramm zeigt den Zugriff, der von den beiden Hauptkonten (
user@example.com
und user2@example.com
) in drei Szenarien initiiert wurde. Es veranschaulicht, wie VPC Service Controls Quellen (Zugriffsebene für den Dateneingang) und Identitätsattribute als UND-Bedingung auswertet, bei der beide übereinstimmen müssen.
- Dem Nutzer „nutzer@beispiel.de“ wird der Zugriff zugelassen, wenn er von einer IP-Adresse aus versucht, auf die Ressource zuzugreifen, die von der Zugriffsebene zugelassen ist, da seine IP-Adresse und sein Nutzerkonto mit den Konfigurationen in der Regel für eingehenden Traffic übereinstimmen.
- Der Zugriff für den Nutzer „user@beispiel.de“ wird blockiert, wenn seine IP-Adresse nicht mit der zulässigen IP-Adresse übereinstimmt, obwohl sein Konto in der Ingress-Regel konfiguriert ist.
- Der Zugriff für den Nutzer „user2@beispiel.de“ wird blockiert, obwohl er von einer zulässigen IP-Adresse aus versucht hat, darauf zuzugreifen, da sein Konto von der Ingress-Regel nicht zugelassen wird.
Zugriffsebene erstellen
So erstellen Sie eine Zugriffsebene, die den Zugriff nach IP-Adresse einschränkt:
- Öffnen Sie in der Google Cloud Console die Seite Access Context Manager.
- Wählen Sie den Ordner
codelab-folder
aus, wenn Sie dazu aufgefordert werden.
- Wählen Sie den Ordner
- Klicken Sie oben auf der Seite Access Context Manager auf ZUGRIFFSEBEN ERSTELLEN.
- Geben Sie im Bereich Neue Zugriffsebene einen Titel für die neue Zugriffsebene ein. Für dieses Codelab nennen wir sie
project_2_al
. - Klicken Sie im Bereich Bedingungen vor IP-Subnetzwerke auf das Pluszeichen.
- Wählen Sie im Feld IP-Subnetzwerke die Option Öffentliche IP-Adresse aus.
- Alternativ können Sie „Private IP“ auswählen, um interne IP-Adressen in Zugriffsebenen zu verwenden. Für dieses Codelab verwenden wir jedoch eine öffentliche IP-Adresse.
- Geben Sie einen oder mehrere IPv4- oder IPv6-Bereiche als CIDR-Blöcke ein.
Zugriffsebene in der Ingress-Regel hinzufügen
In der Ingress-Regel wird auf die Zugriffsebene im Feld sources
verwiesen. Dieses Feld ist wie in der Referenz zu Ingress-Regeln beschrieben obligatorisch. Um eingehenden Traffic zu Ressourcen zuzulassen, wertet VPC Service Controls die Attribute sources
und identityType
als UND-Bedingung aus. In der Ingress-Regel wird die Identität des Prinzipals verwendet, der die Datenübertragung manuell auslöst, nicht das in der Datenübertragungskonfiguration angegebene Dienstkonto.
Übertragung mit den Konfigurationen wiederholen, die den Zugriff nach IP-Adresse einschränken
Um die Effektivität der angewendeten Konfigurationen zu bewerten, können Sie die Übertragung mit den folgenden Szenarien noch einmal auslösen:
- mit der IP-Adresse im Bereich, der in der Zugriffsebene zulässig ist, auf die in der Ingress-Regel verwiesen wird.
- eine IP-Adresse verwendet, die nicht von den Konfigurationen zulässig ist
Der Zugriff von einer zulässigen IP-Adresse sollte erfolgreich sein, während der Zugriff von nicht zulässigen IP-Adressen fehlschlagen und zu einem Verstoß gegen VPC Service Controls führen sollte.
Eine einfache Möglichkeit, die Verwendung einer anderen IP-Adresse zu testen, besteht darin, die IP-Adresse zuzulassen, die in der Google Cloud Console zugewiesen wurde, und dann mit der Cloud Shell zu testen.
Führen Sie in Cloud Shell den folgenden Befehl aus, um eine Übertragung manuell auszulösen. Ersetzen Sie dabei sowohl RUN_TIME als auch RESOURCE_NAME:
bq mk \
--transfer_run \
--run_time='RUN_TIME' \
RESOURCE_NAME
Mit dem folgenden Beispielbefehl wird beispielsweise sofort eine Übertragungskonfiguration 12345678-90ab-cdef-ghij-klmnopqrstuv
im Projekt 1234567890
ausgeführt.
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ");
bq mk \
--transfer_run \
--run_time=$NOW \
projects/1234567890/locations/us/transferConfigs/12345678-90ab-cdef-ghij-klmnopqrstuv
Die beobachtete Ausgabe zeigt wie erwartet einen VPC Service Controls-Verstoß an, da die IP-Adresse nicht zulässig ist.
Der festgestellte Verstoß bezieht sich auf die Methode DataTransferService.StartManualTransferRuns
.
ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
targetResourcePermissions: [0: "vpcsc.permissions.unavailable"]
}]
violationReason: "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.StartManualTransferRuns"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}
severity: "ERROR"
5. Datenübertragung starten und Cloud Storage-Dienst schützen
Da wir eine Übertragung von Cloud Storage nach BigQuery ausführen, fügen wir Cloud Storage zu den Diensten hinzu, die durch VPC Service Controls geschützt sind, und prüfen, ob die Übertragung weiterhin erfolgreich ist.
Fügen Sie in der perimeter-2
-Konfiguration die Cloud Storage API zusammen mit der BigQuery Data Transfer API als einen der eingeschränkten Dienste hinzu.
Nachdem Sie die Cloud Storage API gesichert haben, warten Sie auf die nächste geplante Datenübertragung oder lösen Sie die Übertragung manuell aus. Gehen Sie dazu so vor:
- Rufen Sie in der Google Cloud Console die Seite "BigQuery" auf.
- Klicken Sie auf Datenübertragungen.
- Wählen Sie die Übertragung aus der Liste aus: In diesem Codelab verwenden wir die Codelab-Übertragung.
- Klicken Sie auf Übertragung jetzt ausführen.
- Klicken Sie auf OK.
Es wird eine weitere Übertragung gestartet. Möglicherweise müssen Sie die Seite aktualisieren, um sie zu sehen. Diesmal schlägt die Übertragung mit einem VPC Service Controls-Verstoß fehl.
Verstoß gegen VPC Service Controls für Cloud Storage untersuchen
Filtern Sie die Prüfprotokolle anhand des vpcServiceControlsUniqueIdentifier
, das in der Übertragungsübersicht zu sehen ist.
Der festgestellte Verstoß ist ein RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER
-Ausgangsverstoß mit den folgenden Details:
- „Principal“ ist das Dienstkonto, das im Dienst zur Datenübertragung konfiguriert ist. Unabhängig davon, ob die Datenübertragung manuell ausgelöst oder geplant ist, ist das abgelehnte Hauptkonto dasselbe.
- Betroffener Dienst: Cloud Storage
- Die Quelle der Anfrage ist das Projekt, in dem der Data Transfer Service konfiguriert ist:
project-2
. - Das Zielprojekt ist das Projekt, in dem sich das Cloud Storage-Objekt befindet:
project-1
principalEmail: "codelab-sa@project-2.iam.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
source: "projects/[PROJECT2_NUMBER]"
sourceType: "Resource"
targetResource: "projects/[PROJECT1_NUMBER]"
targetResourcePermissions: [0: "storage.objects.get"]
}]
labels: {
method: "google.storage.objects.get"
project_id: "project-2"
service: "storage.googleapis.com"
}
Verstoß gegen die Cloud Storage-Ausgabebeschränkung beheben
Um den Verstoß zu beheben, müssen wir eine Regel für ausgehenden Traffic verwenden, die den Traffic vom abgelehnten Dienstkonto zum Projekt mit Cloud Storage-Objekten zulässt.
Nachdem Sie den Dienstperimeter perimeter-2
geändert haben, wiederholen Sie den Vorgang, um die Übertragung noch einmal auszulösen. Bei der Übertragung wird kein Fehler angezeigt.
6. BigQuery-Dataset von Projekt 2 in Projekt 1 kopieren
Nachdem wir bestätigt haben, dass wir Daten aus dem Cloud Storage-Bucket in project-1
in das BigQuery-Dataset in project-2
übertragen können, kopieren wir das BigQuery-Dataset von project-2
nach project-1
. Die BigQuery API wird dabei durch VPC Service Controls geschützt.
Zum Erstellen und Kopieren des Datensatzes verwenden wir den Befehl bq mk
, der das Tool bq nutzt.
Ziel-Dataset in project-1
erstellen
Bevor das Dataset kopiert werden kann, muss das Ziel-Dataset erstellt werden. Um das Ziel-Dataset zu erstellen, können wir den folgenden Befehl ausführen, der ein Dataset mit dem Namen copied_dataset
im Projekt project-1
mit us
als Speicherort erstellt.
bq mk \
--dataset \
--location=us \
project-1:copied_dataset
BigQuery-Dienst in project-2
mit VPC Service Controls schützen
Ändern Sie die Konfiguration des Perimeters perimeter-2
und fügen Sie die BigQuery API als geschützten Dienst sowie die Dienste BigQuery Data Transfer und Cloud Storage hinzu.
Dataset-Kopie starten
Führen Sie zum Kopieren des Datasets den folgenden bq mk
-Befehl aus. Damit wird das Dataset codelab_bqtransfer_dataset
aus dem Projekt project-2
in das Dataset copied_dataset
in project-1
kopiert und der Inhalt des Datasets (falls vorhanden) überschrieben.
bq mk \
--transfer_config \
--project_id=project-1 \
--target_dataset=copied_dataset \
--data_source=cross_region_copy \
--display_name='Dataset from project-2 to project-1' \
--params='{
"source_dataset_id":"codelab_bqtransfer_dataset",
"source_project_id":"project-2",
"overwrite_destination_table":"true"
}'
Der Befehl wird erfolgreich ausgeführt. In der Zwischenzeit wird die Übertragungskonfiguration erstellt, um den Vorgang zum Kopieren des Datensatzes zu starten. Das Kopieren des Datensatzes selbst schlägt fehl und es wird ein VPC Service Controls-Verstoß angezeigt.
Die entsprechenden Details zum VPC Service Controls-Verstoß finden Sie in den Logs in project-2
(Projekt des Quelldatensatzes) mit der folgenden Protokollabfrage. Die Protokollabfrage filtert Protokolle nach dem BigQuery-Dienst und dem Ressourcennamen des kopierten Datensatzes (codelab_bqtransfer_dataset
).
resource.labels.service="bigquery.googleapis.com"
protoPayload.metadata.resourceNames:"datasets/codelab_bqtransfer_dataset"
Der festgestellte Verstoß gegen VPC Service Controls ist ein ausgehender Verstoß von project-2
nach project-1
.
egressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
source: "projects/[PROJECT-2-NUMBER]"
sourceType: "Resource"
targetResource: "projects/[PROJECT-1-NUMBER]"
targetResourcePermissions: [
0: "bigquery.transfers.update"
1: "bigquery.transfers.get"
2: "bigquery.jobs.create"
]
}
]
method: "bigquery.tables.getData"
service: "bigquery.googleapis.com"
Alle BigQuery-Verstöße beheben und Dataset-Kopie noch einmal starten
Um den Verstoß zu beheben, müssen wir eine Regel für den ausgehenden Traffic erstellen, die dem abgelehnten Prinzipal erlaubt, den Traffic zu senden. Das Hauptkonto, dem die Berechtigung verweigert wurde, ist dasjenige, das den Befehl mk
ausführt.
Nachdem die Ausstiegsregel eingerichtet ist, führen Sie denselben Befehl auf dem Perimeter perimeter-2
aus, um das Dataset zu kopieren. Diesmal sollte der Datensatz ohne Verstoß gegen VPC Service Controls erfolgreich kopiert werden.
7. Bereinigen
Für die Verwendung von VPC Service Controls fallen keine gesonderten Gebühren an, wenn der Dienst nicht verwendet wird. Es empfiehlt sich jedoch, die in diesem Labor verwendete Konfiguration zu bereinigen. Sie können auch die VM-Instanz und/oder die Cloud-Projekte löschen, um Kosten zu vermeiden. Durch das Löschen des Cloud-Projekts wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.
- So löschen Sie den Cloud Storage-Bucket:
- Rufen Sie in der Google Cloud Console die Seite Cloud Storage-Buckets auf.
- Klicken Sie auf das Kästchen des zu löschenden Buckets und dann auf Löschen.
- Bestätigen Sie im eingeblendeten Fenster, dass Sie diesen Bucket und seinen Inhalt löschen möchten.
- So löschen Sie das BigQuery-Dataset:
- Öffnen Sie in der Google Cloud Console die Seite BigQuery.
- Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.
- Maximieren Sie das Dreipunkt-Menü und klicken Sie auf Löschen.
- Geben Sie im Dialogfeld Dataset löschen den Wert
delete
in das Feld ein und klicken Sie auf Löschen.
- So löschen Sie den Dienstperimeter:
- Wählen Sie in der Google Cloud Console Sicherheit und dann VPC Service Controls auf der Ebene aus, auf der die Zugriffsrichtlinie gilt, in diesem Fall auf Ordnerebene.
- Wählen Sie auf der Seite „VPC Service Controls“ in der Tabellenzeile des Perimeters, den Sie löschen möchten, die Option
Delete Icon
aus.
- So löschen Sie die Zugriffsebene:
- Öffnen Sie in der Google Cloud Console die Seite Access Context Manager auf Ordnerebene.
- Suchen Sie im Raster die Zeile mit der Zugriffsebene, die Sie löschen möchten, klicken Sie auf das Dreipunkt-Menü und dann auf Löschen.
- So fahren Sie die Projekte herunter:
- Rufen Sie in der Google Cloud Console die Seite IAM- und Administratoreinstellungen des Projekts auf, das Sie löschen möchten.
- Wählen Sie auf der Seite „IAM und Admin-Einstellungen“ die Option Herunterfahren aus.
- Geben Sie die Projekt-ID ein und wählen Sie Trotzdem beenden aus.
8. Glückwunsch!
In diesem Codelab haben Sie einen VPC Service Controls-Perimeter erstellt, erzwungen und Fehler behoben.
Weitere Informationen
Sie können auch die folgenden Szenarien ausprobieren:
- Fügen Sie
project-1
einem anderen Perimeter hinzu, der auch BigQuery, den BigQuery Data Transfer Service und Cloud Storage schützt. - BigQuery-Datenübertragung aus anderen unterstützten Quellen ausführen
- Nutzerzugriff nach anderen Attributen wie Standort- oder Geräterichtlinie einschränken
Lizenz
Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.