このページでは、サービス アカウントと VM アクセス スコープの説明と、Dataproc でそれらを使用する方法が記載されています。
サービス アカウントとは
サービス アカウントは、Compute Engine 仮想マシン(VM)インスタンスで稼働するサービスやアプリケーションが他の Google Cloud APIs との対話に使用できる特殊なアカウントです。アプリケーションは、サービス アカウントの認証情報を使用して一連の API に対する認証を得て、サービス アカウントに付与された権限の範囲内で VM に対するアクションを実行できます。
Dataproc サービス アカウント
下に示すサービス アカウントには、クラスタが存在するプロジェクトで Dataproc アクションを実行するために必要な権限があります。
Dataproc VM サービス アカウント: Dataproc クラスタ内の VM は、Cloud Storage と BigQuery の間でのデータの読み書きなど、Dataproc データプレーンのオペレーションにこのサービス アカウントを使用します(Dataproc VM サービス アカウント(データプレーン ID)をご覧ください)。VM サービス アカウントを指定しない限り、Compute Engine のデフォルトのサービス アカウント(
[project-number]-compute@developer.gserviceaccount.com
)が Dataproc VM サービス アカウントとして使用されます。Dataproc ワーカーのロールは、Dataproc での操作に必要な最小限の権限を VM サービス アカウントに付与します。BigQuery などの Google Cloud リソースへのデータの読み取りと書き込みの権限を付与するには、追加のロールが必要です。
Dataproc サービス エージェントのサービス アカウント: Dataproc は、Dataproc ユーザーの Google Cloud プロジェクトに Dataproc サービス エージェントのロールでこのサービス アカウントを作成します。クラスタを作成するとき、このサービス アカウントをカスタム VM サービス アカウントに置き換えることはできません。 このサービス エージェント アカウントを使用すれば、クラスタ VM の作成、更新、削除などの Dataproc コントロール プレーンの処理を実行できます(Dataproc サービス エージェント(コントロール プレーン ID)をご覧ください)。
デフォルトでは、Dataproc は
service-[project-number]@dataproc-accounts.iam.gserviceaccount.com
をサービス エージェント アカウントとして使用します。そのサービス アカウントに権限がない場合、Dataproc は Google API サービス エージェント アカウント([project-number]@cloudservices.gserviceaccount.com
)を使用して、コントロール プレーン オペレーションを行います。
共有 VPC ネットワーク: クラスタで共有 VPC ネットワークを使用する場合、共有 VPC 管理者は、上記のサービス アカウントの両方に、共有 VPC ホスト プロジェクト用のネットワーク ユーザーのロールを付与する必要があります。詳しくは以下をご覧ください。
Dataproc VM アクセス スコープ
VM アクセス スコープを使用して、VM インスタンスに対する API へのアクセスを許可または制限します。VM サービス アカウントと連携して、API アクセスを決定します。
たとえば、クラスタ VM に https://www.googleapis.com/auth/storage-full
スコープのみが付与されている場合、クラスタ VM 上で実行されるアプリケーションは Cloud Storage API を呼び出すことはできますが、実行している VM サービス アカウントに幅広い権限付きの BigQuery のロールが付与されている場合であっても、BigQuery に対するリクエストを作成することはできません。
デフォルトの Dataproc VM スコープ。クラスタの作成時にスコープが指定されていない場合(gcloud dataproc cluster create --scopes を参照)、Dataproc VM には次のデフォルトのスコープセットが適用されます。
https://www.googleapis.com/auth/bigquery https://www.googleapis.com/auth/bigtable.admin.table https://www.googleapis.com/auth/bigtable.data https://www.googleapis.com/auth/cloud.useraccounts.readonly https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/logging.write
クラスタの作成時にスコープを指定した場合、クラスタ VM には指定したスコープおよび(指定しない場合でも)次の最小の必要なスコープセットが設定されます。
https://www.googleapis.com/auth/cloud.useraccounts.readonly https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/logging.write
カスタム VM サービス アカウントを使用してクラスタを作成する
クラスタを作成するときに、デフォルトの VM サービス アカウントの代わりに、クラスタが Dataproc データ プレーン オペレーションに使用するカスタム VM サービス アカウントを指定できます(クラスタの作成後に VM サービス アカウントを変更することはできません)。IAM ロールが割り当てられた VM サービス アカウントを使用すると、クラスタに対してプロジェクト リソースに対するきめ細かいアクセス権を付与できます。
準備手順
クラスタが作成されるプロジェクト内にカスタム VM サービス アカウントを作成します。
カスタム VM サービス アカウントに、プロジェクトに対する Dataproc ワーカーのロールと、BigQuery のリーダーとライターのロールなどのジョブに必要な追加のロールを付与します(Dataproc の権限と IAM のロールを参照)。
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
Worker
のロールを付与する代わりに、ワーカーロールの権限を含み、storage.objects.*
の権限を制限するカスタムのロールをサービス アカウントに付与できます。- カスタムロールでは、少なくとも Dataproc ステージング バケットと一時バケット内のオブジェクトおよびクラスタ上で実行されるジョブに必要な追加のバケットの VM サービス アカウントに
storage.objects.create
権限とstorage.objects.get
権限を付与する必要があります。
- カスタムロールでは、少なくとも Dataproc ステージング バケットと一時バケット内のオブジェクトおよびクラスタ上で実行されるジョブに必要な追加のバケットの VM サービス アカウントに
クラスタを作成する
- プロジェクトにクラスタを作成します。
gcloud コマンド
gcloud dataproc clusters 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: VM サービス アカウントを含むプロジェクトの Google Cloud プロジェクト ID。これは、クラスタが作成されるプロジェクトの ID か、別のクラスタにカスタム VM サービス アカウントを持つクラスタを作成している場合は、別のプロジェクトの ID になります。
- SCOPE: クラスタ VM インスタンスのアクセス スコープ(例:
https://www.googleapis.com/auth/cloud-platform
)。
REST API
clusters.create
API リクエストの一部として GceClusterConfig
を完了する際には、次のフィールドを設定します。
serviceAccount
: 別のプロジェクトの VM サービス アカウントを使用している場合を除き、サービス アカウントはクラスタが作成されるプロジェクト内に配置されます。serviceAccountScopes
: クラスタ VM インスタンスのアクセス スコープを指定します(例:https://www.googleapis.com/auth/cloud-platform
)。
コンソール
Google Cloud コンソールでの Dataproc VM サービス アカウントの設定はサポートされていません。クラスタを作成するときに、Google Cloud コンソールの Dataproc の [クラスタの作成] ページの [セキュリティの管理] パネルの [プロジェクト アクセス] セクションで [このクラスタのクラウド プラットフォーム スコープを有効にする] をクリックして、クラスタ VM の cloud-platform
アクセス スコープを設定できます。

