1. Einführung
In diesem Lab erfahren Sie, wie Sie den BigQuery Data Transfer Service mithilfe von VPC Service Controls schützen, während Daten von Cloud Storage in ein BigQuery-Dataset übertragen werden. 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 die erfolgreiche Übertragung behoben werden muss. Am Ende schützen wir auch BigQuery und versuchen dann, das Dataset zwischen Projekten zu kopieren. Auch das führt zu einem Verstoß, der behoben werden muss.
In diesem Lab sehen wir uns an, wie Sie Verstöße gegen ein- und ausgehenden Traffic mithilfe von Regeln für ein- und ausgehenden Traffic beheben. Wir verwenden auch eine Zugriffsebene, um den Verstoß gegen die BigQuery Data Transfer-Eingangsrichtlinie zu beheben. Die Ziele dieses Codelabs sind:
- Sie erfahren, wie Sie Verstöße für eingehenden und ausgehenden Traffic mithilfe von Regeln für eingehenden und ausgehenden Traffic für verschiedene Dienste beheben, insbesondere für Cloud Storage, BigQuery und BigQuery Data Transfer Service.
- Sie können nachvollziehen, warum ein bestimmter Verstoß aufgetreten ist.
2. Einrichtung und Anforderungen für Ressourcen
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 in der Google Cloud Console erstellen und konfigurieren
- Verstoß-Logs in Audit-Logs finden
Einrichtung
Unsere Ersteinrichtung ist so konzipiert:
- Eine Google Cloud-Organisation.
- Ein Ordner unter der Organisation. In diesem Codelab nennen wir sie
codelab-folder. - Zwei Google Cloud-Projekte im Ordner
codelab-folder. In diesem Codelab nennen wir die Projekteproject-1undproject-2.- Wenn Sie den Ordner und die Projekte noch nicht erstellt haben, erstellen Sie in der Google Cloud Console einen Ordner unter der Organisation und zwei neue Projekte.
- Die erforderlichen Berechtigungen: IAM-Rollen zum Verwalten von Ordnern, IAM-Rollen zum Verwalten von Projekten, IAM-Rollen, die zum Konfigurieren von VPC Service Controls erforderlich sind, IAM-Rollen zum Verwalten von BigQuery und IAM-Rollen zum Verwalten von Cloud Storage.
- Rechnungskonto für die beiden Projekte
project-1undproject-2.
Richtlinie mit eingeschränktem Umfang und regulären Dienstperimeter erstellen
In diesem Codelab verwenden wir einen regulären Dienstperimeter, der project-2 schützt.
- Erstellen Sie eine bereichsbezogene Zugriffsrichtlinie, die auf den Ordner
codelab-folderbeschränkt ist. In diesem Codelab gehen wir davon aus, dass die erstellte Zugriffsrichtlinie die ID987654321hat. - Erstellen Sie einen regulären Perimeter mit dem Namen
perimeter-2und fügen Sie das Projektproject-2hinzu.
Schränken Sie im Perimeter perimeter-2 BigQuery Data Transfer API ein.

