Dataproc サーバーレスのサービス アカウント

このドキュメントでは、Identity and Access Management サービス アカウントのロールを表示および管理する方法について説明します。Dataproc Serverless のバッチ ワークロードまたはインタラクティブ セッションは、バッチ ワークロードを送信するとき、セッションを作成するとき、またはセッション ランタイム テンプレートを作成するときにカスタム サービス アカウントを指定しない限り、Compute Engine のデフォルト サービス アカウントとして実行されます。

必要な Dataproc ワーカーのロール

Dataproc Serverless ワークロード サービス アカウントには、Identity and Access Management の Dataproc Worker ロールが必要です。Dataproc Serverless が使用する Compute Engine のデフォルトのサービス アカウント(project_number-compute@developer.gserviceaccount.com)には、デフォルトでこのロールが付与されています。バッチ ワークロード、セッション、またはセッション テンプレートに独自のサービス アカウントを指定する場合は、サービス アカウントに Dataproc ワーカーのロールを付与する必要があります。BigQuery へのデータの読み取りや書き込みなど、他のオペレーションを行うには、追加のロールが必要な場合があります。

IAM サービス アカウントのロールを表示、管理する

Dataproc Serverless ワークロード サービス アカウントに付与されているロールを表示して管理するには、次の操作を行います。

  1. Google Cloud コンソールで、[IAM] ページに移動します。

    IAM に移動

  2. [Google 提供のロール付与を含みます] をクリックします。

  3. ワークロード サービス アカウントにリストされているロールを表示します。次の図は、Dataproc Serverless がデフォルトでワークロード サービス アカウントとして使用する Compute Engine のデフォルトのサービス アカウント(project_number-compute@developer.gserviceaccount.com)に必要な Dataproc ワーカーロールを示しています。

  4. サービス アカウントの行に表示される鉛筆アイコンをクリックして、サービス アカウントのロールを付与または削除できます。

プロジェクト間のサービス アカウント

バッチ ワークロード プロジェクト(バッチが送信されるプロジェクト)とは異なるプロジェクトのサービス アカウントを使用する Dataproc Serverless バッチ ワークロードを送信できます。このセクションでは、サービス アカウントが存在するプロジェクトを service account project、バッチが送信されるプロジェクトを batch project と呼びます。

プロジェクト間サービス アカウントを使用してバッチ ワークロードを実行する理由考えられる理由の 1 つは、他のプロジェクトのサービス アカウントに、そのプロジェクトのリソースへのきめ細かいアクセス権を提供する IAM ロールが割り当てられている場合です。

設定の手順

  1. サービス アカウント プロジェクトで:

    1. プロジェクト間でのサービス アカウントの接続を有効にする

    2. Enable the Dataproc API.

      Enable the API

    3. メール アカウント(クラスタを作成するユーザー)に、サービス アカウント プロジェクトのサービス アカウント ユーザーのロールを付与します。また、より細かく制御する場合は、サービス アカウント プロジェクトのサービス アカウントのカスタムロールを付与します。

      詳細については、プロジェクト レベルでロールを付与する場合はプロジェクト、フォルダ、組織へのアクセスを管理するを、サービス アカウント レベルでサービス アカウントへロールを付与する場合はサービス アカウントに対するアクセス権の管理を参照してください。

      gcloud CLI の例:

      次のサンプル コマンドでは、ユーザーにサービス アカウントのユーザーロールをプロジェクト レベルで付与します。

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=USER_EMAIL \
          --role="roles/iam.serviceAccountUser"
      

      注:

      • USER_EMAIL: ユーザー アカウントのメールアドレスを user:user-name@example.com の形式で入力します。

      次のサンプル コマンドでは、ユーザーにサービス アカウントのユーザーロールをサービス アカウント レベルで付与します。

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=USER_EMAIL \
          --role="roles/iam.serviceAccountUser"
      

      注:

      • USER_EMAIL: ユーザー アカウントのメールアドレスを user:user-name@example.com の形式で入力します。
    4. サービス アカウントに、バッチ プロジェクトに対する Dataproc ワーカーのロールを付与します。

      gcloud CLI の例:

      gcloud projects add-iam-policy-binding BATCH_PROJECT_ID \
          --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
          --role="roles/dataproc.worker"
      
  2. バッチ プロジェクトで、次の操作を行います。

    1. Dataproc サービス エージェント サービス アカウントに、サービス アカウント プロジェクトの(より細かく制御する場合はサービス アカウント プロジェクトのサービス アカウントの)サービス アカウント ユーザーサービス アカウント トークン作成者のロールを付与します。これにより、バッチ プロジェクトの Dataproc サービス エージェント サービス アカウントに、サービス アカウント プロジェクトのサービス アカウント用のトークンを作成することを許可します。

      詳細については、プロジェクト レベルでロールを付与する場合はプロジェクト、フォルダ、組織へのアクセスを管理するを、サービス アカウント レベルでサービス アカウントへロールを付与する場合はサービス アカウントに対するアクセス権の管理を参照してください。

      gcloud CLI の例:

      次のコマンドは、バッチ プロジェクトの Dataproc サービス エージェント サービス アカウントに、サービス アカウント ユーザーとサービス アカウント トークン作成者のロールをプロジェクト レベルで付与します。

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser"
      
      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      次のサンプル コマンドでは、バッチ プロジェクトの Dataproc サービス エージェント サービス アカウントに、サービス アカウント レベルでサービス アカウント ユーザーとサービス アカウント トークン作成者のロールを付与します。

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser"
      
      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      
    2. バッチ プロジェクトの Compute Engine サービス エージェント サービス アカウントに、サービス アカウント プロジェクトの(より細かく制御するには、サービス アカウント プロジェクトのサービス アカウントの)サービス アカウント トークン作成者のロールを付与します。これにより、サービス アカウント プロジェクトのサービス アカウント用のトークンを作成する権限を、バッチ プロジェクトの Compute Agent サービス エージェント サービス アカウントに付与します。

      詳細については、プロジェクト レベルでロールを付与する場合はプロジェクト、フォルダ、組織へのアクセスを管理するを、サービス アカウント レベルでサービス アカウントへロールを付与する場合はサービス アカウントに対するアクセス権の管理を参照してください。

      gcloud CLI の例:

      次のサンプル コマンドでは、バッチ プロジェクトの Compute Engine サービス エージェント サービス アカウントに、サービス アカウント トークン作成者のロールをプロジェクト レベルで付与します。

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      次のサンプル コマンドでは、クラスタ プロジェクトの Compute Engine サービス エージェント サービス アカウントに、サービス アカウント レベルでサービス アカウント トークン作成者のロールを付与します。

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

バッチ ワークロードを送信する

設定手順が完了したら、バッチ ワークロードを送信できます。バッチ ワークロードに使用するサービス アカウントとして、サービス アカウント プロジェクトのサービス アカウントを指定してください。