使用员工身份联合和 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 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@altostrat.com。如需查看常见主账号标识符的列表,请参阅主账号标识符

创建员工身份池

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

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:可选。会话时长,以在后面附加 s 的数字表示,例如 3600s。会话时长,用于确定来自此员工池的 Google Cloud 访问令牌、控制台(联合)登录会话和 gcloud CLI 登录会话的有效时长。会话时长默认为 1 小时(3600 秒)。会话时长值必须介于 15 分钟(900 秒)到 12 小时(43200 秒)之间。

控制台

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

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

    转到“员工身份池”

  2. 为员工身份池选择组织。员工身份池可在组织中的所有项目和文件夹中使用。

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

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

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

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

员工身份池的会话时长默认为 1 小时(3600 秒)。会话时长用于确定来自此员工池的 Google Cloud 访问令牌以及控制台(联合)和 gcloud CLI 登录会话的有效时长。创建池后,您可以更新池以设置自定义会话时长。会话时长必须介于 15 分钟(900 秒)到 12 小时(43200 秒)之间。

注册新的 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 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:群组标识符的类型,可以是以下值之一:

    • azure-ad-groups-mail:从 IdP 检索到的群组邮箱,例如:admin-group@altostrat.com

    • azure-ad-groups-id:从 IdP 检索到的表示群组的 UUID,例如:abcdefgh-0123-0123-abcdef

  • EXTRA_FILTER:用于请求从 IdP 传递特定断言的过滤条件。通过指定 --extra-attributes-type=azure-ad-groups-mail--extra-attributes-filter 可过滤从 IdP 传递的用户群组声明。默认情况下,系统会提取与用户关联的所有群组。使用的群组必须启用邮件和安全功能。如需了解详情,请参阅使用 $search 查询参数

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

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

  • 员工身份联合详细审核日志记录会将从 IdP 接收的信息记录到 Logging。详细的审核日志记录有助于排查员工身份池提供方配置的问题。如需了解如何通过详细审核日志记录来排查属性映射错误,请参阅一般属性映射错误。如需了解 Logging 价格,请参阅 Google Cloud Observability 价格

    如需为员工身份池提供方停用详细审核日志记录,请在运行 gcloud iam workforce-pools providers create 时省略 --detailed-audit-logging 标志。如需停用详细审核日志记录,您也可以更新提供方

创建 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:群组标识符,具体取决于用于创建员工身份池提供方的 --extra-attributes-type 的值,如下所示:

    • azure-ad-groups-mail:群组标识符是一个邮箱,例如:admin-group@altostrat.com

    • azure-ad-groups-id:群组标识符是群组的 UUID,例如:abcdefgh-0123-0123-abcdef

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

      替换以下内容:

      • WORKFORCE_POOL_ID:员工身份池 ID

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

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

  7. 选择组织账号

  8. 点击登录

  9. 点击下一步

  10. 点击选择数据

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

后续步骤