Blog

So konfigurieren Sie den Google BigQuery (Microsoft Entra ID) Power BI Connector mit Terraform

Laurens Knoll

Aktualisiert Oktober 14, 2025
3 Minuten

Der Google BigQuery (Microsoft Entra ID) Connector ermöglicht Ihnen die Abfrage von BigQuery-Daten mit Power BI unter Verwendung Ihrer Microsoft-Anmeldeinformationen. Der Konnektor stützt sich auf die Google Workforce Identity Federation, um Ihre Microsoft-Anmeldeinformationen in eine Google-Anmeldeinformation umzuwandeln.

Dieser Blog zeigt, wie Sie den Connector mit Terraform einrichten. Er ergänzt damit die konsolenbasierte Anleitung zur Einrichtung.

Finden Sie das vollständige Beispiel auf GitHub

Abfrage von BigQuery mit Power BI

Ihr Nutzer meldet sich bei Power BI an und öffnet einen Bericht mit einem BigQuery-basierten Modell. Power BI tauscht automatisch die Microsoft-Anmeldeinformationen Ihres Nutzers gegen eine Google Cloud-Anmeldeinformation aus. Schließlich fragt Power BI das Modell ab und Ihr Nutzer sieht die Daten.

Power BI weiß, wie das geht, denn das semantische Modell ist mit dem Pool-Anbieter Google Workforce Identity Federation, dem Googla-Quota-Projekt und dem BigQuery-Datensatz verbunden.

Schaffen Sie die unterstützende Infrastruktur

Zunächst wird der Workforce Identity Pool mit Ihrem Microsoft Entra ID-Tenant verknüpft.

resource "google_iam_workforce_pool" "example_power_bi" {
  parent            = var.organization_id
  location          = "global"
  workforce_pool_id = "example-pbi"
}

resource "google_iam_workforce_pool_provider" "example_power_bi" {
  workforce_pool_id = google_iam_workforce_pool.example_power_bi.workforce_pool_id
  location          = "global"
  provider_id       = "aad"

  attribute_mapping = {
    "google.subject"      = "assertion.sub"    # Use 'sub' to bind to id composed of application and directory
    "google.groups"       = "assertion.groups" # Store 'groups' for groups IAM expressions
  }

  oidc {
    issuer_uri = "https://sts.windows.net/${var.tenant_id}/"
    client_id  = "https://analysis.windows.net/powerbi/connector/GoogleBigQuery"
    web_sso_config {
      response_type             = "ID_TOKEN"
      assertion_claims_behavior = "ONLY_ID_TOKEN_CLAIMS"
    }
  }

  extra_attributes_oauth2_client {
    issuer_uri = "https://login.microsoftonline.com/${var.tenant_id}/v2.0/"
    client_id  = azuread_application.power_bi_connector_bigquery_aad.client_id
    client_secret {
      value {
        plain_text = azuread_application_password.power_bi_connector_bigquery_aad.value
      }
    }
    attributes_type = "AZURE_AD_GROUPS_MAIL"
  }
}

Zweitens wird eine Entra ID-Anwendung registriert, die es Google Cloud ermöglicht, (E-Mail-aktivierte Sicherheits-) Gruppenmitgliedschaften zu lesen.

resource "azuread_application" "power_bi_connector_bigquery_aad" {
  display_name     = "PowerBI BigQuery SSO connector"
  owners           = [data.azuread_client_config.current.object_id]

  lifecycle {
    ignore_changes = [
      password,                 # managed using azuread_application_password.power_bi_connector_bigquery_aad
      required_resource_access, # managed using azuread_application_api_access.power_bi_connector_bigquery_aad
    ]
  }
}

resource "azuread_service_principal" "power_bi_connector_bigquery_aad" {
  client_id                    = azuread_application.power_bi_connector_bigquery_aad.client_id
  app_role_assignment_required = false
  owners                       = [data.azuread_client_config.current.object_id]
}

resource "azuread_app_role_assignment" "power_bi_connector_bigquery_aad" {
  for_each = toset(["GroupMember.Read.All","User.ReadBasic.All"])

  principal_object_id = azuread_service_principal.power_bi_connector_bigquery_aad.object_id
  resource_object_id  = data.azuread_service_principal.msgraph.object_id
  app_role_id         = data.azuread_service_principal.msgraph.app_role_ids[each.key]
}

Schließlich erhalten die Verbundanmeldeinformationen die Berechtigung, Abfragen durchzuführen.

resource "google_project_iam_member" "example_power_bi_serviceusage_serviceusageconsumer" {
  project = var.project_id
  role    = "roles/serviceusage.serviceUsageConsumer"
  member  = "principalSet://iam.googleapis.com/${google_iam_workforce_pool.example_power_bi.name}/*"
}

resource "google_project_iam_member" "example_power_bi_bigquery_jobuser" {
  project = var.project_id
  role    = "roles/bigquery.jobUser"
  member  = "principalSet://iam.googleapis.com/${google_iam_workforce_pool.example_power_bi.name}/*"
}
Stellen Sie sicher, dass die erforderlichen APIs für die Ausführung von BigQuery-Abfragen aktiviert sind.
resource "google_project_service" "power_bi_connector_bigquery_aad" {
  for_each = toset(["bigquery.googleapis.com","cloudresourcemanager.googleapis.com","bigquerystorage.googleapis.com"])

  project = var.project_id
  service = each.key
}

Konfigurieren Sie das semantische Modell

Fazit

Bild von Peter H von Pixabay

Verfasst von

Laurens Knoll

As a cloud consultant I enjoy improving what your company does best. I enable your business using cloud technology and enable your engineers by applying software engineering practices to your infrastructure domain.

Contact

Let’s discuss how we can support your journey.