Managed Service for Apache Spark サービス アカウント

このページでは、サービス アカウントと VM アクセス スコープの説明と、Managed Service for Apache Spark でそれらを使用する方法が記載されています。

2020 年 8 月 3 日以降のセキュリティ要件: Managed Service for Apache Spark ユーザーには、Managed Service for Apache Spark リソースをデプロイするために、サービス アカウントの ActAs 権限が必要です。たとえば、クラスタの作成や、ジョブの送信です。この権限は、 サービス アカウントのユーザー ロールに含まれています。必要な Managed Service for Apache Spark ロールについては、サービス アカウントの認証のロール をご覧ください。

既存の Managed Service for Apache Spark ユーザーのオプトイン: 2020 年 8 月 3 日の時点の既存の Managed Service for Apache Spark ユーザーは、このセキュリティ要件にオプトインできます( Managed Service for Apache Spark、Dataflow、Cloud Data Fusion の保護をご覧ください)。

サービス アカウントとは

サービス アカウントは、Compute Engine 仮想マシン(VM)インスタンスで稼働するサービスやアプリケーションが他の Google Cloud API との対話に使用できる特殊なアカウントです。 アプリケーションは、サービス アカウントの認証情報を使用して一連の API に対する認証を得て、サービス アカウントに付与された権限の範囲内で VM に対するアクションを実行できます。

Managed Service for Apache Spark クラスタ サービス アカウント

次のサービス アカウントには、クラスタが存在するプロジェクトで Managed Service for Apache Spark アクションを実行するために必要な権限が必要です。

Managed Service for Apache Spark VM サービス アカウント

Managed Service for Apache Spark クラスタ内の VM は、 Managed Service for Apache Spark データ プレーン オペレーションにサービス アカウントを使用します。 クラスタの作成時にカスタム サービス アカウントを指定しない限り、Compute Engine のデフォルトのサービス アカウント project_number-compute@developer.gserviceaccount.comが VM サービス アカウントとして使用されます。VM サービス アカウントには、Managed Service for Apache Spark データ プレーン オペレーションに必要な権限を含む Managed Service for Apache Spark Worker ロールが必要です。詳細については、 Managed Service for Apache Spark のロールをご覧ください。

VM サービス アカウントのロールを表示する

Managed Service for Apache Spark VM サービス アカウントに付与されているロールを表示するには、次の操作を行います。

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

    IAM に移動

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

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

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

Managed Service for Apache Spark サービス エージェント サービス アカウント

Managed Service for Apache Spark は、 サービス エージェント サービス アカウント service-project_number@dataproc-accounts.iam.gserviceaccount.comを作成し、サービス アカウントに Managed Service for Apache Spark サービス エージェント ロールを Google Cloud プロジェクトで付与します。このサービス アカウントは、クラスタ VM の作成、更新、削除などの Managed Service for Apache Spark コントロール プレーン オペレーションを実行します。クラスタを作成する際に、このサービス アカウントをカスタム VM サービス アカウントで置き換えることはできません。

共有 VPC ネットワーク内のサービス エージェント サービス アカウントへのロール付与

Managed Service for Apache Spark クラスタが共有 VPC ネットワークを使用する場合、共有 VPC 管理者は、 Managed Service for Apache Spark サービス エージェント サービス アカウント に、 ネットワーク ユーザー のロールを共有 VPC ホスト プロジェクトに付与する必要があります。詳しくは以下をご覧ください。

カスタムの VM サービス アカウントを使用してクラスタを作成する

クラスタを作成するときに、デフォルトのVM サービス アカウントの代わりに、クラスタが Managed Service for Apache Spark データ プレーン オペレーションに使用するカスタム VM サービス アカウント を指定できます(クラスタの作成後は VM サービス アカウントを変更できません)。IAM ロールが割り当てられた VM サービス アカウントを使用すると、クラスタにプロジェクト リソースへのきめ細かいアクセス権を指定できます。

予備の手順

  1. カスタム VM サービス アカウントを作成します クラスタが作成されるプロジェクト内に。

  2. カスタム VM サービス アカウントに、プロジェクトに対する Managed Service for Apache Spark ワーカー のロールと、 BigQuery リーダーとライター のロールなどのジョブに必要な追加のロールを付与します(Managed Service for Apache Spark のロールを参照)。

    gcloud CLI の例:

    • 次のサンプル コマンドでは、クラスタ プロジェクトのカスタム VM サービス アカウントに Dataproc ワーカーのロールをプロジェクト レベルで付与します。
    gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role="roles/dataproc.worker"
     
    • カスタムロールを検討する: サービス アカウントに事前定義された Dataproc ワーカーロール(roles/dataproc.worker)を付与する代わりに、 ワーカーロールの権限を含み、 storage.objects.* の権限を制限するカスタムのロールを サービス アカウントに付与できます。

