Dataproc Granular IAM

Dataproc Granular IAM 是一项功能,该功能允许您在集群、作业、操作、工作流模板或自动扩缩政策级层授予权限。

示例:您可以向一位用户授予集群“查看者”角色,该角色允许用户查看项目中的集群,并向另一位用户授予作业“修改者”角色,该角色允许用户更新,取消和查看作业。 请参阅 Granular IAM 启用的 SDK 命令以了解每个 Dataproc Granular IAM 角色启用的特定 Google Cloud SDK 命令。

Dataproc Granular IAM 角色和权限

Dataproc Granular IAM 可以设置具备以下 Dataproc 资源权限的以下角色。

集群角色

角色 权限
查看者 dataproc.clusters.get
Editor dataproc.clusters.get
dataproc.clusters.list
dataproc.clusters.delete
dataproc.clusters.update
dataproc.clusters.use
Owner dataproc.clusters.get
dataproc.clusters.list
dataproc.clusters.delete
dataproc.clusters.update
dataproc.clusters.use
dataproc.clusters.setIamPolicy
dataproc.clusters.getIamPolicy

作业角色

角色 权限
查看者 dataproc.jobs.get
Editor dataproc.jobs.get
dataproc.jobs.cancel
dataproc.jobs.delete
dataproc.jobs.update
Owner dataproc.jobs.get
dataproc.jobs.cancel
dataproc.jobs.delete
dataproc.jobs.update
dataproc.jobs.setIamPolicy
dataproc.jobs.getIamPolicy

操作角色

角色 权限
查看者 dataproc.operations.get
Editor dataproc.jobs.get
dataproc.operations.cancel
dataproc.operations.delete
Owner dataproc.jobs.get
dataproc.operations.cancel
dataproc.operations.delete
dataproc.operations.setIamPolicy
dataproc.operations.getIamPolicy

工作流模板角色

角色 权限
查看者 dataproc.workflowTemplates.get
Editor dataproc.workflowTemplates.get
dataproc.workflowTemplates.delete
dataproc.workflowTemplates.update
Owner dataproc.workflowTemplates.get
dataproc.workflowTemplates.delete
dataproc.workflowTemplates.update
dataproc.workflowTemplates.setIamPolicy
dataproc.workflowTemplates.getIamPolicy

自动扩缩政策角色

角色 权限
查看者 dataproc.autoscalingPolicies.get
Editor dataproc.autoscalingPolicies.get
dataproc.autoscalingPolicies.use
dataproc.autoscalingPolicies.delete
dataproc.autoscalingPolicies.update
Owner dataproc.autoscalingPolicies.get
dataproc.autoscalingPolicies.use
dataproc.autoscalingPolicies.delete
dataproc.autoscalingPolicies.update
dataproc.autoscalingPolicies.setIamPolicy
dataproc.autoscalingPolicies.getIamPolicy

使用 Dataproc Granular IAM

本节介绍如何在现有 Dataproc 资源上使用 Dataproc Granular IAM 为用户分配角色。如需更广泛地了解如何更新和移除身份和访问权限管理 (IAM) 角色,请参阅授予、更改和撤消项目成员的访问权限

gcloud 命令

  1. 获取资源的 IAM 政策,并将其写入 JSON 文件(resource-type 可以是“clusters”、“jobs”、“operations”或“workflow-templates”或“autoscaling-policies”):
    gcloud dataproc resource-type get-iam-policy  resource-id \
        --region=region \
        --format=json > iam.json
    
  2. JSON 文件的内容将如下所示:
    {
      "bindings": [
        {
          "role": "roles/editor",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
          ]
        }
      ],
      "etag": "string"
    }
    
  3. 使用文本编辑器将新的绑定对象添加到绑定数组中,该数组定义了用户以及这些用户的资源访问角色。例如,如需向用户 sean@example.com 授予 Viewer 角色 (roles/viewer),您需要更改上面的示例以添加新的绑定对象(以下面的粗体显示)。注意:请确保返回您在 gcloud dataproc resource-type get-iam-policy 中收到的 etag 值(请参阅 etag 文档)。
    {
      "bindings": [
        {
          "role": "roles/editor",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
          ]
        },
        {
          "role": "roles/viewer",
          "members": [
            "user:sean@example.com"
          ]
        }
      ],
      "etag": "value-from-get-iam-policy"
    }
    
  4. 通过运行以下命令,使用新的绑定数组更新集群的政策(resource-type 可以是“clusters”、“jobs”、“operations”、“workflow-templates”或“autoscaling-policies”):
    gcloud dataproc resource-type set-iam-policy resource-name \
        --region=region \
        --format=json iam.json
    
  5. 该命令输出更新后的政策:
    {
      "bindings": [
        {
          "role": "roles/editor",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
          ]
        },
        {
          "role": "roles/viewer",
          "members": [
            "user:sean@example.com"
          ]
        }
      ],
      "etag": "string"
    }
    

