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. Es gibt zwei Methoden für den sicheren Zugriff auf Daten aus Blob Storage. Sie können die Identitätsföderation verwenden, indem Sie einem Google Cloud-Dienstkonto Zugriff auf Ihre Azure-Anwendung gewähren oder direkt auf Ihre Azure Active Directory-Anwendung (AD) in Ihrem Mandanten Zugriff gewähren:

  • Föderierte Azure-Identität verwenden. Dies ist der empfohlene Ansatz. 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 die Azure-Anwendung innerhalb Ihres Mandanten gewähren. Der föderierte Identitätszugriff ist sicherer als der nicht föderierte Zugriff, da der Anwendungsclient in Ihrem Azure-Mandanten vorhanden ist. Die Secrets des Anwendungsclients werden nicht von Ihnen oder von Google verwaltet.

    Mit der Identitätsföderation haben Sie mehr Kontrolle über die Anwendung, da Ihre Anwendung, der Sie Zugriff auf Ihre Daten gewährt haben, in Ihrem Mandanten vorhanden ist.

  • Verwenden Sie eine nicht föderierte Identität. Die Servicemitteilung (MSA), die Kunden über die Einstellung der Verwendung einer nicht föderierten Identität für den Zugriff auf Ihre Azure-Anwendung informiert, wurde am 20. Juni 2023 an die betroffenen Partner und Kunden gesendet, um sie vor dem Inkrafttreten der Änderungen am 8. Januar 2024 zu informieren. Erwägen Sie stattdessen, eine föderierte Azure-Identität zu verwenden. Jede nicht föderierte Verbindung hat eine eigene eindeutige Azure AD-Anwendung (Azure Active Directory). Berechtigungen werden den Anwendungen über IAM-Rollen (Identity and Access Management) in Azure gewährt. Die erteilten Azure IAM-Rollen bestimmen, auf welche Daten BigQuery bei einer Verbindung zugreifen kann.

Nachdem Sie eine BigQuery-Verbindung erstellt haben, können Sie entweder die Azure Blob Storage-Daten abfragen oder Abfrageergebnisse in Blob Storage exportieren.

Hinweis

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

Föderierte Azure-Identität verwenden

So greifen Sie auf Daten mit einer föderierten Identität zu:

  1. Anwendung in Ihrem Azure-Mandanten erstellen
  2. BigQuery-Azure-Verbindung erstellen
  3. Föderierte Anmeldedaten hinzufügen
  4. 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

  1. Gehen Sie im Azure-Portal zu App-Registrierungen und klicken Sie dann auf Neue Registrierung.

  2. Geben Sie unter Namen einen Namen für die Anwendung ein.

  3. Wählen Sie für Unterstützte Kontotypen die Option Nur Konten in diesem Organisationsverzeichnis aus.

  4. Klicken Sie auf Registrieren, um die neue Anwendung zu registrieren.

  5. Notieren Sie sich die Anwendungs-ID (Client). Sie müssen diese ID angeben, wenn Sie die Verbindung erstellen.

    Screenshot: Azure-Portal zum Erstellen von Anwendungen

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

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Wählen Sie im Menü Daten hinzufügen die Option Externe Datenquelle aus.

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

  4. Klicken Sie auf Verbindung erstellen.

  5. Klicken Sie auf Zur Verbindung.

  6. 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 Region azure-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

  1. Gehen Sie im Azure-Portal zu App-Registrierungen und klicken Sie dann auf Ihre Anwendung.

  2. Wählen Sie Zertifikate & Secrets > Föderierte Anmeldedaten > Anmeldedaten hinzufügen aus. Gehen Sie anschließend so vor:

    1. Wählen Sie in der Liste Szenario der föderierten Anmeldedaten die Option Anderer Aussteller aus.

    2. Geben Sie als Aussteller https://accounts.google.com ein.

    3. Geben Sie als Themenkennung die BigQuery-Google-Identität des Google Cloud-Dienstkontos ein, das Sie beim Erstellen der BigQuery-Azure-Verbindung erhalten haben.

    4. Geben Sie unter Name einen Namen für die Anmeldedaten ein.

    5. 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:

  1. Geben Sie in Ihrem Azure Storage-Konto IAM in die Suchleiste ein.

  2. Klicken Sie auf Zugriffssteuerung (IAM).

  3. Klicken Sie auf Hinzufügen und wählen Sie Rollenzuweisungen hinzufügen aus.

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

  5. Setzen Sie Zugriff gewähren auf auf Nutzer, Gruppe oder Diensthauptkonto.

  6. Klicken Sie auf Mitglieder auswählen.

  7. Geben Sie im Feld Auswählen den Namen der Azure-Anwendung ein, den Sie beim Erstellen der Anwendung im Azure-Mandanten angegeben haben.

  8. 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-contributor-role" {
    scope                = data.azurerm_storage_account.example.id
    # Read-write permission for Omni on the storage account
    role_definition_name = "Storage Blob Data Contributor"
    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-Daten-Mitwirkender”:

  az role assignment create --role "Storage Blob Data Contributor" \
    --assignee-object-id ${SP_ID} \
    --assignee-principal-type ServicePrincipal \
    --scope   subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME

