このページでは、サービス アカウントと 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 サービス アカウントに付与されているロールを表示するには、次の操作を行います。
コンソールで、[IAM] ページに移動します。 Google Cloud
[Google 提供のロール付与を含める] をクリックします。
VM サービス アカウントに含まれているロールを表示します。次の図は、Managed Service for Apache Spark がデフォルトで VM サービス アカウントとして使用する Compute Engine のデフォルトのサービス アカウント(
project_number-compute@developer.gserviceaccount.com)に含まれている必要な Dataproc ワーカー ロールを示しています。
サービス アカウントの行に表示されている鉛筆アイコンをクリックして サービス アカウントのロールを付与または削除できます。
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 サービス アカウントを使用すると、クラスタにプロジェクト リソースへのきめ細かいアクセス権を指定できます。
予備の手順
カスタム VM サービス アカウントを作成します クラスタが作成されるプロジェクト内に。
カスタム 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.*の権限を制限するカスタムのロールを サービス アカウントに付与できます。- カスタムロールでは、少なくとも VM サービス アカウントに
storage.objects.create、storage.objects.get、およびstorage.objects.update権限を、 Managed Service for Apache Spark のステージング バケットと一時バケット 内のオブジェクトと、 クラスタ上で実行されるジョブに必要な追加のバケットのオブジェクトに付与する必要があります。
- カスタムロールでは、少なくとも VM サービス アカウントに
クラスタを作成する
- プロジェクトにクラスタを作成します。
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
次のように置き換えます。
- CLUSTER_NAME: クラスタ名。プロジェクト内で一意にする必要があります。 名前は先頭を小文字にする必要があり、51 文字以下の小文字、数字、ハイフンを使用できます。末尾をハイフンにすることはできません。削除されたクラスタの名前は再利用できます。
- REGION: クラスタが配置されるリージョン。
- SERVICE_ACCOUNT_NAME: サービス アカウント名。
- PROJECT_ID: 使用中の Google Cloud VM サービス アカウントが含まれるプロジェクトの プロジェクト ID。これは、クラスタが作成されるプロジェクトの ID か、別のプロジェクトにカスタム VM サービス アカウントを持つクラスタを作成している場合は、別のプロジェクトの ID になります。
- SCOPE: アクセス スコープ(例:
https://www.googleapis.com/auth/cloud-platform)。
REST API
clusters.create API リクエストの一部として GceClusterConfig を完了する際は、次のフィールドを設定します。
serviceAccount: 別のプロジェクトの VM サービス アカウントを使用している場合を除き、サービス アカウントはクラスタが作成されるプロジェクト内に配置されます。serviceAccountScopes: クラスタ VM インスタンスのアクセス スコープを指定します(例:https://www.googleapis.com/auth/cloud-platform)。
コンソール
コンソールでの 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 サービス アカウントを使用すると、クラスタにプロジェクト リソースへのきめ細かいアクセス権を指定できます。
予備の手順
サービス アカウント プロジェクト(カスタム VM サービス アカウントが存在するプロジェクト):
Dataproc API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。
メール アカウント(クラスタを作成するユーザー)に、サービス アカウント プロジェクトの サービス アカウント ユーザーのロール を付与します。また、より細かく制御する場合は、サービス アカウント プロジェクトの 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の形式で入力します。カスタム 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"
クラスタ プロジェクトの 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"
クラスタ プロジェクトの 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"
クラスタを作成する
次のステップ
- サービス アカウント
- Managed Service for Apache Spark の権限と IAM ロール
- Managed Service for Apache Spark のプリンシパルとロール
- Managed Service for Apache Spark サービス アカウント ベースのセキュアなマルチテナンシー
- Managed Service for Apache Spark 個人用クラスタ認証
- Managed Service for Apache Spark のきめ細かい IAM