使用基于角色的访问权限控制

本页面介绍如何在 Cloud Data Fusion 实例中开始使用基于角色的访问权限控制 (RBAC)。运行 6.5 版及更高版本的 Cloud Data Fusion 实例可以使用 RBAC。

如需了解详情,请参阅基于角色的访问权限控制 (RBAC) 概览

建议:除非出于自动化目的而需要这样做,否则请使用 Google Cloud 控制台执行 RBAC 任务。

为现有实例启用 RBAC

您可以为在 6.5 版或更高版本中运行的现有 Cloud Data Fusion 实例启用 RBAC。

控制台

如需在现有 Cloud Data Fusion 实例上启用 RBAC,请执行以下操作:

  1. 转到实例详情:
    1. 在 Google Cloud 控制台中,转到 Cloud Data Fusion 页面。

    2. 点击实例,然后点击相应实例的名称以转到实例详情页面。

      转到实例

  2. 确保实例已升级到 6.5 版或更高版本。如果该实例的版本低于 6.5,请将该实例升级到 6.5 版或更高版本。
  3. 点击启用 RBAC
  4. 点击保存
  5. 等待实例更新操作完成。

gcloud

如需在现有 Cloud Data Fusion 实例上启用 RBAC,请运行以下命令:

gcloud beta data-fusion instances update --enable_rbac --location=REGION INSTANCE_ID

REST API

使用 Cloud Data Fusion 补丁 API 为现有实例启用 RBAC。将 enableRbac 标志设置为 true,并通过以下示例命令使用 updateMask 查询参数:

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE_ID
export DATA_FUSION_API_NAME=datafusion.googleapis.com
alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
gcurl https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances/$INSTANCE?updateMask=enable_rbac -X PATCH -d '{"enable_rbac": "true"}'

为现有实例停用 RBAC

如果您的现有实例启用了 RBAC,则可以根据需要停用 RBAC。停用 RBAC 不会影响实例中的任何现有流水线或配置。它只会停用跨命名空间的安全隔离。

控制台

如需在现有 Cloud Data Fusion 实例上停用 RBAC,请执行以下操作:

  1. 转到实例详情:

    1. 在 Google Cloud 控制台中,转到 Cloud Data Fusion 页面。

    2. 点击实例,然后点击相应实例的名称以转到实例详情页面。

      转到实例

  2. 点击停用 RBAC

  3. 点击保存

  4. 等待实例更新操作完成。

gcloud

如需为现有实例停用 RBAC,请使用参数 --no-enable_rbac(而不是 --enable-rbac)。

gcloud beta data-fusion instances update --no-enable_rbac --location=REGION INSTANCE_ID

用法示例:

gcloud beta data-fusion instances update --no-enable_rbac --location=us-east1 cdf-test-instance

REST API

使用 Cloud Data Fusion 补丁 API 为现有实例停用 RBAC。将 enableRbac 标志设置为 false,并通过以下示例命令使用 updateMask 查询参数:

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE_ID
export DATA_FUSION_API_NAME=datafusion.googleapis.com
alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
gcurl https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances/$INSTANCE?updateMask=enable_rbac -X PATCH -d '{"enable_rbac": "false"}'

创建一个启用了 RBAC 的新实例

控制台

如需创建启用了 RBAC 的新 Cloud Data Fusion 实例,请执行以下操作:

  1. 转到 Cloud Data Fusion 实例页面。

  2. 点击实例

    转到实例

  3. 点击创建实例,然后输入实例详细信息。

  4. 选择企业版。RBAC 仅在企业版中受支持。

  5. 高级选项中,选择启用基于角色的精细访问权限控制

    此功能仅适用于使用 Cloud Data Fusion 6.5 版及更高版本的实例。

  6. 点击创建

gcloud

如需创建启用了 RBAC 的新实例,请运行以下命令:

gcloud beta data-fusion instances create --edition=enterprise \
--enable_rbac \
--location=REGION INSTANCE_ID \
--version=6.5.0

用法示例:

gcloud beta data-fusion instances create --edition=enterprise \
--enable_rbac \
--location=us-east1 \
--version=6.5.0

REST API