Dabei gilt:

  • 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 Speicherkontos
  • RESOURCE_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:

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-ID
  • RESOURCE_GROUP_NAME: der Name der Ressourcengruppe.
  • STORAGE_ACCOUNT_NAME: der Name des Speicherkontos
  • SUBSCRIPTION_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.

Nicht föderierte Identität verwenden

So greifen Sie auf Daten mit einer nicht föderierten Identität zu:

  1. BigQuery-Azure-Verbindung erstellen
  2. Azure AD-Diensthauptkonto erstellen
  3. Azure AD-Anwendungen von BigQuery eine Rolle zuweisen

Weitere Informationen zur Verwendung der föderierten Identität für den Zugriff auf Daten in Azure finden Sie unter Azure AD-Anwendung.

Verbindung herstellen

Verwenden Sie die Google Cloud Console oder das bq-Befehlszeilentool, um eine Verbindung zu Blob Storage herzustellen:

Console

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Wählen Sie im Menü Daten hinzufügen die Option Externe Datenquelle aus.

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

  4. Klicken Sie auf Verbindung erstellen.

  5. Klicken Sie auf Zur Verbindung.

  6. Notieren Sie sich im Abschnitt Verbindungsinformationen die Werte für Azure-App-ID und Azure-App-Name. Diese Werte sind erforderlich, wenn Sie der Azure-Anwendung BigQuery eine Rolle zuweisen.

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 \
  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 Region azure-eastus2.
  • CONNECTION_ID: die ID der Verbindung.

Die Ausgabe sieht in etwa so aus:

  Please create a Service Principal in your directory for
  appId: APP_ID,
  and perform role assignment to
  app: APP_NAME
  to allow BigQuery to access your Azure data.

Diese Ausgabe enthält die folgenden Werte:

  • APP_ID: die ID der von Ihnen erstellten Anwendung.
  • APP_NAME: der Anwendungsname, dem Sie Rollen zuweisen müssen, damit BigQuery auf Ihre Azure-Daten zugreifen kann.

Notieren Sie sich die Werte APP_ID und APP_NAME für die nächsten Schritte.

Weitere Informationen finden Sie unter Verbindung herstellen.

Azure AD-Diensthauptkonto erstellen

Verwenden Sie zum Erstellen eines Azure AD-Diensthauptkontos die Google Cloud Console, Azure PowerShell, das Azure-Befehlszeilentool oder die Microsoft Graph REST API:

Console

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Klicken Sie im Bereich Explorer auf die von Ihnen hergestellte Verbindung.

  3. Klicken Sie im Bereich Verbindungsinformationen auf Im Azure-Konto anmelden.

  4. Melden Sie sich in Ihrem Azure-Konto an.

  5. Klicken Sie auf der Seite Angeforderte Berechtigungen auf Akzeptieren.

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
  }

Azure PowerShell

Zum Erstellen des Diensthauptkontos für die zuvor zurückgegebene Anwendungs-ID APP_ID muss der Nutzer die Berechtigung Microsoft.directory/servicePrincipals/create haben.

Führen Sie den Befehl New-AzADServicePrincipal aus, um das Diensthauptkonto zu erstellen.

New-AzADServicePrincipal`
-ApplicationId APP_ID`
-SkipAssignment

Ersetzen Sie APP_ID durch die Anwendungs-ID, die zuvor zurückgegeben wurde.

Azure-Befehlszeile

Um das Diensthauptkonto für die App-ID APP_ID zu erstellen, die zuvor zurückgegeben wurde, können Sie das Azure-Befehlszeilentool verwenden. Sie benötigen die Berechtigung Microsoft.directory/servicePrincipals/create, um ein Diensthauptkonto zu erstellen.

Führen Sie den Befehl az ad sp aus, um das Diensthauptkonto zu erstellen:

export SP_ID=$(az ad sp create --id APP_ID | jq --raw-output '.objectId')

