Dataproc サービスを使用してクラスタを作成し、クラスタでジョブを実行すると、サービスはプロジェクトで必要な Dataproc 権限と IAM 役割を設定し、タスクの完了に必要な Google Cloud リソースにアクセスして使用します。ただし、複数のプロジェクトにわたって作業(たとえば、別のプロジェクトのデータにアクセスするなど)を行う場合、プロジェクトをまたぐリソースにアクセスするための役割と権限を設定する必要があります。
複数のプロジェクトにわたる作業の実現に役立つように、このドキュメントでは、Dataproc サービスを使用する各種のプリンシパルと、Google Cloud リソースにアクセスして使用するためにプリンシパルが必要とするロールおよび関連する権限を示します。
Dataproc API ユーザー(エンドユーザー ID)
例: username@example.com
これは、Dataproc サービスを呼び出すエンドユーザーです。通常、エンドユーザーは個人ですが、API クライアントや、Compute Engine、Cloud Functions、Cloud Composer などの他の Google Cloud サービスから Dataproc が呼び出された場合は、サービス アカウントにすることもできます。
関連する役割と権限:
- 役割: プロジェクト編集者、Dataproc 編集者
- 権限: dataproc.*.**
注意事項:
- Dataproc API が送信したジョブは root として実行されます。
- クラスタの作成時に
--metadata=block-project-ssh-keys=true
を設定して明示的にブロックしない限り、Dataproc クラスタはプロジェクト全体で Compute Engine SSH メタデータを継承します(クラスタ メタデータを参照してください)。 - gcloud compute ssh で Dataproc クラスタに接続し、コマンドラインからジョブを送信した場合、ジョブはログインしているユーザー名で実行されますが、デフォルトでは、この認証は VM 内で適用されません。
- プロジェクト レベルの SSH ユーザーごとに HDFS ユーザー ディレクトリが作成されます。これらの HDFS ディレクトリはクラスタのデプロイ時に作成されます。既存のクラスタに新しい HDFS ディレクトリが作成されることはありません。
Dataproc サービス エージェント(コントロール プレーン ID)
例: service-project-number@dataproc-accounts.iam.gserviceaccount.com
Dataproc は、Dataproc ユーザーの Google Cloud プロジェクトに Dataproc サービス エージェントの役割でこのサービス アカウントを作成します。クラスタを作成するとき、このサービス アカウントをユーザー指定のサービス アカウントに置き換えることはできません。別のプロジェクトで共有 VPC ネットワークを使用するクラスタを作成する場合を除き、このサービス アカウントを構成する必要はありません。
このサービス アカウントは、以下を含む幅広い一連のシステム オペレーションを実行するために使用されます。
- イメージ、ファイアウォール、Dataproc 初期化アクション、Cloud Storage バケットなどのリソースの構成を確認するための取得と一覧表示のオペレーション
- Dataproc ステージング バケットの自動作成(ステージング バケットがユーザーによって指定されていない場合)
- ステージング バケットへのクラスタ構成メタデータの書き込み
- VM インスタンス、インスタンス グループ、インスタンス テンプレートなどの Compute Engine リソースの作成
関連するエラー: 「サービス アカウントには、リソースの読み取りまたは一覧表示のアクセス権がありません。」
関連する役割と権限:
- 役割: Dataproc サービス エージェント
Dataproc VM サービス アカウント(データプレーン ID)
例: project-number-compute@developer.gserviceaccount.com
Dataproc VM は、このサービス アカウントとして実行されます。ユーザージョブには、このサービス アカウントの権限が付与されます。アプリケーション コードは、Dataproc ワーカー VM でこのサービス アカウントの下で実行されます。
gcloud dataproc clusters create
コマンドでオプションの --service-account
フラグを使用してユーザーが管理するサービス アカウントを指定できます。または Dataproc clusters.create API リクエストの一部として GceClusterConfig.serviceAccount フィールドを指定することもできます。クラスタの作成時に、ユーザーが管理するサービス アカウントを指定しない場合は、上記の例に示した Compute Engine のデフォルトのサービス アカウントが使用されます。
VM サービス アカウントには、次の操作を行うための権限が必要です。
- Dataproc コントロール プレーンとの通信
- Dataproc ステージング バケットへの読み取りと書き込み
VM サービス アカウントには、ジョブの要件に応じて、以下の操作を行うための権限が必要になります。
- Cloud Storage、BigQuery、Cloud Logging、その他の Google Cloud リソースへの読み取りと書き込み
関連する役割と権限:
- Dataproc の役割: Dataproc ワーカー
- Cloud Storage の役割: storage.objectAdmin、storage.admin
- BigQuery の役割: bigquery.dataEditor、bigquery.dataViewer