データプレーン 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-driver[spark-driver] KSA(Spark ドライバを実行):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]spark-executor[spark-executor] KSA(Spark エグゼキュータを実行):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]
ロールを割り当てる
例:
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 名前空間は、GKE クラスタ上の Managed Service for Apache Spark の 名前です。
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.nodepool.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 に