クラスタを作成する

  • プロジェクトにクラスタを作成します。

gcloud コマンド

gcloud dataproc クラスタの create コマンドを使用して、カスタム VM サービス アカウントでクラスタを作成します。

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --scopes=SCOPE

次のように置き換えます。

REST API

clusters.create API リクエストの一部として GceClusterConfig を完了する際は、次のフィールドを設定します。

コンソール

コンソールでの Managed Service for Apache Spark VM サービス アカウント の設定はサポートされていません。 Google Cloud クラスタを作成するときに、 コンソールの Managed Service for Apache Spark の [クラスタの作成] ページの [セキュリティの管理] パネルにある [プロジェクト アクセス] セクションで "このクラスタのクラウド プラットフォーム スコープを有効にする" をクリックすると、クラスタ VM に cloud-platform アクセス スコープ を設定できます。 Google Cloud

別のプロジェクトの VM サービス アカウントを使用してクラスタを作成する

クラスタを作成するときに、デフォルトのVM サービス アカウントを使用する代わりに、クラスタが Managed Service for Apache Spark データ プレーン オペレーションに使用するカスタム VM サービス アカウント を指定できます(クラスタの作成後にカスタム VM サービス アカウントを指定することはできません)。IAM ロールが割り当てられたカスタム VM サービス アカウントを使用すると、クラスタにプロジェクト リソースへのきめ細かいアクセス権を指定できます。

予備の手順

  1. サービス アカウント プロジェクト(カスタム VM サービス アカウントが存在するプロジェクト):

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

    2. Dataproc API を有効にします。

      API を有効にするために必要なロール

      API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。

      API の有効化

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

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

    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 の形式で入力します。

  3. カスタム VM サービス アカウントに、クラスタ プロジェクトに対する Managed Service for Apache Spark ワーカー のロールを付与します。

    gcloud CLI の例:

    gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --role="roles/dataproc.worker"
     
  4. クラスタ プロジェクトの Managed Service for Apache Spark サービス エージェント サービス アカウントに、サービス アカウント プロジェクトの(より細かく制御する場合はサービス アカウント プロジェクトのカスタム VM サービス アカウントの)サービス アカウント ユーザーサービス アカウント トークン作成者のロールを付与します。これにより、クラスタ プロジェクトの Dataproc サービス エージェント サービス アカウントに、サービス アカウント プロジェクトのカスタム Dataproc VM サービス アカウント用のトークンを作成することを許可します。

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

    gcloud CLI の例:

    • 次のサンプル コマンドでは、クラスタ プロジェクトの Managed Service for Apache Spark サービス エージェント サービス アカウントに、サービス アカウント ユーザーとサービス アカウント トークン作成者のロールをプロジェクト レベルで付与します。
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountUser"
     
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
    
    • 次のサンプル コマンドでは、クラスタ プロジェクトの Managed Service for Apache Spark サービス エージェント サービス アカウントに、サービス アカウント ユーザーとサービス アカウント トークン作成者のロールを VM サービス アカウント レベルで付与します。
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_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-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
    
  5. クラスタ プロジェクトの Compute Engine サービス エージェント サービス アカウントに、サービス アカウント プロジェクトの(より細かく制御するには、サービス アカウント プロジェクトのカスタム VM サービス アカウントの) サービス アカウント トークン作成者 のロールを付与します。 これにより、サービス アカウント プロジェクト内のカスタム Dataproc VM サービス アカウント用のトークンを作成する権限を、クラスタ プロジェクトの Compute Agent サービス エージェント サービス アカウントに付与します。

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

    gcloud CLI の例:

    • 次のサンプル コマンドでは、クラスタ プロジェクトの Compute Engine サービス エージェント サービス アカウントに、サービス アカウント トークン作成者のロールをプロジェクト レベルで付与します。
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
     
    • 次のサンプル コマンドでは、クラスタ プロジェクトの Compute Engine サービス エージェント サービス アカウントに、サービス アカウント トークン作成者のロールを VM サービス アカウント レベルで付与します。
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
     

クラスタを作成する

次のステップ