使用命名空间服务账号进行访问权限控制

本页介绍了如何为 Cloud Data Fusion 实例中的命名空间配置 Identity and Access Management (IAM) 服务账号。

Cloud Data Fusion 中的命名空间简介

命名空间是 Cloud Data Fusion 实例中应用、数据和关联元数据的逻辑分组。您可以将命名空间视为实例的分区。任何应用或数据(本文中称为实体)都可以在多个命名空间中独立存在。在单个实例中,一个命名空间会独立于另一个命名空间存储实体的数据和元数据。

使用命名空间服务账号进行访问权限控制

默认情况下,为了控制对资源的访问权限,Cloud Data Fusion 中的命名空间使用 Cloud Data Fusion API Service Agent。 Google Cloud

为了更好地实现数据隔离,您可以将自定义 IAM 服务账号(称为“每个命名空间的服务账号”)与每个命名空间相关联。借助自定义 IAM 服务账号(不同命名空间的服务账号可能不同),您可以控制对命名空间之间Google Cloud 资源的访问权限,以便在 Cloud Data Fusion 中执行流水线设计时操作(例如流水线预览、Wrangler 和流水线验证)。

准备工作

  • Cloud Data Fusion 6.10.0 及更高版本中的启用了 RBAC 的实例支持按命名空间的服务账号。
  • 每个命名空间的服务账号用于控制和管理对资源的访问权限。 Google Cloud

所需的角色和权限

如需获得自定义命名空间服务账号和在命名空间中授予用户权限所需的权限,请让管理员为您授予项目中 Cloud Data Fusion 实例的 Cloud Data Fusion Admin (roles/datafusion.admin) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

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

管理命名空间中用户的权限

如需向用户授予他们在命名空间中所需的权限,请向他们授予预定义的 Cloud Data Fusion 角色。如需了解详情,请参阅启用了 RBAC 的实例中可供用户使用的预定义 Cloud Data Fusion 角色

配置命名空间服务账号

控制台

如需为命名空间配置服务账号,请按以下步骤操作:

  1. 如果您没有现有的命名空间服务账号,请创建一个
  2. 在 Google Cloud 控制台中,前往 Cloud Data Fusion 实例页面,然后在 Cloud Data Fusion 网页界面中打开一个实例。

    转到实例

  3. 依次点击系统管理员 > 配置 > 命名空间

  4. 点击您要配置的命名空间。

  5. 点击服务账号标签页,然后点击添加服务账号

    “添加服务账号”按钮。

  6. 授予 Workload Identity User 角色 (roles/iam.workloadIdentityUser)。

    如需授予该角色,请按以下步骤操作:

    1. 流水线设计服务账号字段中,输入服务账号电子邮件地址,例如 SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    2. 按照随即显示的对话框中的说明操作。
  7. 如需完成服务账号配置,请返回 Cloud Data Fusion 实例的命名空间,然后点击保存

  8. 重复上述步骤,为每个命名空间配置服务账号。

REST API

  1. 授予 Workload Identity User 角色 (roles/iam.workloadIdentityUser)。

    如需授予该角色,请按以下步骤操作:

    1. 设置以下环境变量:

      export TENANT_PROJECT_ID=TENANT_PROJECT
      export GSA_PROJECT_ID=SERVICE_ACCOUNT_PROJECT
      

      替换以下内容:

      • TENANT_PROJECT:租户项目 ID。如需查找该实例,请前往实例页面,然后点击实例名称。该 ID 会显示在实例详情页面上。

        转到实例

      • SERVICE_ACCOUNT_PROJECT:IAM 服务账号所在的Google Cloud 项目 ID。

    2. 授予 Workload Identity User 角色:

      gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser
          --member "serviceAccount:${TENANT_PROJECT_ID}.svc.id.goog[default/NAMESPACE_IDENTITY]" SERVICE_ACCOUNT_EMAIL \
          --project ${GSA_PROJECT_ID}
      

      替换以下内容:

      • NAMESPACE_IDENTITY:命名空间的身份。如需了解详情,请参阅命名空间的详细信息

      • SERVICE_ACCOUNT_EMAIL:服务账号的电子邮件地址,例如 SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

  2. 验证上一步中命名空间服务账号的电子邮件地址。设置 environment variables,然后运行以下命令:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" ${CDAP_ENDPOINT}/v3/namespaces/NAMESPACE_NAME/credentials/workloadIdentity/validate -X POST -d '{"serviceAccount":"SERVICE_ACCOUNT_EMAIL"}'
    

    替换以下内容:

    • NAMESPACE_NAME:命名空间的 ID。
    • SERVICE_ACCOUNT_EMAIL:您要在命名空间中设置的 IAM 服务账号电子邮件地址。
  3. 设置命名空间服务账号。设置 environment variables,然后运行以下命令:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"
     ${CDAP_ENDPOINT}/v3/namespaces/NAMESPACE_NAME/credentials/workloadIdentity -X PUT -d '{"serviceAccount":"SERVICE_ACCOUNT_EMAIL"}'
    

修改命名空间服务账号

控制台

如需修改命名空间服务账号,请按以下步骤操作:

  1. 在 Cloud Data Fusion 实例中,依次点击系统管理员 > 配置 > 命名空间
  2. 点击包含要修改的服务账号的命名空间。
  3. 如需修改服务账号,请前往服务账号标签页。在服务账号名称旁边,依次点击 菜单 > 修改
  4. 按照相应步骤配置命名空间服务账号

REST API

如需修改命名空间服务账号,请按以下步骤操作:

  1. 设置 environment variables,然后运行以下命令:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"
     ${CDAP_ENDPOINT}/v3/namespaces/NAMESPACE_NAME/credentials/workloadIdentity -X PUT -d '{"serviceAccount":"SERVICE_ACCOUNT_EMAIL"}'
    

    替换以下内容:

    • NAMESPACE_NAME:命名空间的 ID。
    • SERVICE_ACCOUNT_EMAIL:您要在命名空间中设置的 IAM 服务账号电子邮件地址。

删除命名空间服务账号

控制台

如需从命名空间中删除命名空间服务账号,请按以下步骤操作:

  1. 在 Cloud Data Fusion 实例中,依次点击系统管理员 > 配置 > 命名空间
  2. 点击包含要删除的服务账号的命名空间。
  3. 如需移除服务账号,请前往服务账号标签页。在服务账号名称旁边,依次点击 菜单 > 删除

REST API

如需从命名空间中删除命名空间服务账号,请按以下步骤操作:

  1. 设置 environment variables,然后运行以下命令:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" ${CDAP_ENDPOINT}/v3/namespaces/NAMESPACE_NAME/credentials/workloadIdentity -X DELETE
    

    替换以下内容:

    • NAMESPACE_NAME:命名空间的 ID。

获取命名空间服务账号

控制台

如需获取命名空间的服务账号信息,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 Cloud Data Fusion 实例页面,然后在 Cloud Data Fusion 网页界面中打开一个实例。

    转到实例

  2. 依次点击系统管理员 > 配置 > 命名空间

  3. 点击某个命名空间名称可查看服务账号详情。

REST API

如需获取命名空间服务账号名称,请按以下步骤操作:

  1. 设置 environment variables,然后运行以下命令:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" ${CDAP_ENDPOINT}/v3/namespaces/NAMESPACE_NAME/credentials/workloadIdentity -X GET
    

    替换以下内容:

    • NAMESPACE_NAME:命名空间的 ID。

    如果成功,您将在以下响应中收到服务账号电子邮件地址:

    Response: {"serviceAccount":"SERVICE_ACCOUNT_EMAIL"}
    

后续步骤