如需使用 REST API 创建启用 RBAC 的实例,请在实例选项中传递设置为 trueenableRbac 标志,如以下命令所示:

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE_ID
export DATA_FUSION_API_NAME=datafusion.googleapis.com
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances?instanceId=$INSTANCE -X POST -d '{"description": "RBAC CDF instance created through REST", "type": "ENTERPRISE", "enableRbac": "true"}'

向用户授予预定义的 Cloud Data Fusion 角色(必需)

启用 RBAC 后,您可以向主账号授予角色,以允许他们在实例或命名空间中执行特定操作。如需确定哪些角色最适合您的要求,请参阅预定义的 Cloud Data Fusion 角色安全建议

控制台

如需向主账号授予预定义的 Cloud Data Fusion 角色,请执行以下操作:

  1. 转到 Cloud Data Fusion 权限页面。

    转到权限

  2. 点击添加

    系统会打开添加用户的访问权限对话框。

  3. 新成员字段中,输入要授予其角色的正文(用户、群组或服务账号电子邮件)列表。

  4. 选中要为其授予这些权限的每个实例旁边的复选框。

    选择实例

  5. 转到角色列,然后选择所需实例旁边的下拉菜单。

    1. 如需授予实例管理员权限,请选择 Instance Admin

    2. 如需授予命名空间级别权限,请选择 Namespace User

      选择命名空间用户角色

      1. 如果要授予命名空间级别权限,请点击选择

        系统会打开添加访问权限对话框。

      2. 选择一个命名空间,然后选择要向该命名空间授予的预定义 Cloud Data Fusion 角色。

      3. 点击选择,保存新设置。

      4. 可选:如需为其他实例授予命名空间权限,请重复第 5 步。

  6. 点击保存

    如需验证已授予的角色,请参阅在 Google Cloud 控制台中验证角色

gcloud

您可以使用 Google Cloud CLI 以编程方式控制访问权限

如需使用 gcloud CLI 授予角色,请使用以下格式的用户标识符列表(以英文逗号分隔):

[user|group|serviceAccount][email_address]

请提供以下值:

  • user:useremail@example.com
  • group:groupemail@example.com
  • serviceAccount:serviceaccount@project.iam.gserviceaccount.com

如需查看更多示例,请参阅授予角色

授予 Instance Accessor 角色(必填)

您必须先通过向用户授予实例的 Accessor 角色,向他们授予对实例的访问权限:

  1. 使用以下命令导出以下变量,将变量替换为您自己的值:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    

    将以下变量替换为您自己的值:

    • PROJECT_ID:您的项目名称。
    • INSTANCE_ID:实例的名称。
    • REGION:项目所属的区域。
    • EMAIL:主账号的电子邮件地址。
    • USER_TYPE:用户类型可以是用户、群组或 serviceAccount 之一。
  2. 运行以下命令以分配角色:

    gcloud beta data-fusion add-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --member="${USER_TYPE}:${USER_ID}" --role="roles/datafusion.accessor"
    

向命名空间授予角色(取决于使用场景)

根据您的使用场景,使用以下命令授予角色:

  1. 使用以下命令导出以下变量,将变量替换为您自己的值:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export NAMESPACE=NAMESPACE
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    

    将以下变量替换为您自己的值:

    • PROJECT_ID:您的项目名称。
    • INSTANCE_ID:实例的名称。
    • REGION:项目所属的区域。
    • NAMESPACE:命名空间名称。
    • EMAIL:主账号的电子邮件地址。
    • USER_TYPE:用户类型可以是用户、群组或 serviceAccount 之一。
  2. 运行以下命令以向给定命名空间中的主账号分配角色:

    gcloud beta data-fusion add-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE} --member="${USER_TYPE}:${USER_ID}" --role="roles/ROLE_NAME"
    

    ROLE_NAME 替换为以下某个值:

    • 对于命名空间的 Editor 角色,请使用 datafusion.editor
    • 对于命名空间的 Operator 角色,请使用 datafusion.operator
    • 对于命名空间的 Developer 角色,请使用 datafusion.developer
    • 对于命名空间的 Viewer 角色,请使用 datafusion.viewer

可选:撤消命名空间角色

如需撤消授予给定命名空间的用户的角色,请使用以下命令:

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
export USER_ID=EMAIL
# User type can be one of: user, group, or serviceAccount.
export USER_TYPE=USER_TYPE
export ROLE=ROLE_NAME
gcloud beta data-fusion remove-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE} --member="${USER_TYPE}:${USER_ID}" --role="${ROLE}"

