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:
agent
KSA (interage com o plano de controle do Dataproc):
serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
spark-driver
KSA (executa drivers do Spark):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
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 e vincular às KSAs:
Crie a GSA (consulte Criar e gerenciar contas de serviço).
Exemplo da CLI gcloud:
Observações:gcloud iam service-accounts create "dataproc-${USER}" \ --description "Used by Dataproc on GKE workloads."
- O exemplo define o nome da GSA como "dataproc-${USER}", mas você pode usar um nome diferente.
Defina as variáveis de ambiente:
Observações:PROJECT=project-id \ DPGKE_GSA="dataproc-${USER}@${PROJECT}.iam.gserviceaccount.com" DPGKE_NAMESPACE=GKE namespace
DPGKE_GSA
: os exemplos definem e usamDPGKE_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.
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}" \
Run the following commands to assign necessary Workload Identity permissions to the service accounts:
- 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}"
Atribua o papel
iam.workloadIdentityUser
à KSAagent
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}"
Conceda à KSA
spark-driver
o papeliam.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}"
Conceda à KSA
spark-executor
o papeliam.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}"
- Assign your GSA the