Identidade e papéis do IAM do Dataproc no GKE

Identidade do plano de dados

O Dataproc no GKE usa Identidade da carga de trabalho do GKE para permitir que os pods no cluster do Dataproc no GKE atuem com a autoridade do padrão Conta de serviço da VM do Dataproc (identidade do plano de dados). A Identidade da carga de trabalho requer as seguintes permissões para atualizar políticas do IAM no GSA usado pelo Dataproc no GKE cluster virtual:

  • compute.projects.get
  • iam.serviceAccounts.getIamPolicy
  • iam.serviceAccounts.setIamPolicy

A identidade da carga de trabalho do GKE vincula Contas de serviço do GKE (KSAs, na sigla em inglês) para a conta de serviço da VM do Dataproc:

  1. agent KSA (interage com o plano de controle do Dataproc):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
  2. spark-driver KSA (executa drivers do Spark):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
  3. spark-executor KSA (executa executores do Spark):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]

Atribuir papéis

Conceda permissões ao Conta de serviço da VM do Dataproc para permitir que spark-driver e spark-executor acessem os recursos do projeto. fontes de dados, coletores de dados e outros serviços exigidos pela carga de trabalho.

Exemplo:

O comando a seguir atribui papéis conta de serviço de VM padrão do Dataproc para permitir que cargas de trabalho do Spark sejam executadas as VMs do cluster do Dataproc no GKE para acessar buckets do Cloud Storage e os conjuntos de dados do BigQuery no projeto.

gcloud projects add-iam-policy-binding \
    --role=roles/storage.objectAdmin \
    --role=roles/bigquery.dataEditor \
    --member="project-number-compute@developer.gserviceaccount.com" \
    "${PROJECT}"

Configuração personalizada do IAM

O Dataproc no GKE usa a Identidade da carga de trabalho do GKE para vincular a conta de serviço de VM do Dataproc (identidade do plano de dados) às três contas de serviço do GKE (KSAs).

Para criar e usar uma conta de serviço do Google (GSA) diferente para vincular às KSAs:

  1. Crie um Google Search (consulte Como criar e gerenciar contas de serviço).

    Exemplo da CLI gcloud:

    gcloud iam service-accounts create "dataproc-${USER}" \
        --description "Used by Dataproc on GKE workloads."
    
    Observações:

    • O exemplo define o nome do GSA como "dataproc-${USER}", mas é possível usar uma nome diferente.
  2. Defina as variáveis de ambiente:

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

    • DPGKE_GSA: os exemplos definem e usam DPGKE_GSA como o nome da variável que contém o endereço de e-mail do seu GSA. É possível definir e usar um método nome da variável.
    • DPGKE_NAMESPACE: o padrão Namespace do GKE é o nome do seu cluster do Dataproc no GKE.
  3. Ao criar o cluster do Dataproc no GKE, adicione as seguintes propriedades Para que o Dataproc use o GSA em vez do padrão:

    --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. Run the following commands to assign necessary Workload Identity permissions to the service accounts:

    1. 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}"
      
    2. Atribua o papel iam.workloadIdentityUser à KSA agent permitir que ele atue como seu 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. Conceda à KSA spark-driver o papel iam.workloadIdentityUser para permitir que ele atue como seu 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. Conceda à KSA spark-executor o papel iam.workloadIdentityUser para permitir que ele atue como seu 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}"