Google Kubernetes Engine の Identity and Access Management のロールと ID

データプレーン 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.get
  • iam.serviceAccounts.getIamPolicy
  • iam.serviceAccounts.setIamPolicy

GKE Workload Identity は、次の GKE サービス アカウント(KSA)を Managed Service for Apache Spark VM サービス アカウントにリンクします。

  1. agent KSA(Managed Service for Apache Spark コントロール プレーンとやり取り):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
  2. spark-driver KSA(Spark ドライバを実行):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
  3. spark-executor KSA(Spark エグゼキュータを実行):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]

ロールを割り当てる

Managed Service for Apache Spark VM サービス アカウントに権限を付与して、spark-driverspark-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 にリンクするには:

  1. GSA を作成します(サービス アカウントの作成と管理をご覧ください)。

    gcloud CLI の例:

    gcloud iam service-accounts create "dataproc-${USER}" \
        --description "Used by Managed Service for Apache Spark on GKE workloads."
    
    注:

    • この例では、GSA 名を「dataproc-${USER}」に設定していますが、別の名前を使用することもできます。
  2. 環境変数を設定する:

    PROJECT=project-id \
      DPGKE_GSA="dataproc-${USER}@${PROJECT}.iam.gserviceaccount.com"
      DPGKE_NAMESPACE=GKE namespace
    
    注:

    • DPGKE_GSA: これらの例では、GSA のメールアドレスを含む変数の名前として DPGKE_GSA を設定しています。別の変数名を設定して使用できます。
    • DPGKE_NAMESPACE: デフォルトの GKE 名前空間は、Managed Service for Apache Spark on GKE クラスタの名前です。
  3. 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}" \
    

  4. 次のコマンドを実行して、必要な Workload Identity 権限をサービス アカウントに割り当てます。

    1. GSA に dataproc.worker ロールを割り当て、エージェントとして機能できるようにします。
      gcloud projects add-iam-policy-binding \
          --role=roles/dataproc.worker \
          --member="serviceAccount:${DPGKE_GSA}" \
          "${PROJECT}"
      
    2. 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}"
      

    3. 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}"
      

    4. 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}"