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

借助 Cloud Data Fusion 中的命名空间服务账号,您可以在流水线设计期间在命名空间之间强制执行精细访问权限控制。配置专用 Identity and Access Management (IAM) 服务账号可将设计时活动(例如 Wrangler、流水线预览和流水线验证)限制为特定 Google Cloud 资源。

Cloud Data Fusion 中的命名空间简介

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

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

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

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

准备工作

  • 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.。
    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}.[default/NAMESPACE_IDENTITY]" SERVICE_ACCOUNT_EMAIL \
          --project ${GSA_PROJECT_ID}
      

      替换以下内容:

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

      • SERVICE_ACCOUNT_EMAIL:服务账号的邮箱,例如 SERVICE_ACCOUNT_NAME@PROJECT_ID.。

  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"}
    

后续步骤