Ersetzen Sie APP_ID durch die Anwendungs-ID, die zuvor zurückgegeben wurde.

Microsoft REST API

Zum Erstellen des Diensthauptkontos für die zuvor zurückgegebene App-ID APP_ID können Sie eine HTTP-Anfrage an die Microsoft Graph REST API 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 zum Aufrufen der Microsoft Graph REST API verwendet wird, sollte die Anwendungsberechtigung Application.ReadWrite.All haben.

Die TENANT_ID sollte der ID des Azure-Verzeichnisses entsprechen, das das Azure Storage-Konto enthält.

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 des Azure-Verzeichnisses, das das Azure Storage-Konto enthält.
  • CLIENT_ID: die Azure-Client-ID.
  • CLIENT_SECRET: der Azure-Clientschlüssel.

Führen Sie dazu diesen Befehl aus:

export APP_ID=APP_ID

Ersetzen Sie APP_ID durch die zurückgegebene App-ID.

Führen Sie den folgenden Befehl aus, um ein Diensthauptkonto durch Aufrufen der Microsoft Graph REST API zu erstellen:

export SP_ID=$(curl -X POST \
https://graph.microsoft.com/v1.0/serviceprincipals \
-H "authorization: Bearer ${TOKEN?}" \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d "{
  \"appId\": \"${APP_ID?}\"
}" | jq --raw-output '.id')

Dabei gilt:

  • TOKEN: das OAuth-Token für die Anwendung.
  • APP_ID: die zuvor zurückgegebene Anwendungs-ID.

Azure AD-Anwendungen von BigQuery eine Rolle zuweisen

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:

  1. Geben Sie in Ihrem Azure Storage-Konto IAM in die Suchleiste ein.

  2. Klicken Sie auf Zugriffssteuerung (IAM).

  3. Klicken Sie auf Hinzufügen und wählen Sie Rollenzuweisungen hinzufügen aus.

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

  5. Setzen Sie Zugriff gewähren auf auf Nutzer, Gruppe oder Diensthauptkonto.

  6. Klicken Sie auf Mitglieder auswählen.

  7. Geben Sie im Feld Auswählen den Namen der Azure-Anwendung ein, die beim Erstellen der BigQuery-Azure-Verbindung zurückgegeben wurde.

  8. 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-contributor-role" {
    scope                = data.azurerm_storage_account.example.id
    # Read-write permission for Omni on the storage account
    role_definition_name = "Storage Blob Data Contributor"
    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-Daten-Mitwirkender”:

  az role assignment create --role "Storage Blob Data Contributor" \
    --assignee-object-id ${SP_ID} \
    --assignee-principal-type ServicePrincipal \
    --scope   subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME

Dabei gilt:

  • SP_ID: die Diensthauptkonto-ID.
  • STORAGE_ACCOUNT_NAME: der Name des Speicherkontos
  • RESOURCE_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:

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.
  • SUBSCRIPTION_ID: die Abo-ID
  • RESOURCE_GROUP_NAME: der Name der Ressourcengruppe.
  • STORAGE_ACCOUNT_NAME: der Name des Speicherkontos
  • SUBSCRIPTION_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

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

    Verbindungen werden in Ihrem Projekt in einer Gruppe namens Externe Verbindungen aufgeführt.

  2. Klicken Sie im Bereich Explorer auf Ihren Projektnamen > Explorer > Verbindung.

  3. Klicken Sie im Bereich Details auf Freigeben, um eine Verbindung freizugeben. Führen Sie anschließend folgende Schritte aus:

    1. Geben Sie im Dialogfeld Verbindungsberechtigungen die Verbindung für andere Hauptkonten frei, indem Sie Hauptkonten hinzufügen oder bearbeiten.

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

import com.google.api.resourcenames.ResourceName;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import java.io.IOException;

// Sample to share connections
public class ShareConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    shareConnection(projectId, location, connectionId);
  }

  static void shareConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ResourceName resource = ConnectionName.of(projectId, location, connectionId);
      Binding binding =
          Binding.newBuilder()
              .addMembers("group:example-analyst-group@google.com")
              .setRole("roles/bigquery.connectionUser")
              .build();
      Policy policy = Policy.newBuilder().addBindings(binding).build();
      SetIamPolicyRequest request =
          SetIamPolicyRequest.newBuilder()
              .setResource(resource.toString())
              .setPolicy(policy)
              .build();
      client.setIamPolicy(request);
      System.out.println("Connection shared successfully");
    }
  }
}

Nächste Schritte