Dataproc Granular IAM

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

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

Dataproc Granular IAM 角色和权限

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

集群角色

角色 权限
Viewer dataproc.clusters.get
Editor dataproc.clusters.get
dataproc.clusters.list
dataproc.clusters.delete
dataproc.clusters.update
dataproc.clusters.use
dataproc.clusters.start
dataproc.clusters.stop
Owner dataproc.clusters.get
dataproc.clusters.list
dataproc.clusters.delete
dataproc.clusters.update
dataproc.clusters.use
dataproc.clusters.start
dataproc.clusters.stop
dataproc.clusters.setIamPolicy
dataproc.clusters.getIamPolicy

作业角色

角色 权限
Viewer 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

操作角色

角色 权限
Viewer 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

工作流模板角色

角色 权限
Viewer 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

自动扩缩政策角色

角色 权限
Viewer 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 为用户分配角色。有关更新和移除 Identity and Access Management (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"
    }
    

控制台

前往 Dataproc 集群 页面,然后点击左侧的方框 来打开权限/标签面板(如果 面板未显示,请点击页面右上角的显示信息面板)。 在“权限”标签页下,选择 Dataproc 角色,在添加主账号框中添加一个或多个账号地址,然后点击添加

Granular IAM 启用的 SDK 命令

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

集群

IAM 角色 命令
Viewer gcloud dataproc clusters describe cluster-name
Editor 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 beta dataproc clusters start cluster-name
gcloud beta dataproc clusters stop cluster-name
Owner 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 beta dataproc clusters start cluster-name
gcloud beta dataproc clusters stop cluster-name
gcloud dataproc clusters get-iam-policy cluster-name
gcloud dataproc clusters set-iam-policy cluster-name

作业

IAM 角色 命令
Viewer gcloud dataproc jobs describe job-id
Editor 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
Owner 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 角色 命令
Viewer gcloud dataproc operations describe operation-id
Editor gcloud dataproc operations delete operation-id
gcloud dataproc operations describe operation-id
gcloud dataproc operations cancel operation-id
Owner 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 角色 命令
Viewer gcloud dataproc workflow-templates describe template-id
Editor 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
Owner 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 角色 命令
Viewer gcloud dataproc autoscaling-policies describe policy-id
Editor 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
Owner 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. 创建集群后,请在集群上设置一项政策,以向主账号授予 Editor 或 Owner 角色(请参阅使用 Dataproc Granular IAM)。
  5. 创建 IAM 自定义角色,使其具备以下权限:
    1. dataproc.jobs.create
    2. dataproc.jobs.get
  6. 在 Google Cloud 控制台中的 IAM 页面上选择或添加主账号,然后选择自定义角色以将其应用于该主账号。