使用员工身份联合和 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. Install the Google Cloud CLI, then initialize it by running the following command:

    gcloud init

  3. 您必须有权访问 Microsoft Entra 和 Microsoft Graph。

  4. 您必须设置 Power BI。

所需的角色

本部分介绍管理员和资源所需的角色。

管理员角色

如需获得配置员工身份联合所需的权限,请让您的管理员向您授予组织的 IAM Workforce Pool Admin (roles/iam.workforcePoolAdmin) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

此外,IAM Owner (roles/owner) 基本角色还具有配置身份联合的权限。您不应在生产环境中授予基本角色,但可以在开发或测试环境中授予这些角色。

联合身份角色

Power BI 在令牌交换期间发送 userProject 参数。因此,您必须让管理员为结算项目上的联合身份授予 Service Usage Consumer (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@example.com。如需查看常见主账号标识符的列表,请参阅主账号标识符

创建员工身份池

本部分介绍如何创建员工身份池。在本指南的后面部分,您将创建员工身份池提供方。

控制台

如需创建员工身份池,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到员工身份池页面:

    转到“员工身份池”

  2. 点击创建池,然后执行以下操作:

    1. 名称字段中,输入池的显示名称。池 ID 是根据您输入的名称自动派生的,并显示在名称字段下方。您可以点击池 ID 旁边的修改来更新池 ID。

    2. 可选:在说明中,输入池的说明。

    3. 默认情况下已设置会话时长。如需输入自定义会话时长,请点击修改。会话时长,用于确定来自此员工池的 Google Cloud 访问令牌、控制台(联合)登录会话和 gcloud CLI 登录会话的有效时长。时长必须大于 15 分钟(900 秒)且小于 12 小时(43200 秒)。如果未设置会话时长,则默认为 1 小时(3600 秒)。

    4. 如需创建状态为已启用的池,请确保已启用池处于开启状态。

    5. 如需创建员工身份池,请点击下一步

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 的格式,请参阅 API 文档中的查询参数部分。
  • ORGANIZATION_ID:您的 Google Cloud 组织的数字 ID。
  • DISPLAY_NAME:可选。您的员工身份池的显示名称。
  • DESCRIPTION:可选。员工身份池说明。
  • SESSION_DURATION:可选。会话时长,用于确定来自此员工池的 Google Cloud 访问令牌、控制台(联合)登录会话和 gcloud CLI 登录会话的有效时长。时长必须大于 15 分钟(900 秒)且小于 12 小时(43200 秒)。如果未设置会话时长,则默认为 1 小时(3600 秒)。

注册新的 Microsoft Entra 应用

本部分介绍如何使用 Microsoft Azure 门户创建 Microsoft Entra 应用。

  1. 注册新的 Microsoft Entra 应用

  2. 在您注册的 Microsoft Entra 应用中,创建新的客户端密钥。记下客户端密钥。

  3. 向 Microsoft Entra 应用授予 API 权限,以便该应用可以从 Active Directory 中访问用户和群组信息。如需为 Microsoft Graph API 授予权限,请执行以下操作:

    1. 在您的应用中,选择 API 权限
    2. 已配置的权限中,点击添加权限
    3. 请求 API 权限对话框中,选择 Microsoft Graph
    4. 选择应用权限
    5. 选择权限对话框中,执行以下操作:
      1. 在搜索字段中,输入 User.ReadBasic.All
      2. 点击 User.ReadBasic.All
      3. 点击添加权限
    6. 请求 API 权限对话框中,选择 Microsoft Graph
    7. 选择应用权限
    8. 选择权限对话框中,执行以下操作:
      1. 在搜索字段中,输入 GroupMember.Read.All
      2. 点击 GroupMember.Read.All
      3. 点击添加权限
    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 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=azure-ad-groups-mail \
    --extra-attributes-filter=FILTER

替换以下内容:

  • 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:您之前记下的颁发者客户端密钥。
  • FILTER:用于请求从 IdP 传递的特定断言的过滤条件。通过指定 --extra-attributes-type=azure-ad-groups-mail--extra-attributes-filter 可过滤从 IdP 传递的用户群组声明。默认情况下,系统会提取与用户关联的所有群组。使用的群组必须启用邮件和安全功能。如需了解详情,请参阅使用 $search 查询参数。最多可以提取 100 个组。

    以下示例过滤与以 gcp 开头的用户电子邮件地址关联的群组:

    --extra-attributes-filter='"mail:gcp"'
    以下示例过滤与电子邮件地址以 gcp 开头且 displayName 包含 example 的用户关联的群组:
    --extra-attributes-filter='"mail:gcp" AND "displayName:example"'

创建 IAM 政策

在本部分中,您将创建 IAM 允许政策,以将 BigQuery Data Viewer (roles/bigquery.dataViewer) 角色授予用于存储 BigQuery 数据的项目上的映射群组。该政策允许群组中的所有身份查看项目中存储的 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:群组,例如 admin-group@example.com

从 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/PROVIDER_ID
      

      替换以下内容:

      • WORKFORCE_POOL_ID:员工身份池 ID。

      • PROVIDER_ID:员工身份池提供方 ID。

  7. 点击确定

  8. 点击下一步

  9. 点击选择数据

如果系统要求您登录,请使用属于该群组的 Microsoft Entra 身份。

您现在可以在 Power BI Desktop 中使用 BigQuery 中的数据了。

从 Power BI Web 访问 BigQuery 数据

如需从 Power BI Web 访问 BigQuery 数据,请执行以下操作:

  1. 转到 Power BI Web。

  2. 点击 Power 查询以添加新数据源。

  3. 点击获取数据

  4. 在列表中,找到并选择 Google BigQuery (Microsoft Entra ID)(Beta 版)

  5. 填写以下必填字段:

    • 结算项目 ID:Google Cloud 结算项目

    • 目标对象 URI:目标对象 URI,格式如下:

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

      替换以下内容:

      • WORKFORCE_POOL_ID:员工身份池 ID

      • PROVIDER_ID:员工身份池提供方 ID

  6. 点击连接凭据 > 身份验证种类

  7. 选择组织账号

  8. 点击登录

  9. 点击下一步

  10. 点击选择数据

您现在可以在 Power BI Web 中使用 BigQuery 中的数据了。

后续步骤