Cloud Storage-Bucket und BigQuery-Dataset erstellen
Für dieses Codelab reicht eine beliebige CSV-Datei aus, unabhängig vom Inhalt. Die Haupteinschränkung bezieht sich auf die Anforderung an die gemeinsame Platzierung, die Folgendes vorschreibt:
- Wenn sich Ihr BigQuery-Dataset in einer Multi-Region befindet, muss sich der Cloud Storage-Bucket mit den Daten, die Sie übertragen, am selben Standort 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.
Im weiteren Verlauf dieses Codelabs sorgen wir dafür, dass sich sowohl der Cloud Storage-Bucket als auch das BigQuery-Dataset in derselben Region oder Multi-Region befinden.
Neuen Cloud Storage-Bucket im Projekt project-1 erstellen
Wenn Sie einen neuen Cloud Storage-Bucket erstellen möchten, folgen Sie der Anleitung unter Neuen Bucket erstellen.
- Geben Sie für den Namen des Buckets einen Namen ein, der den Anforderungen für Bucket-Namen entspricht. In diesem Codelab nennen wir den Bucket
codelab-bqtransfer-bucket. - Wählen Sie für den Speicherort der Daten (Bucket-Standort) einen Standorttyp und einen Standort aus, an dem die Bucket-Daten dauerhaft gespeichert werden sollen. In diesem 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, 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
Nachdem die CSV-Datei erstellt wurde, führen Sie 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 überprü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-2ein 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 Standort wie für den Cloud Storage-Bucket: US (multiple regions in United States) (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_dataseteine 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. - Prüfen Sie, ob 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 nach diesem Codelab Kosten in Rechnung gestellt werden.
Die Ressourcen, für die Kosten anfallen, sind BigQuery und Cloud Storage. Eine Kostenschätzung 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 Data Transfer Service (in project-2) zu erstellen, um Daten von Cloud Storage (in project-1) nach BigQuery (in project-2) zu übertragen. Dabei wird der BigQuery Data Transfer Service in project-2 durch VPC Service Controls geschützt. Wenn Sie nur den BigQuery Data Transfer Service schützen (ohne auch BigQuery und Cloud Storage zu schützen), können Prinzipale nur Datenübertragungen erstellen und verwalten, z. B. eine Datenübertragung manuell starten.
Datenübertragung aus Cloud Storage einrichten
So erstellen Sie eine Datenübertragung:
- Rufen Sie in der Google Cloud Console die BigQuery-Seite von
project-2auf. - Klicken Sie auf Datenübertragungen.

Verstoß beim Zugriff auf die Seite „Datenübertragungen“ untersuchen
In der Google Cloud Console ist die eindeutige Kennzeichnung von VPC Service Controls zu sehen. Verwenden Sie dieselbe Kennung, um Logs zu filtern und Details zu Verstößen zu ermitteln. Ersetzen Sie OBSERVED_VPCSC_DENIAL_UNIQUE_ID durch die beobachtete Ablehnungs-ID:
protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="OBSERVED_VPCSC_DENIAL_UNIQUE_ID"
Der beobachtete Verstoß ist ein NO_MATCHING_ACCESS_LEVEL, also ein Verstoß gegen die Regeln für eingehenden Traffic mit Details wie den folgenden:
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“ wird versucht, alle konfigurierten Datenübertragungen aufzulisten. Dies stellt einen Verstoß gegen die Methode ListTransferConfigs dar.
Verstoß für den Dienst bigquerydatatransfer.googleapis.com beheben
Ein Verstoß gegen die Regeln für eingehenden Traffic kann durch eine Zugriffsebene oder eine Regel für eingehenden Traffic behoben werden. In diesem Codelab verwenden wir eine Regel für eingehenden Traffic, die mit der abgelehnten Nutzeridentität konfiguriert ist und Zugriff auf den bigquerydatatransfer.googleapis.com-Dienst und alle Methoden ermöglicht.

Sobald die Eingangsregel eingerichtet ist, sollte der Zugriff auf die Seite Datenübertragungen problemlos funktionieren.
Einrichtung der Datenübertragung aus Cloud Storage fortsetzen
Fahren Sie auf der Seite „Datenübertragungen“ (nachdem Sie auf „Datenübertragungen“ geklickt haben) mit den folgenden Schritten fort:
- 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 z. B.
Codelab Transferein. - Im Abschnitt Zeitplanoptionen:
- Wählen Sie eine Wiederholungshäufigkeit aus, z. B. 15 Minuten.
- Wählen Sie Jetzt starten aus. 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 als Cloud Storage-URI den Cloud Storage-URI ein. In diesem Codelab verwenden wir den erstellten Bucket und die erstellte Datei:
codelab-bqtransfer-bucket/codelab-test-file.csv - Lassen Sie unter Schreibeinstellung die Option
APPENDausgewählt (oder wählen SieMIRRORaus). - Wählen Sie NICHT die Option zum Löschen von Dateien nach der Übertragung aus, da wir dieselbe Datei mehrmals verwenden. 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 und CSV ein 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 für Cloud Storage im Projekt haben, in dem sich der Speicher-Bucket befindet, also
project-1in diesem Codelab. - In diesem Codelab verwenden wir ein Dienstkonto, das in
project-2alscodelab-sa@project-2.iam.gserviceaccount.comerstellt wurde.
- Das ausgewählte Dienstkonto muss die erforderlichen Berechtigungen für Cloud Storage im Projekt haben, in dem sich der Speicher-Bucket befindet, also
- Klicken Sie auf Speichern.
Da wir Jetzt starten als Zeitplanoption 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 Codelab Transfer (unter „Anzeigename“), um eine Liste aller bisherigen Ausführungen aufzurufen.

Die Datenübertragung sollte sowohl bei manuell ausgelösten als auch bei geplanten Datenübertragungen erfolgreich sein und es sollte keine VPC Service Controls-Verletzung auftreten. Beachten Sie, dass nur für die manuell ausgelöste Übertragung die Eingangsregel erforderlich ist, um dem Hauptkonto, das die Übertragung manuell initiiert, Zugriff zu gewähren.
4. Einschränkungen für IP-Adressen bei manuell ausgelösten Datenübertragungen
Die aktuell konfigurierten Ingress-Regeln ermöglichen es der konfigurierten Identität, die Datenübertragung manuell von jeder IP-Adresse aus zu starten.
Durch die Verwendung von Zugriffsebenen können Sie mit VPC Service Controls den zulässigen Zugriff durch bestimmte API-Anfrageattribute 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 durch die Geolokalisierung der IP-Adresse bestimmt wird.
- Identitäten: 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.
Damit die Überprüfung dieser Attribute zusammen mit der bereits konfigurierten Regel für eingehenden Traffic erzwungen wird, müssen wir eine Zugriffsebene erstellen, die die gewünschten Attribute zulässt, und die erstellte Zugriffsebene dann als Quelle in der Regel für eingehenden Traffic hinzufügen.
In diesem Diagramm wird der Zugriff veranschaulicht, der von den beiden Hauptkonten (
user@example.com und user2@example.com) in drei Szenarien initiiert wird. Es wird gezeigt, wie VPC Service Controls Quellen (Zugriffsebene für eingehenden Traffic) und Identitätsattribute als UND-Bedingung auswertet, bei der beide übereinstimmen müssen.
- Nutzer user@beispiel.de darf auf die Ressource zugreifen, wenn er dies über eine IP-Adresse versucht, die von der Zugriffsebene zugelassen wird, 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.
- Nutzer user2@beispiel.de wird der Zugriff verweigert, obwohl er von einer zulässigen IP-Adresse aus versucht, auf das Konto zuzugreifen, da sein Konto nicht durch die Ingress-Regel zugelassen ist.
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 bei Aufforderung den Ordner
codelab-folderaus.
- Wählen Sie bei Aufforderung den Ordner
- Klicken Sie oben auf der Seite Access Context Manager auf ZUGRIFFSEBENE ERSTELLEN.
- Geben Sie im Bereich Neue Zugriffsebene einen Titel für die neue Zugriffsebene ein. In diesem Codelab nennen wir sie
project_2_al. - Klicken Sie im Abschnitt Bedingungen vor IP-Subnetzwerke auf das Pluszeichen (+).
- Wählen Sie im Feld IP-Subnetzwerke die Option Öffentliche IP aus.
- Alternativ können Sie die private IP-Adresse auswählen, um interne IP-Adressen in Zugriffsebenen zu verwenden. In diesem Codelab verwenden wir jedoch eine öffentliche IP-Adresse.
- Geben Sie einen oder mehrere Bereiche von IPv4- oder IPv6-Adressen als CIDR-Blöcke ein.
Zugriffsebene in der Regel für eingehenden Traffic hinzufügen
In der Regel für eingehenden Traffic wird auf die Zugriffsebene im Feld sources verwiesen. Dieses Feld ist erforderlich, wie in der Referenz zu Regeln für eingehenden Traffic dokumentiert. Um eingehenden Traffic zu Ressourcen zuzulassen, wertet VPC Service Controls die Attribute sources und identityType als UND-Bedingung aus. Für die Ingress-Regel wird die Identität des Principals verwendet, der die Datenübertragung manuell auslöst, nicht das in der Datenübertragungskonfiguration angegebene Dienstkonto.

Übertragung mit den Konfigurationen, die den Zugriff anhand von IP-Adressen einschränken, noch einmal ausführen
Um die Effektivität der angewendeten Konfigurationen zu bewerten, lösen Sie die Übertragung noch einmal aus. Verwenden Sie dazu die folgenden Szenarien:
- mit der IP-Adresse im Bereich, der in der von der Regel für eingehenden Traffic referenzierten Zugriffsebene zulässig ist.
- mit einer IP-Adresse, die in den Konfigurationen nicht zulässig ist
Der Zugriff von zulässigen IP-Adressen sollte erfolgreich sein, während der Zugriff von nicht zulässigen IP-Adressen fehlschlagen und zu einem VPC Service Controls-Verstoß führen sollte.
Eine einfache Möglichkeit, mit einer anderen IP-Adresse zu testen, besteht darin, die IP-Adresse zuzulassen, die bei der Verwendung der Google Cloud Console zugewiesen wird, und dann mit Cloud Shell zu testen.
Führen Sie in der Cloud Shell den folgenden Befehl aus, um manuell eine Übertragung auszulösen. Ersetzen Sie dazu 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 Verstoß gegen VPC Service Controls, da die IP-Adresse nicht zulässig ist.

Der beobachtete 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 gleichzeitig Cloud Storage-Dienst schützen
Da wir eine Übertragung von Cloud Storage nach BigQuery durchführen, fügen wir Cloud Storage zu den durch VPC Service Controls geschützten Diensten hinzu und prüfen, ob die Übertragung weiterhin erfolgreich ist.
Fügen Sie in der perimeter-2-Konfiguration 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 eine Ü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 Übertragung Codelab Transfer.
- Klicken Sie auf Übertragung jetzt ausführen.
- Klicken Sie auf OK.
Eine weitere Übertragung wird gestartet. Möglicherweise müssen Sie die Seite aktualisieren, um sie zu sehen. Dieses Mal schlägt die Übertragung aufgrund eines Verstoßes gegen VPC Service Controls fehl.

Verstoß gegen VPC Service Controls für Cloud Storage untersuchen
Filtern Sie Audit-Logs mit vpcServiceControlsUniqueIdentifier, wie in der Zusammenfassung der Übertragung zu sehen ist.
Der beobachtete Verstoß ist ein RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER-Ausgangsverstoß mit den folgenden Details:
- Das Hauptkonto ist das im Data Transfer Service konfigurierte Dienstkonto. Unabhängig davon, ob die Datenübertragung manuell ausgelöst oder planmäßig ausgeführt wird, ist das abgelehnte Hauptkonto dasselbe.
- Der betroffene Dienst ist Cloud Storage
- Die Quelle der Anfrage ist das Projekt, in dem 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-Ausgangsregeln beheben
Um den Verstoß bei ausgehendem Traffic zu beheben, müssen wir eine Regel für ausgehenden Traffic verwenden, die 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 aus 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 ist durch VPC Service Controls geschützt.
Zum Erstellen und Kopieren des Datasets verwenden wir den Befehl bq mk, für den das Tool bq verwendet wird.
Ziel-Dataset in project-1 erstellen
Bevor Sie das Dataset kopieren, muss das Ziel-Dataset erstellt werden. Mit dem folgenden Befehl erstellen wir das Ziel-Dataset. Dabei wird ein Dataset mit dem Namen copied_dataset im Projekt project-1 mit us als Standort 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 zusammen mit den Diensten 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 im Projekt project-2 in das Dataset copied_dataset in project-1 kopiert und der Dataset-Inhalt überschrieben, falls vorhanden.
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 erfolgreich erstellt, um den Vorgang zum Kopieren des Datasets zu starten. Das Kopieren des Datasets selbst schlägt mit einem Verstoß gegen VPC Service Controls fehl.
Die entsprechenden Details zum VPC Service Controls-Verstoß finden Sie in den Logs in project-2 (Quelldataset-Projekt) mit der folgenden Log-Abfrage. Mit der Log-Abfrage werden Logs für den BigQuery-Dienst und den Ressourcennamen des zu kopierenden Datasets (codelab_bqtransfer_dataset) gefiltert.
resource.labels.service="bigquery.googleapis.com"
protoPayload.metadata.resourceNames:"datasets/codelab_bqtransfer_dataset"
Der beobachtete VPC Service Controls-Verstoß ist ein Verstoß für ausgehenden Traffic 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 das Kopieren des Datasets noch einmal starten
Um den Verstoß gegen die Regel für ausgehenden Traffic zu beheben, müssen wir eine Regel für ausgehenden Traffic erstellen, die das abgelehnte Prinzipal zulässt. Das abgelehnte Hauptkonto ist das Konto, mit dem der Befehl mk ausgeführt wird.

Sobald die Egress-Regel eingerichtet ist, führen Sie denselben Befehl auf dem Perimeter perimeter-2 aus, um das Dataset zu kopieren. Dieses Mal sollte das Dataset ohne Verstoß gegen VPC Service Controls 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 Lab verwendete Einrichtung zu bereinigen. Sie können auch die VM-Instanz und/oder Cloud-Projekte löschen, um Kosten zu vermeiden. Wenn Sie das Cloud-Projekt löschen, wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.
- So löschen Sie den Cloud Storage-Bucket:
- Wechseln Sie in der Cloud Console zur Seite Cloud Storage-Buckets.
- Markieren Sie das Kästchen des zu löschenden Buckets und klicken Sie dann auf Löschen.
- Bestätigen Sie im eingeblendeten Fenster, dass Sie den 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
deletein 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 festgelegt ist. In diesem Fall ist das die Ordnerebene.
- Wählen Sie auf der Seite „VPC Service Controls“ in der Tabellenzeile für den Perimeter, den Sie löschen möchten,
Delete Iconaus.
- So löschen Sie die Zugriffsebene:
- Öffnen Sie in der Google Cloud Console die Seite Access Context Manager im Ordnerbereich.
- Suchen Sie im Raster die Zeile für die Zugriffsebene, die Sie löschen möchten, wählen Sie das Dreipunkt-Menü und dann Löschen aus.
- So fahren Sie die Projekte herunter:
- Rufen Sie in der Google Cloud Console die Seite IAM- und Verwaltungseinstellungen des Projekts auf, das Sie löschen möchten.
- Wählen Sie auf der Seite „IAM & 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, ihn erzwungen und Fehler behoben.
Weitere Informationen
Sie können auch die folgenden Szenarien ausprobieren:
- Fügen Sie
project-1in 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 durchführen
- Sie können den Nutzerzugriff auch anhand anderer Attribute wie Standort oder Geräte-Richtlinie einschränken.
Lizenz
Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.