Verbindung zu Amazon S3 herstellen
Als BigQuery-Administrator können Sie eine Verbindung erstellen, damit Datenanalytiker auf Daten zugreifen können, die in Amazon S3-Buckets (Amazon Simple Storage Service) gespeichert sind.
BigQuery Omni greift auf Amazon S3-Daten über Verbindungen zu. Jede Verbindung hat einen eigenen eindeutigen IAM-Nutzer (Identity and Access Management, Identitäts- und Zugriffsverwaltung) für AWS (Amazon Web Services). Sie erteilen den Nutzern Berechtigungen über AWS IAM-Rollen. Die Richtlinien in den AWS IAM-Rollen bestimmen, auf welche Daten BigQuery bei einer Verbindung zugreifen kann.
Verbindungen sind erforderlich, um Amazon S3-Daten abzufragen und Abfrageergebnisse aus BigQuery in Ihren Amazon S3-Bucket zu exportieren.
Hinweis
Es müssen die folgenden Ressourcen erstellt und festgelegt werden:
- Ein Google Cloud-Projekt mit aktivierter BigQuery Connection API
- Wenn Sie das kapazitätsbasierte Preismodell verwenden, stellen Sie sicher, dass Sie die BigQuery Reservation API für Ihr Projekt aktiviert haben. Informationen zu den Preisen finden Sie unter BigQuery-Omni-Preise.
- Ein AWS-Konto mit Berechtigungen zum Ändern von IAM-Richtlinien in AWS.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle BigQuery-Verbindungsadministrator (roles/bigquery.connectionAdmin
) für das Projekt zu gewähren, um die Berechtigungen zum Erstellen einer Verbindung zu erhalten, damit Sie auf Amazon S3-Daten zugreifen können.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
AWS IAM-Richtlinie für BigQuery erstellen
Folgen Sie den Best Practices für Sicherheit für Amazon S3. Wir empfehlen Folgendes:
- Richten Sie eine AWS-Richtlinie ein, die den Zugriff auf Ihren Amazon S3-Bucket über HTTP verhindert.
- Richten Sie eine AWS-Richtlinie ein, die den öffentlichen Zugriff auf Ihren Amazon S3-Bucket verhindert.
- Verwenden Sie die serverseitige Verschlüsselung von Amazon S3.
- Beschränken Sie die für das Google-Konto gewährten Berechtigungen auf das erforderliche Minimum.
- Richten Sie CloudTrails ein und aktivieren Sie Amazon S3-Datenereignisse.
Verwenden Sie zum Erstellen einer AWS-IAM-Richtlinie die AWS Console oder Terraform:
AWS Console
- Rufen Sie die AWS IAM-Konsole (Identity and Access Management, Identitäts- und Zugriffsverwaltung) auf. Achten Sie darauf, dass Sie sich in dem Konto befinden, zu dem der Amazon S3-Bucket gehört, auf den Sie zugreifen möchten.
- Wählen Sie Richtlinien > Richtlinie erstellen aus. Die Optionen werden in einem neuen Tab angezeigt.
Klicken Sie auf JSON und fügen Sie Folgendes in den Editor ein:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::BUCKET_NAME" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] }
Ersetzen Sie Folgendes:
BUCKET_NAME
: Der Amazon S3-Bucket, auf den BigQuery zugreifen soll.
Geben Sie im Feld Name einen Richtliniennamen ein, z. B.
bq_omni_read_only
.Klicken Sie auf Richtlinie erstellen.
Ihre Richtlinie wird mit einem Amazon Resource Name (ARN) im folgenden Format erstellt:
arn:aws:iam::AWS_ACCOUNT_ID:policy/POLICY_NAME
Ersetzen Sie Folgendes:
AWS_ACCOUNT_ID
ist die ID-Nummer des AWS IAM-Nutzers der Verbindung.POLICY_NAME
ist der Name der Richtlinie, die Sie ausgewählt haben.
Terraform
Fügen Sie der Terraform-Konfiguration Folgendes hinzu, um eine Richtlinie an eine Amazon S3-Bucket-Ressource anzuhängen:
resource "aws_iam_policy" "bigquery-omni-connection-policy" { name = "bigquery-omni-connection-policy" policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "BucketLevelAccess", "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::BUCKET_NAME"] }, { "Sid": "ObjectLevelAccess", "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] } EOF }
Ersetzen Sie BUCKET_NAME
durch den Amazon S3-Bucket, auf den BigQuery zugreifen soll.
Wenn Sie Daten in einen Amazon S3-Bucket exportieren müssen, benötigen Sie außerdem die Berechtigung s3:PutObject
. Um die Zugriffssteuerung getrennt festzulegen, empfehlen wir, eine weitere Verbindung mit einer separaten AWS IAM-Rolle zu erstellen und der Rolle nur Schreibzugriff zu gewähren. Für eine detailliertere Zugriffssteuerung können Sie den Zugriff einer Rolle auch auf einen bestimmten Pfad des Buckets beschränken.
AWS IAM-Rolle für BigQuery erstellen
Erstellen Sie als Nächstes eine Rolle, die den Zugriff auf den Amazon S3-Bucket in BigQuery ermöglicht. Diese Rolle verwendet die Richtlinie, die Sie im vorherigen Abschnitt erstellt haben.
Verwenden Sie zum Erstellen einer AWS-IAM-Rolle die AWS Console oder Terraform:
AWS Console
- Rufen Sie die AWS IAM-Konsole auf. Achten Sie darauf, dass Sie sich in dem Konto befinden, zu dem der Amazon S3-Bucket gehört, auf den Sie zugreifen möchten.
- Wählen Sie Rollen > Rolle erstellen aus.
- Wählen Sie unter Typ der vertrauenswürdigen Entität auswählen die Option Web Identity aus.
- Wählen Sie für Identity Provider die Option Google aus.
- Geben Sie für Zielgruppe
00000
als Platzhalterwert ein. Sie ersetzen den Wert später. - Klicken Sie auf Next: Permissions.
- Um der Rolle Zugriff auf Ihre Amazon S3-Daten zu gewähren, hängen Sie eine IAM-Richtlinie an die Rolle an. Suchen Sie nach der Richtlinie, die Sie im vorherigen Abschnitt erstellt haben, und klicken Sie auf die Umschaltfläche.
- Klicken Sie auf Weiter: Tags.
- Klicken Sie auf Weiter: Überprüfen. Geben Sie einen Namen für die Rolle ein, z. B.
BQ_Read_Only
. - Klicken Sie auf Rolle erstellen.
Terraform
Fügen Sie Ihre Terraform-Konfiguration unten hinzu, um eine IAM-Rolle zu erstellen und die Richtlinie der erstellten Rolle zuzuweisen:
resource "aws_iam_role" "bigquery-omni-connection-role" { name = "bigquery-omni-connection" max_session_duration = 43200 assume_role_policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "00000" } } } ] } EOF } resource "aws_iam_role_policy_attachment" "bigquery-omni-connection-role-attach" { role = aws_iam_role.bigquery-omni-connection-role.name policy_arn = aws_iam_policy.bigquery-omni-connection-policy.arn } output "bigquery_omni_role" { value = aws_iam_role.bigquery-omni-connection-role.arn }
Verbindungen erstellen
Verwenden Sie die Google Cloud Console, das bq-Befehlszeilentool oder die Clientbibliothek, um eine Verbindung zu Ihrem Amazon S3-Bucket herzustellen:
Console
Rufen Sie die Seite BigQuery auf.
Wählen Sie im Menü Daten hinzufügen
die Option Externe Datenquelle aus.Geben Sie im Bereich Externe Datenquelle die folgenden Informationen ein:
- Wählen Sie als Verbindungstyp die Option BigLake in Azure (über BigQuery Omni) aus.
- Geben Sie unter Verbindungs-ID eine Kennung für die Verbindungsressource ein. Sie können Buchstaben, Ziffern, Bindestriche und Unterstriche verwenden.
- Wählen Sie den Standort aus, an dem Sie die Verbindung herstellen möchten.
- Optional: Sie können unter Anzeigename einen nutzerfreundlichen Namen für die Verbindung eingeben, z. B.
My connection resource
. Der Anzeigename kann ein beliebiger Wert sein, mit dem sich die Verbindungsressource ermitteln lässt, wenn Sie sie später ändern müssen. - Optional: Sie können unter Beschreibung eine Beschreibung für diese Verbindungsressource eingeben.
- Geben Sie unter AWS-Rollen-ID die vollständige ID der IAM-Rolle ein, die Sie im folgenden Format erstellt haben:
arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME
.
Klicken Sie auf Verbindung erstellen.
Klicken Sie auf Zur Verbindung.
Kopieren Sie im Bereich Verbindungsinformationen die Google-Identität in BigQuery. Dies ist ein Google-Hauptkonto, das für jede Verbindung spezifisch ist. Beispiel:
BigQuery Google identity: 000000000000000000000
Terraform
resource "google_bigquery_connection" "connection" { connection_id = "bigquery-omni-aws-connection" friendly_name = "bigquery-omni-aws-connection" description = "Created by Terraform" location = "AWS_LOCATION" aws { access_role { # This must be constructed as a string instead of referencing the AWS resources # directly to avoid a resource dependency cycle in Terraform. iam_role_id = "arn:aws:iam::AWS_ACCOUNT:role/IAM_ROLE_NAME" } } }
Ersetzen Sie Folgendes:
AWS_LOCATION
: ein Amazon S3-Standort in Google CloudAWS_ACCOUNT
: Ihre AWS-Konto-ID.IAM_ROLE_NAME
: Die Rolle, die den Zugriff auf den Amazon S3-Bucket aus BigQuery ermöglicht. Verwenden Sie den Wert desname
-Arguments aus deraws_iam_role
-Ressource in AWS-IAM-Rolle für BigQuery erstellen.
bq
bq mk --connection --connection_type='AWS' \ --iam_role_id=arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME \ --location=AWS_LOCATION \ CONNECTION_ID
Ersetzen Sie Folgendes:
AWS_ACCOUNT_ID
: die ID-Nummer des AWS IAM-Nutzers der Verbindung.ROLE_NAME
: der Name der Rollenrichtlinie, die Sie auswählen.AWS_LOCATION
: ein Amazon S3-Standort in Google CloudCONNECTION_ID
: die ID, die Sie dieser Verbindungsressource zuweisen.
Die Befehlszeile zeigt die folgende Ausgabe an:
Identity: IDENTITY_ID
Die Ausgabe enthält Folgendes:
IDENTITY_ID
: Ein Google-Hauptkonto, das von Google Cloud gesteuert wird und für jede Verbindung spezifisch ist.
Notieren Sie sich den Wert von IDENTITY_ID
.
Java
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Vertrauensstellung zur AWS-Rolle hinzufügen
BigQuery Omni bietet zwei Methoden für den sicheren Zugriff auf Daten aus Amazon S3. Sie können entweder dem Google Cloud-Dienstkonto Zugriff auf Ihre AWS-Rolle gewähren oder Sie müssen dem Anbieter das Google Cloud-Dienstkonto als Zielgruppe hinzufügen, wenn Ihr AWS-Konto über einen Benutzerdefinierten Identitätsanbieter für accounts.google.com verfügt:
- Fügen Sie die Vertrauensrichtlinie in die AWS-Rolle ein.
- Benutzerdefinierten AWS-Identitätsanbieter konfigurieren.
Vertrauensrichtlinie zur AWS-Rolle hinzufügen
Die Vertrauensstellung ermöglicht es der Verbindung, die Rolle zu übernehmen und auf die Amazon S3-Daten zuzugreifen, wie in der Rollenrichtlinie angegeben.
Verwenden Sie die AWS Console oder Terraform, um eine Vertrauensstellung hinzuzufügen:
AWS Console
- Rufen Sie die AWS IAM-Konsole auf. Achten Sie darauf, dass Sie sich in dem Konto befinden, zu dem der Amazon S3-Bucket gehört, auf den Sie zugreifen möchten.
- Wählen Sie Rollen aus.
- Wählen Sie den von Ihnen erstellten
ROLE_NAME
aus. Klicken Sie auf Bearbeiten und gehen Sie dann so vor:
Legen Sie Maximale Sitzungsdauer auf 12 Stunden fest. Da jede Abfrage bis zu sechs Stunden ausgeführt werden kann, ist diese Dauer ein weiterer Versuch möglich. Wenn Sie die Sitzungsdauer auf mehr als 12 Stunden erhöhen, können keine weiteren Wiederholungen ausgeführt werden. Weitere Informationen finden Sie unter Zeitlimit für die Ausführung von Abfragen/Multi-Anweisungen.
Klicken Sie auf Änderungen speichern.
Wählen Sie Vertrauensstellungen aus und klicken Sie auf Vertrauensstellung bearbeiten. Ersetzen Sie den Richtlinieninhalt durch Folgendes:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "IDENTITY_ID" } } } ] }
Ersetzen Sie
IDENTITY_ID
durch den BigQuery-Google-Identitätswert, den Sie auf der AWS-Konsolenseite für die erstellte Verbindung finden.Klicken Sie auf Vertrauensrichtlinie aktualisieren.
Terraform
Aktualisieren Sie die aws_iam_role
-Ressource in der Terraform-Konfiguration, um eine Vertrauensstellung hinzuzufügen:
resource "aws_iam_role" "bigquery-omni-connection-role" { name = "bigquery-omni-connection" max_session_duration = 43200 assume_role_policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "${google_bigquery_connection.connection.aws[0].access_role[0].identity}" } } } ] } EOF }
Der Debugger ist jetzt einsatzbereit.
Benutzerdefinierten AWS-Identitätsanbieter konfigurieren
Wenn Ihr AWS-Konto über einen benutzerdefinierten Identitätsanbieter für accounts.google.com verfügt, müssen Sie die folgende IDENTITY_ID als Zielgruppe für den Anbieter hinzufügen. Dazu können Sie so vorgehen:
Rufen Sie in der AWS Console die Seite IAM auf.
Rufen Sie IAM > Identitätsanbieter auf.
Wählen Sie den Identitätsanbieter für accounts.google.com aus.
Klicken Sie auf Zielgruppe hinzufügen und fügen Sie IDENTITY_ID als Zielgruppe hinzu.
Der Debugger ist jetzt einsatzbereit.
Verbindungen für Nutzer freigeben
Sie können die folgenden Rollen zuweisen, damit Nutzer Daten abfragen und Verbindungen verwalten können:
roles/bigquery.connectionUser
: Nutzer können Verbindungen nutzen, um sich mit externen Datenquellen zu verbinden und diese abzufragen.roles/bigquery.connectionAdmin
: Nutzer können Verbindungen verwalten.
Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.
Wählen Sie eine der folgenden Optionen aus:
Console
Rufen Sie die Seite BigQuery auf.
Verbindungen werden in Ihrem Projekt in einer Gruppe namens Externe Verbindungen aufgeführt.
Klicken Sie im Bereich Explorer auf Ihren Projektnamen > Externe Verbindungen > Verbindung.
Klicken Sie im Bereich Details auf Freigeben, um eine Verbindung freizugeben. Führen Sie anschließend folgende Schritte aus:
Geben Sie im Dialogfeld Verbindungsberechtigungen die Verbindung für andere Hauptkonten frei, indem Sie Hauptkonten hinzufügen oder bearbeiten.
Klicken Sie auf Speichern.
bq
Sie können keine Verbindung mit dem bq-Befehlszeilentool freigeben. Verwenden Sie zum Freigeben einer Verbindung die Google Cloud Console oder die Methode der BigQuery Connections API.
API
Verwenden Sie die Methode projects.locations.connections.setIAM
in dem Referenzabschnitt zur BigQuery Connections REST API und geben Sie eine Instanz der Ressource policy
an.
Java
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Nächste Schritte
- Weitere Informationen zu verschiedenen Verbindungstypen
- Verbindungen verwalten
- Weitere Informationen zu BigQuery Omni
- Verwenden Sie das Lab BigQuery Omni mit AWS-Lab.
- Informationen zu BigLake-Tabellen.
- Amazon S3-Daten abfragen
- Abfrageergebnisse in einen Amazon S3-Bucket exportieren