Mit Blob-Speicher verbinden
Als BigQuery-Administrator können Sie eine Verbindung erstellen, damit Datenanalysten auf Daten zugreifen können, die in Azure Blob Storage gespeichert sind.
BigQuery Omni greift über Verbindungen auf Blob Storage-Daten zu. BigQuery Omni unterstützt die Azure-Workload Identity-Föderation. Da BigQuery Omni die Azure-Workload Identity-Föderation unterstützt, können Sie einem Google-Dienstkonto Zugriff auf eine Azure-Anwendung in Ihrem Mandanten gewähren. Es gibt keine Clientschlüssel für Anwendungen, die von Ihnen oder Google verwaltet werden müssen.
Nachdem Sie eine BigQuery-Verbindung erstellt haben, können Sie entweder die Azure Blob Storage-Daten abfragen oder Abfrageergebnisse in Blob Storage exportieren.
Hinweis
Es müssen die folgenden Ressourcen erstellt sein:
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 Azure-Mandant mit einem Azure-Abo.
Ein Azure Storage-Konto, das die folgenden Spezifikationen erfüllt:
Es ist ein allgemeines V2-Konto oder ein Blob-Speicherkonto.
Sie verwendet einen hierarchischen Namespace. Weitere Informationen finden Sie unter Speicherkonto für die Verwendung mit Azure Data Lake Storage Gen2 erstellen.
Die Daten werden in einem der unterstützten Formate ausgefüllt.
Die Daten befinden sich in der Region
azure-eastus2
.
Erforderliche Rollen
-
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle BigQuery-Verbindungsadministrator (
roles/bigquery.connectionAdmin
) für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen einer Verbindung für den Zugriff auf Azure Blob Storage-Daten benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
-
Prüfen Sie, ob Sie die folgenden Azure IAM-Berechtigungen für Ihren Mandanten haben:
Application.ReadWrite.All
AppRoleAssignment.ReadWrite.All
Kontingente
Weitere Informationen zu Kontingenten finden Sie unter BigQuery Connection API.
Azure-Verbindung erstellen
So erstellen Sie eine Azure-Verbindung:
- Anwendung in Ihrem Azure-Mandanten erstellen
- BigQuery-Azure-Verbindung erstellen
- Föderierte Anmeldedaten hinzufügen
- BigQuery Azure AD-Anwendungen eine Rolle zuweisen
Weitere Informationen zum Verwenden von Anmeldedaten für föderierte Identitäten für den Zugriff auf Daten in Azure finden Sie unter Workload Identity-Föderation.
Anwendung in Ihrem Azure-Mandanten erstellen
So erstellen Sie eine Anwendung in Ihrem Azure-Mandanten:
Azure Portal
Gehen Sie im Azure-Portal zu App-Registrierungen und klicken Sie dann auf Neue Registrierung.
Geben Sie unter Namen einen Namen für die Anwendung ein.
Wählen Sie für Unterstützte Kontotypen die Option Nur Konten in diesem Organisationsverzeichnis aus.
Klicken Sie auf Registrieren, um die neue Anwendung zu registrieren.
Notieren Sie sich die Anwendungs-ID (Client). Sie müssen diese ID angeben, wenn Sie die Verbindung erstellen.
Terraform
Fügen Sie Ihrer Terraform-Konfigurationsdatei Folgendes hinzu:
resource "azuread_application" "example" { display_name = "bigquery-omni-connector" } resource "azuread_service_principal" "example" { application_id = azuread_application.example.application_id app_role_assignment_required = false }
Weitere Informationen zum Registrieren einer Anwendung in Azure
Verbindung herstellen
Console
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
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 die Verbindungsressource eingeben.
- Geben Sie unter Azure-Mandanten-ID die Azure-Mandanten-ID ein, die auch als Verzeichnis-ID (Mandanten) bezeichnet wird.
Klicken Sie auf das Kästchen Föderierte Identität verwenden und geben Sie dann die ID der föderierten Azure-Anwendung (Client) ein.
Informationen zum Abrufen von Azure-IDs finden Sie unter Anwendung in Ihrem Azure-Mandanten erstellen.
Klicken Sie auf Verbindung erstellen.
Klicken Sie auf Zur Verbindung.
Notieren Sie sich im Abschnitt Verbindungsinformationen den Wert von BigQuery-Google-Identität, die die Dienstkonto-ID ist. Diese ID gilt für das Google Cloud-Dienstkonto, das Sie für den Zugriff auf Ihre Anwendung autorisieren.
Terraform
resource "google_bigquery_connection" "connection" { connection_id = "omni-azure-connection" location = "azure-eastus2" description = "created by terraform" azure { customer_tenant_id = "TENANT_ID" federated_application_client_id = azuread_application.example.application_id } }
Ersetzen Sie TENANT_ID
durch die Mandanten-ID des Azure-Verzeichnisses, das das Blob-Speicherkonto enthält.
bq
Führen Sie den Befehl bq mk
aus. Verwenden Sie den Parameter --format=json
, um die Ausgabe im JSON-Format abzurufen.
bq mk --connection --connection_type='Azure' \ --tenant_id=TENANT_ID \ --location=AZURE_LOCATION \ --federated_azure=true \ --federated_app_client_id=APP_ID \ CONNECTION_ID
Dabei gilt:
TENANT_ID
: die Mandanten-ID des Azure-Verzeichnisses, das das Azure Storage-Konto enthält.AZURE_LOCATION
: die Azure-Region, in der sich Ihre Azure Storage-Daten befinden. BigQuery Omni unterstützt die Regionazure-eastus2
.APP_ID
: die ID der Azure-Anwendung (Client) Informationen zum Abrufen dieser ID finden Sie unter Anwendung im Azure-Mandanten erstellen.CONNECTION_ID
: der Name der Verbindung.
Die Ausgabe sieht etwa so aus:
Connection CONNECTION_ID successfully created Please add the following identity to your Azure application APP_ID Identity: SUBJECT_ID
Diese Ausgabe enthält die folgenden Werte:
APP_ID
: die ID der von Ihnen erstellten Anwendung.SUBJECT_ID
: die ID des Google Cloud-Dienstkontos, das der Nutzer für den Zugriff auf seine Anwendung autorisiert. Sie benötigen diesen Wert, wenn Sie föderierte Anmeldedaten in Azure erstellen.
Notieren Sie sich die Werte APP_ID
und SUBJECT_ID
für die nächsten Schritte.
Fügen Sie als Nächstes föderierte Anmeldedaten für Ihre Anwendung hinzu.
Föderierte Anmeldedaten hinzufügen
So erstellen Sie föderierte Anmeldedaten:
Azure Portal
Gehen Sie im Azure-Portal zu App-Registrierungen und klicken Sie dann auf Ihre Anwendung.
Wählen Sie Zertifikate & Secrets > Föderierte Anmeldedaten > Anmeldedaten hinzufügen aus. Gehen Sie anschließend so vor:
Wählen Sie in der Liste Szenario der föderierten Anmeldedaten die Option Anderer Aussteller aus.
Geben Sie als Aussteller
https://accounts.google.com
ein.Geben Sie als Themenkennung die BigQuery-Google-Identität des Google Cloud-Dienstkontos ein, das Sie beim Erstellen der BigQuery-Azure-Verbindung erhalten haben.
Geben Sie unter Name einen Namen für die Anmeldedaten ein.
Klicken Sie auf Hinzufügen.
Terraform
Fügen Sie Ihrer Terraform-Konfigurationsdatei Folgendes hinzu:
resource "azuread_application" "example" { display_name = "bigquery-omni-connector" } resource "azuread_service_principal" "example" { application_id = azuread_application.example.application_id app_role_assignment_required = false } resource "azuread_application_federated_identity_credential" "example" { application_object_id = azuread_application.example.object_id display_name = "omni-federated-credential" description = "BigQuery Omni federated credential" audiences = ["api://AzureADTokenExchange"] issuer = "https://accounts.google.com" subject = google_bigquery_connection.connection.azure[0].identity }
Weitere Informationen finden Sie unter Anwendung für die Vertrauensstellung eines externen Identitätsanbieters konfigurieren.
Azure-Anwendungen eine Rolle in BigQuery zuweisen
Um der Azure-Anwendung von BigQuery eine Rolle zuzuweisen, verwenden Sie das Azure-Portal, Azure PowerShell oder die Microsoft Management REST API:
Azure Portal
Sie können Rollenzuweisungen im Azure-Portal ausführen. Melden Sie sich als Nutzer mit der Berechtigung Microsoft.Authorization/roleAssignments/write
an. Mit der Rollenzuweisung kann die BigQuery-Azure-Verbindung auf die Azure Storage-Daten zugreifen, wie in der Rollenrichtlinie angegeben.
So fügen Sie Rollenzuweisungen mithilfe des Azure-Portals hinzu:
Geben Sie in Ihrem Azure Storage-Konto
IAM
in die Suchleiste ein.Klicken Sie auf Zugriffssteuerung (IAM).
Klicken Sie auf Hinzufügen und wählen Sie Rollenzuweisungen hinzufügen aus.
Wählen Sie die Rolle Storage Blob Data-Leser aus, um schreibgeschützten Zugriff zu gewähren. Wählen Sie für die Bereitstellung des Lese-/Schreibzugriffs die Rolle Storage Blob-Daten-Mitwirkender aus.
Setzen Sie Zugriff gewähren auf auf Nutzer, Gruppe oder Diensthauptkonto.
Klicken Sie auf Mitglieder auswählen.
Geben Sie im Feld Auswählen den Namen der Azure-Anwendung ein, den Sie beim Erstellen der Anwendung im Azure-Mandanten angegeben haben.
Klicken Sie auf Speichern.
Weitere Informationen finden Sie unter Azure-Rollen mit dem Azure-Portal zuweisen.
Terraform
Fügen Sie Ihrer Terraform-Konfigurationsdatei Folgendes hinzu:
resource "azurerm_role_assignment" "data-role" { scope = data.azurerm_storage_account.example.id # Read permission for Omni on the storage account role_definition_name = "Storage Blob Data Reader" principal_id = azuread_service_principal.example.id }
Azure PowerShell
Eine Rollenzuweisung für ein Diensthauptkonto auf Ressourcenebene können Sie mit dem Befehl New-AzRoleAssignment
hinzufügen:
New-AzRoleAssignment` -SignInName APP_NAME` -RoleDefinitionName ROLE_NAME` -ResourceName RESOURCE_NAME` -ResourceType RESOURCE_TYPE` -ParentResource PARENT_RESOURCE` -ResourceGroupName RESOURCE_GROUP_NAME
Dabei gilt:
APP_NAME
: der Name der Anwendung.ROLE_NAME
: der Rollenname, den Sie zuweisen möchten.RESOURCE_NAME
: der Ressourcenname.RESOURCE_TYPE
: der Ressourcentyp.PARENT_RESOURCE
: die übergeordnete Ressource.RESOURCE_GROUP_NAME
: der Name der Ressourcengruppe.
Weitere Informationen zum Hinzufügen eines neuen Diensthauptkontos mit Azure PowerShell finden Sie unter Azure-Rollen mit Azure PowerShell zuweisen.
Azure-Befehlszeile
Um eine Rollenzuweisung für ein Diensthauptkonto auf Ressourcenebene hinzuzufügen, können Sie das Azure-Befehlszeilentool verwenden. Sie benötigen die Berechtigung Microsoft.Authorization/roleAssignments/write
für das Speicherkonto, um Rollen zuweisen zu können.
Führen Sie den Befehl az role assignment create
aus, um dem Diensthauptkonto eine Rolle zuzuweisen, z. B. die Rolle Storage Blob Data Reader:
az role assignment create --role "Storage Blob Data Reader" \ --assignee-object-id ${SP_ID} \ --assignee-principal-type ServicePrincipal \ --scope subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME
Ersetzen Sie Folgendes:
SP_ID
: die Diensthauptkonto-ID. Dieses Diensthauptkonto bezieht sich auf die von Ihnen erstellte Anwendung. Informationen zum Diensthauptkonto für eine föderierte Verbindung finden Sie unter Diensthauptkontoobjekt.STORAGE_ACCOUNT_NAME
: der Name des SpeicherkontosRESOURCE_GROUP_NAME
: der Name der Ressourcengruppe.SUBSCRIPTION_ID
: die Abo-ID
Weitere Informationen finden Sie unter Azure-Rollen mithilfe der Azure-Befehlszeile zuweisen.
Microsoft REST API
Zum Hinzufügen von Rollenzuweisungen für ein Diensthauptkonto können Sie eine HTTP-Anfrage an Microsoft Management senden.
Zum Aufrufen der Microsoft Graph REST API rufen Sie ein OAuth-Token für eine Anwendung ab. Weitere Informationen finden Sie unter Zugriff ohne Nutzer erhalten.
Die Anwendung, die die Microsoft Graph REST API aufgerufen hat, muss die Anwendungsberechtigung Application.ReadWrite.All
haben.
Führen Sie den folgenden Befehl aus, um ein OAuth-Token zu generieren:
export TOKEN=$(curl -X POST \ https://login.microsoftonline.com/TENANT_ID/oauth2/token \ -H 'cache-control: no-cache' \ -H 'content-type: application/x-www-form-urlencoded' \ --data-urlencode "grant_type=client_credentials" \ --data-urlencode "resource=https://graph.microsoft.com/" \ --data-urlencode "client_id=CLIENT_ID" \ --data-urlencode "client_secret=CLIENT_SECRET" \ | jq --raw-output '.access_token')
Dabei gilt:
TENANT_ID
: die Mandanten-ID, die der ID des Azure-Verzeichnisses entspricht, das das Azure Storage-Konto enthält.CLIENT_ID
: die Azure-Client-ID.CLIENT_SECRET
: der Azure-Clientschlüssel.
Rufen Sie die ID der integrierten Azure-Rollen ab, die Sie dem Diensthauptkonto zuweisen möchten.
Hier einige gängige Rollen:
- Storage Blob-Daten-Mitwirkender:
ba92f5b4-2d11-453d-a403-e96b0029c9fe
- Storage Blob Data-Leser:
2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
Rufen Sie die Microsoft Graph REST API bei der Azure Resource Management REST API auf, um dem Dienstprinzip eine Rolle zuzuweisen:
export ROLE_ASSIGNMENT_ID=$(uuidgen) curl -X PUT \ 'https://management.azure.com/subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME/providers/Microsoft.Authorization/roleAssignments/ROLE_ASSIGNMENT_ID?api-version=2018-01-01-preview' \ -H "authorization: Bearer ${TOKEN?}" \ -H 'cache-control: no-cache' \ -H 'content-type: application/json' \ -d '{ "properties": { "roleDefinitionId": "subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME/providers/Microsoft.Authorization/roleDefinitions/ROLE_ID", "principalId": "SP_ID" } }'
Dabei gilt:
ROLE_ASSIGNMENT_ID
: die Rollen-ID.SP_ID
: die Diensthauptkonto-ID. Dieses Diensthauptkonto bezieht sich auf die von Ihnen erstellte Anwendung. Informationen zum Diensthauptkonto für eine föderierte Verbindung finden Sie unter Diensthauptkontoobjekt.SUBSCRIPTION_ID
: die Abo-IDRESOURCE_GROUP_NAME
: der Name der Ressourcengruppe.STORAGE_ACCOUNT_NAME
: der Name des SpeicherkontosSUBSCRIPTION_ID
: die Abo-ID
Der Debugger ist jetzt einsatzbereit. Bei einer Rollenzuweisung in Azure kann es jedoch zu einer Übertragungsverzögerung kommen. Wenn Sie die Verbindung aufgrund von Berechtigungsproblemen nicht verwenden können, versuchen Sie es nach einiger Zeit noch einmal.
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
- Informationen zu BigLake-Tabellen.
- Informationen zu Blob Storage-Daten abfragen.
- Informationen zu Abfrageergebnisse nach Blob Storage exportieren