Dataproc em papéis e identidade do IAM do GKE

Identidade do plano de dados

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

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

A identidade da carga de trabalho do GKE vincula as seguintes contas de serviço do GKE (KSAs) à 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 à conta de serviço da VM do Dataproc para permitir que o spark-driver e o spark-executor acessem recursos do projeto, fontes de dados, coletores de dados e todos os outros serviços necessários pela sua carga de trabalho.

Exemplo:

O comando a seguir atribui papéis à conta de serviço padrão da VM do Dataproc para permitir que cargas de trabalho do Spark executadas no Dataproc em VMs de cluster do GKE acessem buckets do Cloud Storage e 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 a GSA (consulte 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 da GSA como "dataproc-${USER}", mas você pode usar um 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 GSA. É possível definir e usar um nome de variável diferente.
    • DPGKE_NAMESPACE: o namespace do GKE padrão é o nome do cluster do Dataproc no GKE.
  3. Ao criar o cluster do Dataproc no GKE, adicione as seguintes propriedades para que o Dataproc use sua GSA em vez da GSA 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 para permitir que ela aja como 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 ela atue como 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 ela atue como 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}"