VPC Service Controls – Schutz für BigQuery Data Transfer Service

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:

Einrichtung

Unsere Ersteinrichtung sieht so aus:

Diagramm zur Ersteinrichtung des Codelabs

Richtlinie mit Gültigkeitsbereich und regulären Dienstperimeter erstellen

In diesem Codelab verwenden wir einen regulären Dienstperimeter, der project-2 schützt.

Im Perimeter perimeter-2 BigQuery Data Transfer API einschränken.

VPC SC-Konfigurationen zum Schutz des Datenübertragungsdiensts

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).

Konfiguration für die Cloud Storage-Erstellung

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

Führen Sie den Befehl „cp“ aus, um die CSV-Datei in Cloud Storage hochzuladen.

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

  1. Erstellen Sie im Projekt project-2 ein BigQuery-Dataset. Folgen Sie dazu dieser Anleitung.
    1. Geben Sie für die Dataset-ID einen eindeutigen Dataset-Namen ein. In diesem Codelab verwenden wir: codelab_bqtransfer_dataset.
    2. 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). Erstellen eines BigQuery-Datasets
  2. Erstellen Sie unter dem erstellten Dataset codelab_bqtransfer_dataset eine BigQuery-Tabelle. Folgen Sie dazu dieser Anleitung.
    1. Wählen Sie im Abschnitt Quelle in der Liste Tabelle erstellen aus die Option Leere Tabelle aus.
    2. 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.
    3. Achten Sie darauf, dass das Feld Tabellentyp auf Native Tabelle eingestellt ist.
    4. 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:

  1. Rufen Sie in der Google Cloud Console von project-2 die BigQuery-Seite auf.
  2. Klicken Sie auf Datenübertragungen.

Verstoß gegen VPC SC auf der Seite „Datenübertragungsdienst“

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.

Ingress-Regel zum Zulassen von Datenübertragungsmethoden.

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:

  1. Klicken Sie auf + Übertragung erstellen.
  2. Wählen Sie im Abschnitt Quelltyp für Quelle die Option Google Cloud Storage aus.
  3. Geben Sie im Abschnitt Konfigurationsname für Übertragung unter Anzeigename einen Namen für die Übertragung wie Codelab Transfer ein.
  4. Im Abschnitt Zeitplanoptionen:
    1. Wählen Sie eine Wiederholungshäufigkeit aus, z. B. 15 Minuten.
    2. Achten Sie darauf, Jetzt starten auszuwählen. Andernfalls beginnt die Datenübertragung erst nach der konfigurierten Wiederholungshäufigkeit.
  5. Wählen Sie im Abschnitt Zieleinstellungen für Ziel-Dataset das Dataset aus, das Sie zum Speichern Ihrer Daten erstellt haben: codelab_bqtransfer_dataset
  6. Im Abschnitt Details zur Datenquelle:
    1. 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
    2. 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
    3. Lassen Sie unter Schreibeinstellung die Option APPEND ausgewählt (oder wählen Sie MIRROR aus).
    4. 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.
    5. Wählen Sie unter Dateiformat die Option CSV aus.
    6. Geben Sie unter Übertragungsoptionen unter CSV das Komma („,“) als Feldtrennzeichen ein.
  7. Wählen Sie im Menü Dienstkonto ein Dienstkonto aus den Dienstkonten aus, die mit Ihrem Google Cloud-Projekt verknüpft sind.
    1. 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.
    2. In diesem Codelab verwenden wir ein Dienstkonto, das in project-2 als codelab-sa@project-2.iam.gserviceaccount.com erstellt wurde.
  8. 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.

Data Transfer Service-Jobs

Klicken Sie auf das Dreipunkt-Menü Codelab Transfer (unter „Anzeigename“), um eine Liste aller bisher ausgeführten Ausführungen aufzurufen.

Details zu Ausführungen des Data Transfer Service.

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.

Zugriff, der durch VPC SC anhand der Nutzer-IP-Adresse geschützt ist 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.

  1. 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.
  2. 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.
  3. 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:

  1. Ö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.
  2. Klicken Sie oben auf der Seite Access Context Manager auf ZUGRIFFSEBEN ERSTELLEN.
  3. Geben Sie im Bereich Neue Zugriffsebene einen Titel für die neue Zugriffsebene ein. Für dieses Codelab nennen wir sie project_2_al.
  4. Klicken Sie im Bereich Bedingungen vor IP-Subnetzwerke auf das Pluszeichen.
  5. Wählen Sie im Feld IP-Subnetzwerke die Option Öffentliche IP-Adresse aus.

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.

Ingress-Regel, die mit einer Zugriffsebene konfiguriert ist.

Ü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.

VPC SC-Verstoß von nicht zulässiger IP-Adresse

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.

VPC SC-Konfigurationen zum Schutz von Cloud Storage

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:

  1. Rufen Sie in der Google Cloud Console die Seite "BigQuery" auf.
  2. Klicken Sie auf Datenübertragungen.
  3. Wählen Sie die Übertragung aus der Liste aus: In diesem Codelab verwenden wir die Codelab-Übertragung.
  4. Klicken Sie auf Übertragung jetzt ausführen.
  5. 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.

VPC-SC-Verstoß beim Kopieren eines BigQuery-Datasets

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.

Regel für ausgehenden Traffic für das Codelab-Dienstkonto

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.

Details zur Datenübertragung nach der Konfiguration der Regel für ausgehenden Traffic.

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.

VPC SC für den Schutz der Cloud Storage API konfiguriert.

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.

Ausgehende Regel, die den Zugriff auf alle BigQuery-Methoden zulässt.

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. Löschen des Cloud Storage-Buckets
  • 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. Löschen des BigQuery-Datasets
  • 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.