透過 Workforce Identity Federation 和 Microsoft Entra,在 Power BI 中存取 BigQuery 資料

本指南說明如何使用員工身分聯盟,讓 Microsoft Entra 群組中的使用者在 Power BI 中存取 BigQuery 資料。

Microsoft Entra 是身分識別提供者 (IdP)。Microsoft Entra 的群組權杖附加資訊會對應至 Google Cloud。系統會授予群組 Identity and Access Management (IAM) 權限,讓群組成員存取 BigQuery 資料。

本指南提供 Power BI Desktop 或 Web 的操作說明。

事前準備

  1. 請確認您已設定 Google Cloud 組織。
  2. 安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

    gcloud init

    如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

  3. 您必須具備 Microsoft Entra 和 Microsoft Graph 的存取權。
  4. 您必須設定 Power BI。

費用

員工身分聯盟是免付費功能。不過,員工身分聯盟詳細稽核記錄會使用 Cloud Logging。如要瞭解 Logging 定價,請參閱「Google Cloud Observability 定價」。

必要的角色

本節說明管理員和資源的必要角色。

管理員角色

如要取得設定員工身分聯盟所需的權限,請要求管理員授予您組織的 IAM 工作團隊集區管理員 (roles/iam.workforcePoolAdmin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

或者,IAM 擁有者 (roles/owner) 基本角色也包含設定身分識別聯盟的權限。您不應在正式環境中授予基本角色,但可以在開發或測試環境中授予。

聯合身分適用的角色

Power BI 會在權杖交換期間傳送 userProject 參數。因此,您必須請管理員在帳單專案中,將「服務使用情形用戶」(roles/serviceusage.serviceUsageConsumer) 角色授予同盟身分。

如要將角色授予一組同盟身分,請執行下列指令:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --role="roles/serviceusage.serviceUsageConsumer" \
    --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"

更改下列內容:

  • PROJECT_ID:帳單專案 ID。
  • WORKFORCE_POOL_ID:員工身分集區 ID。
  • GROUP_ID:群組 ID,例如 admin-group@altostrat.com。如要查看常見主體 ID 清單,請參閱「主體 ID」。

建立工作團隊身分集區

本節說明如何建立員工身分集區。您會在稍後的本指南中建立工作團隊身分集區提供者。

gcloud

如要建立員工身分集區,請執行下列指令:

gcloud iam workforce-pools create WORKFORCE_POOL_ID \
    --organization=ORGANIZATION_ID \
    --display-name="DISPLAY_NAME" \
    --description="DESCRIPTION" \
    --session-duration=SESSION_DURATION \
    --location=global

更改下列內容:

  • WORKFORCE_POOL_ID:您選擇代表 Google Cloud 工作團隊集區的 ID。集區 ID 在 Google Cloud的所有工作團隊身分集區中,不得重複。如要瞭解如何設定 ID 格式,請參閱 API 說明文件中的「查詢參數」一節。
  • ORGANIZATION_ID:您的 Google Cloud 員工身分集區的組織 ID。員工身分集區適用於機構中的所有專案和資料夾。
  • DISPLAY_NAME:選用。員工身分集區的顯示名稱。
  • DESCRIPTION:選用。員工身分集區 說明。
  • SESSION_DURATION:選用。工作階段持續時間,以附加 s 的數字表示,例如 3600s。工作階段時間決定了從這個工作團隊集區取得的 Google Cloud 存取權杖、控制台 (聯盟) 登入工作階段,以及 gcloud CLI 登入工作階段的有效時間。工作階段持續時間預設為一小時 (3600 秒)。工作階段持續時間值必須介於 15 分鐘 (900 秒) 和 12 小時 (43200 秒) 之間。

控制台

如要建立工作團隊身分集區,請執行下列操作:

  1. 前往 Google Cloud 控制台的「Workforce Identity Pools」(員工身分集區) 頁面:

    前往「Workforce Identity Pools」(員工身分集區) 頁面

  2. 選取員工身分集區的機構。工作人員身分識別集區適用於機構中的所有專案和資料夾。

  3. 點選「建立集區」,然後執行下列操作:

    1. 在「名稱」欄位中,輸入集區的顯示名稱。系統會在您輸入名稱時自動衍生集區 ID,並顯示在「名稱」欄位下方。如要更新集區 ID,請按一下集區 ID 旁的「編輯」。

    2. 選用:在「Description」(說明) 中,輸入集區的說明。

    3. 如要建立員工身分集區,請按「Next」(下一步)。

員工身分集區的工作階段持續時間預設為一小時 (3600 秒)。工作階段持續時間決定了這個工作團隊集區的 Google Cloud 存取權杖、控制台 (聯盟) 和 gcloud CLI 登入工作階段的有效時間。建立集區後,您可以更新集區,設定自訂工作階段持續時間。工作階段持續時間必須介於 15 分鐘 (900 秒) 至 12 小時 (43,200 秒) 之間。

註冊新的 Microsoft Entra 應用程式

本節說明如何使用 Microsoft Azure 入口網站建立 Microsoft Entra 應用程式。

  1. 註冊新的 Microsoft Entra 應用程式。

  2. 在您註冊的 Microsoft Entra 應用程式中,建立新的用戶端密鑰。記下用戶端密鑰。

  3. 將 API 權限授予 Microsoft Entra 應用程式,以便存取 Active Directory 中的使用者和群組資訊。如要授予 Microsoft Graph API 的權限,請按照下列步驟操作:

    1. 在應用程式中,選取「API Permissions」。
    2. 在「已設定的權限」中,按一下「新增權限」。
    3. 在「Request API permissions」對話方塊中,選取「Microsoft Graph」。
    4. 選取「應用程式權限」。
    5. 在「選取權限」對話方塊中,執行下列操作:
      1. 在搜尋欄位中輸入 User.ReadBasic.All。
      2. 按一下「User.ReadBasic.All」User.ReadBasic.All。
      3. 按一下「Add permissions」。
    6. 在「Request API permissions」對話方塊中,選取「Microsoft Graph」。
    7. 選取「應用程式權限」。
    8. 在「選取權限」對話方塊中,執行下列操作:
      1. 在搜尋欄位中輸入 GroupMember.Read.All。
      2. 按一下「GroupMember.Read.All」GroupMember.Read.All。
      3. 按一下「Add permissions」。
    9. 在「已設定的權限」中,按一下「授予 (網域名稱) 的系統管理員同意」。
    10. 系統要求確認時,請按一下「是」。
  4. 如要存取稍後在本指南中設定工作團隊集區供應商所需的值,請按照下列步驟操作:

    1. 前往 Microsoft Entra 應用程式的「總覽」頁面。
    2. 按一下 [端點]。
    3. 請記下下列值:

      • 用戶端 ID:您在本指南稍早註冊的 Microsoft Entra 應用程式 ID。
      • 用戶端密鑰:您在本指南稍早產生的用戶端密鑰。
      • 租戶 ID:您在本指南中稍早註冊的 Microsoft Entra 應用程式租戶 ID。
      • 核發者 URI:OpenID Connect 中繼資料文件的 URI,省略 /.well-known/openid-configuration。舉例來說,如果 OpenID Connect 中繼資料文件網址為 https://login.microsoftonline.com/d41ad248-019e-49e5-b3de-4bdfe1fapple/v2.0/.well-known/openid-configuration,則簽發機構 URI 為 https://login.microsoftonline.com/d41ad248-019e-49e5-b3de-4bdfe1fapple/v2.0/。

建立工作團隊身分集區提供者

如要建立供應商,請執行下列指令:

gcloud iam workforce-pools providers create-oidc WORKFORCE_PROVIDER_ID \
    --workforce-pool=WORKFORCE_POOL_ID \
    --location=global \
    --display-name=DISPLAY_NAME \
    --issuer-uri=ISSUER_URI \
    --client-id=https://analysis.windows.net/powerbi/connector/GoogleBigQuery \
    --attribute-mapping=ATTRIBUTE_MAPPING \
    --web-sso-response-type=id-token \
    --web-sso-assertion-claims-behavior=only-id-token-claims \
    --extra-attributes-issuer-uri=APP_ISSUER_URI \
    --extra-attributes-client-id=APP_CLIENT_ID \
    --extra-attributes-client-secret-value=APP_CLIENT_SECRET \
    --extra-attributes-type=EXTRA_GROUPS_TYPE \
    --extra-attributes-filter=EXTRA_FILTER \
    --detailed-audit-logging

更改下列內容:

  • WORKFORCE_PROVIDER_ID:專屬供應商 ID。前置字元「gcp-」為保留字,不得用於供應商 ID。

  • WORKFORCE_POOL_ID:要連結 IdP 的員工身分集區 ID。

  • DISPLAY_NAME:供應器的選用顯示名稱,方便使用者辨識。

  • ISSUER_URI:簽發者 URI 的值,格式為 https://sts.windows.net/TENANT_ID。將 TENANT_ID 替換為您先前記下的租戶 ID。

  • ATTRIBUTE_MAPPING:將 Microsoft Entra 聲明中的群組和其他屬性 (選用) 對應至Google Cloud 屬性,例如:google.groups=assertion.groups, google.subject=assertion.sub。本指南稍後會授予該群組 BigQuery 資料的存取權。

    詳情請參閱「屬性對應」。

  • APP_ISSUER_URI:您先前記下的 Microsoft Entra 應用程式核發者 URI。

  • APP_CLIENT_ID:您先前記下的簽發者用戶端 ID。

  • APP_CLIENT_SECRET:您先前記下的簽發者用戶端密鑰。

  • EXTRA_GROUPS_TYPE:群組 ID 類型,可以是下列其中一種:

    • azure-ad-groups-mail:從 IdP 擷取的群組電子郵件地址,例如:admin-group@altostrat.com。

    • azure-ad-groups-id:代表群組的 UUID 會從 IdP 擷取,例如:abcdefgh-0123-0123-abcdef。

    • azure-ad-groups-display-name:群組顯示名稱是從 IdP 擷取,例如:admin-group-display-name。

  • EXTRA_FILTER:用於要求從 IdP 傳遞特定聲明的篩選器。方法是為從 IdP 傳遞的使用者群組聲明指定 --extra-attributes-type=azure-ad-groups-mail、--extra-attributes-filter 篩選條件。根據預設,系統會擷取與使用者相關聯的所有群組。使用的群組必須啟用郵件和安全性功能。詳情請參閱「使用 $search 查詢參數」。

    以下範例會篩選與以 gcp 開頭的使用者電子郵件地址相關聯的群組:

    --extra-attributes-filter='"mail:gcp"'
    以下範例會篩選與使用者相關聯的群組,這些使用者的電子郵件地址開頭為 gcp,且 displayName 包含 example:
    --extra-attributes-filter='"mail:gcp" AND "displayName:example"'

  • 員工身分聯盟詳細稽核記錄會將從 IdP 收到的資訊記錄到 Cloud Logging。詳細的稽核記錄有助於排解工作團隊身分識別集區提供者設定問題。如要瞭解如何透過詳細的稽核記錄排解屬性對應錯誤,請參閱「一般屬性對應錯誤」。如要瞭解 Logging 定價,請參閱「Google Cloud Observability 定價」。

    如要為工作團隊身分集區提供者停用詳細稽核記錄功能,請在執行 gcloud iam workforce-pools providers create 時省略 --detailed-audit-logging 旗標。如要停用詳細稽核記錄,您也可以更新供應商。

建立允許政策

在本節中,您將建立允許政策,在儲存 BigQuery 資料的專案中,將 BigQuery 資料檢視者 (roles/bigquery.dataViewer) 角色授予對應群組。這項政策允許群組中的所有身分識別,查看儲存在專案中的 BigQuery 資料表和檢視區塊資料。

如要建立政策,請執行下列指令:

gcloud projects add-iam-policy-binding BIGQUERY_PROJECT_ID \
    --role="roles/bigquery.dataViewer" \
    --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"

更改下列內容:

  • BIGQUERY_PROJECT_ID:儲存 BigQuery 資料和中繼資料的專案 ID。
  • WORKFORCE_POOL_ID:員工身分集區 ID
  • GROUP_ID:群組 ID,取決於用於建立員工身分集區提供者的 --extra-attributes-type 值,如下所示:

    • azure-ad-groups-mail:群組 ID 是電子郵件地址,例如 admin-group@altostrat.com。

    • azure-ad-groups-id:群組 ID 是群組的 UUID,例如:abcdefgh-0123-0123-abcdef。

    • azure-ad-groups-display-name:群組 ID 是顯示名稱,例如:admin-group-display-name。

從 Power BI Desktop 存取 BigQuery 資料

如要透過 Power BI Desktop 存取 BigQuery 資料,請按照下列步驟操作:

  1. 開啟 Power BI。
  2. 按一下「取得資料」。
  3. 按一下「資料庫」。
  4. 在資料庫清單中,選取「Google BigQuery (Microsoft Entra ID) (Beta)」。
  5. 點選「連線」。
  6. 填寫下列必填欄位:

    • 報帳專案 ID:報帳專案 ID。
    • 目標對象 URI: Google Cloud URI,格式如下:

      //iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
      

      更改下列內容:

      • WORKFORCE_POOL_ID:員工身分集區 ID。

      • WORKFORCE_PROVIDER_ID:員工身分集區提供者 ID。

  7. 按一下 [確定]。

  8. 點選「下一步」。

  9. 按一下「選取資料」。

如果系統要求登入,請使用群組成員的 Microsoft Entra 身分。

您現在可以在 Power BI Desktop 中使用 BigQuery 的資料。

從 Power BI Web 存取 BigQuery 資料

如要透過 Power BI Web 存取 BigQuery 資料,請按照下列步驟操作:

  1. 前往 Power BI 網頁版。

  2. 按一下「Power Query」,新增資料來源。

  3. 按一下「取得資料」。

  4. 在清單中找到並選取「Google BigQuery (Microsoft Entra ID) (Beta)」。

  5. 填寫下列必填欄位:

    • 報帳專案 ID: Google Cloud 報帳專案

    • 目標對象 URI:目標對象 URI,格式如下:

      //iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
      

      更改下列內容:

      • WORKFORCE_POOL_ID:員工身分集區 ID

      • WORKFORCE_PROVIDER_ID:員工身分集區提供者 ID

  6. 依序點選「連線憑證」>「驗證類型」。

  7. 選取「機構帳戶」。

  8. 點按「Sign in」,

  9. 點選「下一步」。

  10. 按一下「選取資料」。

現在您可以在 Power BI Web 中使用 BigQuery 的資料。

後續步驟