Papéis e identidade do Identity and Access Management do Google Kubernetes Engine

Identidade do plano de dados

O Serviço Gerenciado para Apache Spark no GKE usa a identidade da carga de trabalho do GKE para permitir que os pods no cluster do Serviço Gerenciado para Apache Spark no GKE atuem com a autoridade da conta de serviço padrão da VM do Serviço Gerenciado para Apache Spark (identidade do plano de dados). A identidade da carga de trabalho exige as seguintes permissões para atualizar as políticas do IAM na GSA usada pelo Serviço Gerenciado para Apache Spark no cluster virtual do 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 Serviço Gerenciado para Apache Spark:

  1. agent KSA (interage com o plano de controle do Serviço Gerenciado para Apache Spark):
    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. KSA spark-executor (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 Serviço Gerenciado para Apache Spark para permitir que o spark-driver e o spark-executor acessem 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 padrão da VM do Serviço Gerenciado para Apache Spark para permitir que as cargas de trabalho do Spark em execução nas VMs do cluster do Serviço Gerenciado para Apache Spark no 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 Serviço Gerenciado para Apache Spark no GKE usa a identidade da carga de trabalho do GKE para vincular a conta de serviço padrão da VM do Serviço Gerenciado para Apache Spark (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 Como criar e gerenciar contas de serviço).

    Exemplo da CLI gcloud:

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

    • O exemplo define o nome da GSA como "dataproc-${USER}", mas é possível 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 da GSA. É possível definir e usar um nome de variável diferente.
    • DPGKE_NAMESPACE: o namespace padrão do GKE é o nome do cluster do Serviço Gerenciado para Apache Spark no GKE.
  3. Ao criar o cluster do Serviço Gerenciado para Apache Spark no GKE, adicione as seguintes propriedades para que o Serviço Gerenciado para Apache Spark 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. Execute os comandos a seguir para atribuir as permissões necessárias da identidade da carga de trabalho às contas de serviço:

    1. Atribua à GSA o papel dataproc.worker para permitir que ela atue como agente:
      gcloud projects add-iam-policy-binding \
          --role=roles/dataproc.worker \
          --member="serviceAccount:${DPGKE_GSA}" \
          "${PROJECT}"
      
    2. Atribua à KSA agent o papel iam.workloadIdentityUser para permitir que ela atue como sua 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 sua 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 sua 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}"