データプレーン ID
GKE 上の Managed Service for Apache Spark は GKE Workload Identity を使用して、GKE クラスタの Managed Service for Apache Spark 内の Pod がデフォルトの Managed Service for Apache Spark VM サービス アカウント(データプレーン ID)の権限で操作できるようにします。Workload Identity には、GKE 仮想クラスタの Managed Service for Apache Spark で使用される GSA の IAM ポリシーを更新するために、次の権限が必要です。
compute.projects.getiam.serviceAccounts.getIamPolicyiam.serviceAccounts.setIamPolicy
GKE Workload Identity は、次の GKE サービス アカウント(KSA)を Managed Service for Apache Spark VM サービス アカウントにリンクします。
agentKSA(Managed Service for Apache Spark コントロール プレーンとやり取り):
serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]spark-driverKSA(Spark ドライバを実行):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]spark-executorKSA(Spark エグゼキュータを実行):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]
ロールを割り当てる
Managed Service for Apache Spark VM サービス アカウントに権限を付与して、spark-driver と spark-executor がプロジェクト リソース、データソース、データシンク、ワークロードに必要なサービスなどにアクセスできるようにします。
例:
次のコマンドは、デフォルトの Managed Service for Apache Spark VM サービス アカウントにロールを割り当てて、GKE クラスタ VM 上の Managed Service for Apache Spark で実行されている 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 上の Managed Service for Apache Spark は、GKE Workload Identity を使用して、デフォルトの Managed Service for Apache Spark VM サービス アカウント(データプレーン ID)を 3 つの GKE サービス アカウント(KSA)にリンクします。
別の Google サービス アカウント(GSA)を作成して使用し、KSA にリンクするには:
GSA を作成します(サービス アカウントの作成と管理をご覧ください)。
gcloud CLI の例:
注:gcloud iam service-accounts create "dataproc-${USER}" \ --description "Used by Managed Service for Apache Spark on GKE workloads."- この例では、GSA 名を「dataproc-${USER}」に設定していますが、別の名前を使用することもできます。
環境変数を設定する:
注:PROJECT=project-id \ DPGKE_GSA="dataproc-${USER}@${PROJECT}.iam.gserviceaccount.com" DPGKE_NAMESPACE=GKE namespaceDPGKE_GSA: これらの例では、GSA のメールアドレスを含む変数の名前としてDPGKE_GSAを設定しています。別の変数名を設定して使用できます。DPGKE_NAMESPACE: デフォルトの GKE 名前空間は、Managed Service for Apache Spark on GKE クラスタの名前です。
GKE クラスタで Managed Service for Apache Spark を作成する際に、Managed Service for Apache Spark がデフォルトの 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}" \次のコマンドを実行して、必要な Workload Identity 権限をサービス アカウントに割り当てます。
- GSA に
dataproc.workerロールを割り当て、エージェントとして機能できるようにします。gcloud projects add-iam-policy-binding \ --role=roles/dataproc.worker \ --member="serviceAccount:${DPGKE_GSA}" \ "${PROJECT}" agentKSA に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-driverKSA に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-executorKSA に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}"
- GSA に