データプレーン ID
GKE on Dataproc は GKE Workload Identity を使用して、GKE クラスタの Dataproc 内の Pod がデフォルトの Dataproc VM サービス アカウント(データプレーン ID)の権限で操作できるようにします。Workload Identity には、GKE 仮想クラスタの Dataproc で使用される GSA の IAM ポリシーを更新するために、次の権限が必要です。
compute.projects.get
iam.serviceAccounts.getIamPolicy
iam.serviceAccounts.setIamPolicy
GKE Workload Identity は、次の GKE サービス アカウント(KSA)を Dataproc VM サービス アカウントにリンクします。
agent
KSA(Dataproc コントロール プレーンとやり取り):
serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
spark-driver
KSA(Spark ドライバを実行):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
spark-executor
KSA(Spark エグゼキュータを実行):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]
ロールを割り当てる
Dataproc VM サービス アカウントに権限を付与して、spark-driver
と spark-executor
がプロジェクト リソース、データソース、データシンク、ワークロードに必要なサービスなどにアクセスできるようにします。
例:
次のコマンドは、デフォルトの Dataproc VM サービス アカウントにロールを割り当てて、GKE クラスタ VM 上の Dataproc で実行されている Spark ワークロードがプロジェクト内の Cloud Storage バケットと BigQuery データにアクセスできるようにします。
gcloud projects add-iam-policy-binding \ --role=roles/storage.objectAdmin \ --role=roles/bigquery.dataEditor \ --member="project-number-compute@developer.gserviceaccount.com" \ "${PROJECT}"
カスタム IAM 構成
GKE on Dataproc は GKE Workload Identity を使用して、デフォルトの Dataproc VM サービス アカウント(データプレーン ID)を 3 つの GKE サービス アカウント(KSA)にリンクします。
別の Google サービス アカウント(GSA)を作成して使用し、KSA にリンクするには:
GSA を作成します(サービス アカウントの作成と管理をご覧ください)。
gcloud CLI の例:
注:gcloud iam service-accounts create "dataproc-${USER}" \ --description "Used by Dataproc on GKE workloads."
- この例では、GSA 名を「dataproc-${USER}」に設定していますが、別の名前を使用することもできます。
環境変数を設定する
注:PROJECT=project-id \ DPGKE_GSA="dataproc-${USER}@${PROJECT}.iam.gserviceaccount.com" DPGKE_NAMESPACE=GKE namespace
DPGKE_GSA
: これらの例では、GSA のメールアドレスを含む変数の名前としてDPGKE_GSA
を設定しています。別の変数名を設定して使用できます。DPGKE_NAMESPACE
: デフォルトの GKE Namespace は、Dataproc on GKE クラスタの名前です。
GKE クラスタで Dataproc を作成する際に、Dataproc がデフォルトの GSA の代わりに GSA を使用するように、次のプロパティを追加します。
--properties "dataproc:dataproc.gke.agent.google-service-account=${DPGKE_GSA}" \ --properties "dataproc:dataproc.gke.spark.driver.google-service-account=${DPGKE_GSA}" \ --properties "dataproc:dataproc.gke.spark.executor.google-service-account=${DPGKE_GSA}" \
Run the following commands to assign necessary Workload Identity permissions to the service accounts:
- Assign your GSA the
dataproc.worker
role to allow it to act as agent:gcloud projects add-iam-policy-binding \ --role=roles/dataproc.worker \ --member="serviceAccount:${DPGKE_GSA}" \ "${PROJECT}"
agent
KSA にiam.workloadIdentityUser
ロールを割り当て、GSA として機能できるようにします。gcloud iam service-accounts add-iam-policy-binding \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]" \ "${DPGKE_GSA}"
spark-driver
KSA にiam.workloadIdentityUser
ロールを付与して、GSA として機能できるようにします。gcloud iam service-accounts add-iam-policy-binding \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]" \ "${DPGKE_GSA}"
spark-executor
KSA にiam.workloadIdentityUser
ロールを付与して、GSA として機能できるようにします。gcloud iam service-accounts add-iam-policy-binding \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]" \ "${DPGKE_GSA}"
- Assign your GSA the