REST API

  1. 发出 resource-type ("clusters" or "jobs" or "operations" or "workflowTemplates" or "autoscalingPolicies") getIamPolicy 请求以获取资源的 IAM 政策

    集群 getIamPolicy 示例:

    GET https://dataproc.googleapis.com/v1/projects/projectName/regions/region/clusters/clusterName:getIamPolicy
    
  2. JSON 文件的内容将如下所示:
    {
      "bindings": [
        {
          "role": "roles/editor",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
          ]
        }
      ],
      "etag": "string"
    }
    
  3. 使用文本编辑器构建以下 JSON 政策对象,以包含刚刚从 Dataproc 服务收到的绑定数组。请确保返回您在 getIamPolicy 响应中收到的“etag”值(请参阅 etag 文档)。现在,请将新的绑定对象添加到绑定数组中,该数组定义了用户以及这些用户的集群访问角色。例如,如需向用户 sean@example.com 授予 Viewer 角色 (roles/viewer),您需要更改上面的示例以添加新的绑定对象(以下面的粗体显示)。
    {
      "policy": {
        "version": "",
        "bindings": [
          {
            "role": "roles/editor",
            "members": [
              "user:mike@example.com",
              "group:admins@example.com",
              "domain:google.com",
              "serviceAccount:my-other-app@appspot.gserviceaccount.com"
            ]
          },
          {
            "role": "roles/viewer",
            "members": [
              "user:sean@example.com"
            ]
          }
        ],
        "etag": "value-from-getIamPolicy"
      }
    }
    
  4. 通过发出 setIamPolicy 请求,在资源上设置经过更新的政策。

    集群 setIamPolicy 示例:

    POST https://dataproc.googleapis.com/v1/projects/projectName/regions/region/clusters/clusterName:setIamPolicy
    
    Request body
    
    {
      "policy": {
        "version": "",
        "bindings": [
          {
            "role": "roles/editor",
            "members": [
              "user:mike@example.com",
              "group:admins@example.com",
              "domain:google.com",
              "serviceAccount:my-other-app@appspot.gserviceaccount.com"
            ]
          },
          {
            "role": "roles/viewer",
            "members": [
              "user:sean@example.com"
            ]
          }
        ],
        "etag": "value-from-getIamPolicy"
      }
    }
    
  5. JSON 响应的内容将如下所示:

    响应

    {
      "bindings": [
        {
          "role": "roles/editor",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
          ]
        },
        {
          "role": "roles/viewer",
          "members": [
            "user:sean@example.com"
          ]
        }
      ],
      "etag": "string"
    }
    

控制台

转到 Cloud Console 中的 Dataproc 集群页面,然后点击集群名称左侧的复选框以打开权限/标签面板(如果面板未显示,请点击位于页面右上角的显示信息面板)。在“权限”标签下,选择 Dataproc 角色,在添加成员框中添加一个或多个帐号地址,然后单击添加

Granular IAM 启用的 SDK 命令

下表显示了每个 Granular IAM 角色在 Cloud Dataproc 资源上启用的 gcloud dataproc 命令。

集群