可选:列出在给定命名空间上授予的角色

如需列出在特定命名空间上授予的所有角色,请使用以下命令提取 IAM 政策:

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE}

REST API

授予 Instance Accessor 角色(必填)

您必须先通过向用户授予实例的 Accessor 角色,向他们授予对实例的访问权限。

强烈建议:使用 gcloud CLI 授予 Accessor 角色。

  1. 授予对实例的 Accessor 角色:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export USER_ID=EMAIL
    # User type can be one of: user, group, or serviceAccount.
    export USER_TYPE=USER_TYPE
    alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
    
  2. 提取当前的 IAM 政策并将其保存在文件中:

    gcurl https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:getIamPolicy > iam_policy.json
    
  3. 为政策中的角色和用户添加绑定。例如:

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/datafusion.accessor",
            "members": [
              "${USER_TYPE}:${USER_ID}"
            ]
          }
        ]
      }
    }
    
  4. 更新实例的 IAM 政策:

    gcurl \
      -d @iam_policy.json \
      https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:setIamPolicy
    

向命名空间授予角色(取决于使用场景)

根据您的使用场景,使用以下命令授予角色:

  1. 使用以下命令导出以下变量,将变量替换为您自己的值:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export NAMESPACE=NAMESPACE
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
    

    将以下变量替换为您自己的值:

    • PROJECT_ID:您的项目名称。
    • INSTANCE_ID:实例的名称。
    • REGION:项目所属的区域。
    • NAMESPACE:命名空间名称。
    • EMAIL:主账号的电子邮件地址。
    • USER_TYPE:用户类型可以是用户、群组或 serviceAccount 之一。
  2. 提取当前的 IAM 政策并将其保存在文件中:

      gcurl https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}/namespaces/{NAMESPACE}:getIamPolicy > iam_policy.json
    

    iam_policy.json 替换为您自己的文件名。

  3. 在政策文件中为角色和用户添加绑定。例如,政策文件可能如下所示:

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/ROLE_NAME",
              "members": [
              "${USER_TYPE}:${USER_ID}"
            ]
          }
        ]
      }
    }
    

    您可以为给定政策指定多个角色绑定,还可以在给定角色绑定的 members 列表中指定多个主账号。对于给定主账号,请将 ROLE_NAME 替换为以下值之一:

    • 对于命名空间的 Editor 角色,请使用 datafusion.editor
    • 对于命名空间的 Operator 角色,请使用 datafusion.operator
    • 对于命名空间的 Developer 角色,请使用 datafusion.developer
    • 对于命名空间的 Viewer 角色,请使用 datafusion.viewer
  4. 运行以下命令以更新政策文件:

    gcurl -d @iam_policy.json \
    https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}/namespaces/{NAMESPACE}:setIamPolicy
    

    iam_policy.json 替换为您自己的文件名。

在 Google Cloud 控制台中验证角色

在 Cloud Data Fusion 权限页面上查看和修改现有角色。

转到权限

使用政策文件验证角色

使用 gcloud CLI 或 REST API 验证是否已在 IAM 政策文件中将角色授予正确的用户。

在以下 IAM 政策文件示例中,用户 alice@example.com 具有 Data Fusion Developer 角色:

bindings:
- members:
  - user:alice@example.com
  role: roles/datafusion.developer
- members:
  - user:bob@example.com
  - serviceAccount:myserviceaccount@myproject.iam.gserviceaccount.com
  role: roles/datafusion.operator
- members:
  - user:james@example.com
  - user:mike@example.com
  - group:mygroup@googlegroups.com
  role: roles/datafusion.editor
etag: BwXA8BAHYmw=

获取实例的 IAM 政策

gcloud

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION}

cURL

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
curl -H "Authorization: Bearer "$(gcloud auth print-access-token) \
https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:getIamPolicy

获取命名空间的 IAM 政策

gcloud

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE}

cURL

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export NAMESPACE=NAMESPACE
export REGION=REGION
curl -H "Authorization: Bearer "$(gcloud auth print-access-token) \
https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}/namespaces/${NAMESPACE}:getIamPolicy

后续步骤