Dataproc Granular IAM

Dataproc Granular IAM は、クラスタ、ジョブ、オペレーション、ワークフロー テンプレート、自動スケーリング ポリシーの各レベルで権限を付与できる機能です。

たとえば、あるユーザーにはクラスタ閲覧者の役割を付与してプロジェクト内のクラスタを表示できるようにし、別のユーザーにはジョブ編集者の役割を付与してジョブの表示だけでなく更新とキャンセルもできるようにします。 Cloud Dataproc Granular IAM の各役割で有効になる、特定の Google Cloud CLI コマンドの詳細は、Granular IAM で有効になる SDK コマンドをご覧ください。

Dataproc Granular IAM のロールと権限

Dataproc Granular IAM では、Dataproc リソースで次の各権限を持つロールを以下のように設定できます。

クラスタの役割

役割 権限
閲覧者 dataproc.clusters.get
編集者 dataproc.clusters.get
dataproc.clusters.list
dataproc.clusters.delete
dataproc.clusters.update
dataproc.clusters.use
dataproc.clusters.start
dataproc.clusters.stop
オーナー 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

ジョブの役割

役割 権限
閲覧者 dataproc.jobs.get
編集者 dataproc.jobs.get
dataproc.jobs.cancel
dataproc.jobs.delete
dataproc.jobs.update
オーナー dataproc.jobs.get
dataproc.jobs.cancel
dataproc.jobs.delete
dataproc.jobs.update
dataproc.jobs.setIamPolicy
dataproc.jobs.getIamPolicy

オペレーションの役割

役割 権限
閲覧者 dataproc.operations.get
編集者 dataproc.jobs.get
dataproc.operations.cancel
dataproc.operations.delete
オーナー dataproc.jobs.get
dataproc.operations.cancel
dataproc.operations.delete
dataproc.operations.setIamPolicy
dataproc.operations.getIamPolicy

ワークフロー テンプレートの役割

役割 権限
閲覧者 dataproc.workflowTemplates.get
編集者 dataproc.workflowTemplates.get
dataproc.workflowTemplates.delete
dataproc.workflowTemplates.update
オーナー dataproc.workflowTemplates.get
dataproc.workflowTemplates.delete
dataproc.workflowTemplates.update
dataproc.workflowTemplates.setIamPolicy
dataproc.workflowTemplates.getIamPolicy

自動スケーリング ポリシーの役割

役割 権限
閲覧者 dataproc.autoscalingPolicies.get
編集者 dataproc.autoscalingPolicies.get
dataproc.autoscalingPolicies.use
dataproc.autoscalingPolicies.delete
dataproc.autoscalingPolicies.update
オーナー dataproc.autoscalingPolicies.get
dataproc.autoscalingPolicies.use
dataproc.autoscalingPolicies.delete
dataproc.autoscalingPolicies.update
dataproc.autoscalingPolicies.setIamPolicy
dataproc.autoscalingPolicies.getIamPolicy

Dataproc Granular IAM の使用

このセクションでは、Dataproc Granular IAM を使用して、既存の Dataproc リソースに対する役割をユーザーに割り当てる方法について説明します。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. テキスト エディタを使用して、新しいバインディング オブジェクトを bindings 配列に追加し、ユーザーとそのユーザーに対するリソース アクセスの役割を定義します。たとえば、閲覧者ロール(roles/viewer)をユーザー sean@example.com に付与するには、上記の例を変更して新しいバインディング オブジェクトを追加します(下の太字表示)。注: 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. 次のコマンドを実行して、新しい bindings 配列でクラスタのポリシーを更新します(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 サービスから受け取った bindings 配列を囲みます。getIamPolicy レスポンスで受け取った「etag」値を必ず返すようにしてください(etag のドキュメントをご覧ください)。次に、ユーザーと、そのユーザーのクラスタ アクセスのロールを定義する新しいバインディング オブジェクトを bindings 配列に追加します。たとえば、閲覧者ロール(roles/viewer)をユーザー sean@example.com に付与するには、上記の例を変更して新しいバインディング オブジェクトを追加します(下の太字表示)。
    {
      "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"
    }
    

Console

Google Cloud コンソールの [Dataproc クラスタ] ページに移動し、クラスタ名の左側のボックスをクリックして、[権限 / ラベル] パネルを開きます(このパネルが表示されない場合は、ページの右上にある [情報パネルを表示] をクリックします)。[権限] タブで、Dataproc 役割を選択し、[プリンシパルを追加] ボックスに 1 つ以上のアカウント アドレスを追加し、[追加] をクリックします。

Granular IAM で有効になる SDK コマンド

次の表は、各 Granular IAM ロールにより 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 beta dataproc clusters start cluster-name
gcloud beta dataproc clusters stop 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 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 の役割 コマンド
閲覧者 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 を使用してプリンシパル(ユーザー、グループまたはサービス アカウント)が指定されたクラスタにジョブを送信できるようにするには、ユーザーにクラスタでの編集者の役割を付与するだけでなく、プロジェクト レベルで追加の権限を設定する必要があります。指定した Dataproc クラスタでプリンシパルがジョブを送信できるようにするための手順は次のとおりです。

  1. クラスタが Cloud Storage に接続するために使用できる Cloud Storage バケットを作成します。
  2. プリンシパルをバケットレベルのポリシーに追加し、そのメンバーの Storage オブジェクト閲覧者ロールを選択します(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. Google Cloud コンソールの [IAM] ページでメンバーを選択または追加し、続いてカスタムロールを選択してそのプリンシパルに適用します。