別のプロジェクトのカスタム VM サービス アカウントを使用してクラスタを作成する
クラスタを作成するときに、デフォルトの VM サービス アカウントを使用する代わりに、クラスタが Dataproc データ プレーン オペレーションに使用するカスタム VM サービス アカウントを指定できます(クラスタの作成後にカスタム VM サービス アカウントを指定することはできません)。IAM ロールが割り当てられたカスタム VM サービス アカウントを使用すると、プロジェクト リソースに対するきめ細かいアクセス権をクラスタに付与できます。
準備手順
サービス アカウント プロジェクト(カスタム VM サービス アカウントが存在するプロジェクト):
Dataproc API を有効にします。
メール アカウント(クラスタを作成するユーザー)に、サービス アカウント プロジェクトのサービス アカウント ユーザーのロールを付与します。また、より細かく制御する場合は、サービス アカウント プロジェクトの 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 サービス アカウントに、クラスタ プロジェクトに対する Dataproc ワーカーのロールを付与します。
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"
クラスタ プロジェクトの Dataproc サービス エージェント サービス アカウントに、サービス アカウント プロジェクトの(より細かく制御する場合はサービス アカウント プロジェクトのカスタム VM サービス アカウントの)サービス アカウント ユーザーとサービス アカウント トークン作成者のロールを付与します。これにより、クラスタ プロジェクトの Dataproc サービス エージェント サービス アカウントで、サービス アカウント プロジェクトのカスタム Dataproc VM サービス アカウントのトークンを作成できるようになります。
詳細: プロジェクト レベルでロールを付与する場合はプロジェクト、フォルダ、組織へのアクセスを管理するを、サービス アカウント レベルでサービス アカウントへロールを付与する場合はサービス アカウントに対するアクセス権の管理を参照してください。
gcloud CLI の例:
- 次のサンプル コマンドは、クラスタ プロジェクトの Dataproc サービス エージェント サービス アカウントに、プロジェクト レベルでサービス アカウント ユーザーとサービス アカウント トークン作成者のロールを付与します。
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"
- 次のサンプル コマンドは、クラスタ プロジェクトの Dataproc サービス エージェント サービス アカウントに、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 サービス アカウントの)サービス アカウント トークン作成者のロールを付与します。これにより、クラスタ プロジェクトの Compute Engine サービス エージェント サービス アカウントに、サービス アカウント プロジェクトのカスタム Dataproc VM サービス アカウントのトークンを作成する権限が付与されます。
詳細: プロジェクト レベルでロールを付与する場合はプロジェクト、フォルダ、組織へのアクセスを管理するを、サービス アカウント レベルでサービス アカウントへロールを付与する場合はサービス アカウントに対するアクセス権の管理を参照してください。
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"
クラスタを作成する
次のステップ
- サービス アカウント
- Dataproc の権限と IAM ロール
- Dataproc のプリンシパルと役割
- Dataproc サービス アカウント ベースの安全なマルチテナンシー
- Dataproc 個人用クラスタ認証
- Dataproc Granular IAM