IAM 角色 命令
查看者 gcloud dataproc clusters describe cluster-name
修改者 gcloud dataproc clusters describe cluster-name
gcloud dataproc clusters list
gcloud dataproc clusters delete cluster-name
gcloud dataproc clusters diagnose cluster-name
gcloud dataproc clusters update cluster-name
所有者 gcloud dataproc clusters describe cluster-name
gcloud dataproc clusters list
gcloud dataproc clusters delete cluster-name
gcloud dataproc clusters diagnose cluster-name
gcloud dataproc clusters update cluster-name
gcloud dataproc clusters get-iam-policy cluster-name
gcloud dataproc clusters set-iam-policy cluster-name

作业

IAM 角色 命令
查看者 gcloud dataproc jobs describe job-id
修改者 gcloud dataproc jobs delete job-id
gcloud dataproc jobs describe job-id
gcloud dataproc jobs kill job-id
gcloud dataproc jobs update job-id
gcloud dataproc jobs wait job-id
所有者 gcloud dataproc jobs delete job-id
gcloud dataproc jobs describe job-id
gcloud dataproc jobs kill job-id
gcloud dataproc jobs update job-id
gcloud dataproc jobs wait job-id
gcloud dataproc jobs get-iam-policy job-id
gcloud dataproc jobs set-iam-policy job-id

操作

IAM 角色 命令
查看者 gcloud dataproc operations describe operation-id
修改者 gcloud dataproc operations delete operation-id
gcloud dataproc operations describe operation-id
gcloud dataproc operations cancel operation-id
所有者 gcloud dataproc operations delete operation-id
gcloud dataproc operations describe operation-id
gcloud dataproc operations cancel operation-id
gcloud dataproc operations get-iam-policy operation-id
gcloud dataproc operations set-iam-policy operation-id

工作流模板

IAM 角色 命令
查看者 gcloud dataproc workflow-templates describe template-id
修改者 gcloud dataproc workflow-templates delete template-id
gcloud dataproc workflow-templates describe template-id
gcloud dataproc workflow-templates remove-job template-id
gcloud dataproc workflow-templates run template-id
所有者 gcloud dataproc workflow-templates delete template-id
gcloud dataproc workflow-templates describe template-id
gcloud dataproc workflow-templates remove-job template-id
gcloud dataproc workflow-templates run template-id
gcloud dataproc workflow-templates get-iam-policy template-id
gcloud dataproc workflow-templates set-iam-policy template-id

自动扩缩政策

IAM 角色 命令
查看者 gcloud dataproc autoscaling-policies describe policy-id
修改者 gcloud dataproc autoscaling-policies delete policy-id
gcloud dataproc autoscaling-policies describe policy-id
gcloud dataproc autoscaling-policies update policy-id
gcloud dataproc clusters create cluster-name --autoscaling-policy policy-id
所有者 gcloud dataproc autoscaling-policies delete policy-id
gcloud dataproc autoscaling-policies describe policy-id
gcloud dataproc autoscaling-policies update policy-id
gcloud dataproc clusters create cluster-name --autoscaling-policy policy-id
gcloud dataproc autoscaling-policies get-iam-policy policy-id
gcloud dataproc autoscaling-policies set-iam-policy policy-id

使用 Granular IAM 提交作业

要使用 Dataproc Granular IAM 允许成员(用户、组或服务帐号)将作业提交到指定的集群,除了向用户授予集群上的 Editor 角色之外,还必须在项目级层设置其他权限。要允许成员在指定的 Dataproc 集群上提交作业,步骤如下:

  1. 创建 Cloud Storage 存储分区,您的集群可使用该存储分区连接到 Cloud Storage。
  2. 将成员添加到存储分区级层政策中,并为该成员选择 Storage Object Viewer 角色(请参阅 roles/storage.objectViewer),该角色包含以下权限:
    1. storage.objects.get
    2. storage.objects.list
  3. 创建集群时,使用 --bucket 参数将您刚创建的存储分区的名称传递给集群(请参阅 gcloud dataproc clusters create --bucket)。
  4. 创建集群后,请在集群上设置一个政策,以向成员授予“修改者”或“所有者”角色(请参阅使用 Dataproc Granular IAM)。
  5. 创建 IAM 自定义角色,使其具备以下权限:
    1. dataproc.jobs.create
    2. dataproc.jobs.get
  6. 在 Cloud Console 的 IAM页面上选择或添加成员,然后选择自定义角色以将其应用于该成员。