Funções de IAM e identidade do Dataproc no GKE

Identidade do plano de dados

O Dataproc no GKE usa o Workload Identity do GKE para permitir que os pods no cluster do Dataproc no GKE atuem com a autoridade da conta de serviço da VM do Dataproc predefinida (identidade do plano de dados). O Workload Identity requer as seguintes autorizações para atualizar as políticas da IAM na GSA usada pelo seu cluster virtual do Dataproc no GKE:

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

A identidade de carga de trabalho do GKE associa 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 controlo do Dataproc):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
  2. spark-driver KSA (runs Spark drivers):
    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 funções

Conceda autorizações à conta de serviço da VM do Dataproc para permitir que o spark-driver e o spark-executor acedam aos recursos do projeto, às origens de dados, aos destinos de dados e a quaisquer outros serviços exigidos pela sua carga de trabalho.

Exemplo:

O comando seguinte atribui funções à conta de serviço da VM do Dataproc predefinida para permitir que as cargas de trabalho do Spark em execução nas VMs do cluster do Dataproc no GKE acedam aos contentores do Cloud Storage e aos 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 da IAM

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

Para criar e usar uma conta de serviço Google (GSA) diferente para associar aos KSAs:

  1. Crie a GSA (consulte o artigo Criar e gerir contas de serviço).

    Exemplo da CLI gcloud:

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

    • O exemplo define o nome da GSA como "dataproc-${USER}", mas pode usar um nome diferente.
  2. Defina variáveis de ambiente:

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

    • DPGKE_GSA: os exemplos definem e usam DPGKE_GSA como o nome da variável que contém o endereço de email do seu GSA. Pode definir e usar um nome de variável diferente.
    • DPGKE_NAMESPACE: O espaço de nomes do GKE predefinido é o nome do seu cluster do Dataproc no GKE.
  3. Quando criar o cluster do Dataproc no GKE, adicione as seguintes propriedades para que o Dataproc use a sua GSA em vez da GSA predefinida:

    --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 a função iam.workloadIdentityUser ao KSA agent para lhe permitir agir como o 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 à spark-driver a função de iam.workloadIdentityUser para lhe permitir atuar como o 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 à spark-executor a função de iam.workloadIdentityUser para lhe permitir atuar como o 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}"