Identidad y roles de IAM de Dataproc on GKE

Identidad del plano de datos

Dataproc en GKE usa identidad de la carga de trabajo de GKE para permitir que los Pods dentro del clúster de Dataproc on GKE actúen con la autoridad de la cuenta de servicio predeterminada de la VM de Dataproc (identidad del plano de datos). La identidad de las cargas de trabajo requiere los siguientes permisos para actualizar las políticas de IAM en el muchas GSA que usa tu clúster virtual de Dataproc on GKE:

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

La identidad de la carga de trabajo de GKE vincula las siguientes cuentas de servicio (KSA) de GKE con la cuenta de servicio de la VM de Dataproc:

  1. agent KSA (interactúa con el plano de control de Dataproc):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
  2. spark-driver KSA (ejecuta controladores de Spark):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
  3. spark-executor KSA (ejecuta ejecutores de Spark):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]

Asignar roles

Otorga permisos a la cuenta de servicio de VM de Dataproc para permitir que spark-driver y spark-executor accedan a los recursos del proyecto, las fuentes de datos, los receptores de datos y cualquier otro servicio que requiera tu carga de trabajo.

Ejemplo:

Con el siguiente comando, se asignan funciones a la cuenta de servicio de VM de Dataproc predeterminada para permitir que las cargas de trabajo de Spark que se ejecutan en las VM del clúster de Dataproc on GKE accedan a los buckets de Cloud Storage y a los conjuntos de datos de BigQuery del proyecto.

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

Configuración de IAM personalizada

Dataproc en GKE usa identidad de carga de trabajo de GKE para vincular la cuenta de servicio de VM de Dataproc (identidad del plano de datos) predeterminada a las tres cuentas de servicio de GKE (KSA).

Si deseas crear y utilizar una cuenta de servicio de Google (GSA) diferente para vincular a las KSA, sigue estos pasos:

  1. Crea la GSA (consulta Creación y administración de cuentas de servicio).

    Ejemplo de gcloud CLI:

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

    • En el ejemplo, se establece el nombre de la aplicación como “dataproc-${USER}”, pero puedes usar un nombre diferente.
  2. Configura las variables de entorno:

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

    • DPGKE_GSA: Los ejemplos establecen y usan DPGKE_GSA como nombre de la variable que contiene la dirección de correo electrónico de tu GSA. Puedes establecer y usar un nombre de variable diferente.
    • DPGKE_NAMESPACE: El espacio de nombres de GKE predeterminado es el nombre de tu clúster de Dataproc on GKE.
  3. Cuando crees el clúster de Dataproc on GKE, agrega las siguientes propiedades para que Dataproc use tu GSA en lugar de la predeterminada:

    --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. Ejecuta los siguientes comandos para asignar los permisos de Workload Identity necesarios a las cuentas de servicio:

    1. Asigne a su GSA el rol dataproc.worker para permitir que actúe como agente:
      gcloud projects add-iam-policy-binding \
          --role=roles/dataproc.worker \
          --member="serviceAccount:${DPGKE_GSA}" \
          "${PROJECT}"
      
    2. Asigna a la KSA agent la función iam.workloadIdentityUser para permitir que actúe como tu 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. Otorga a la KSA spark-driver la función iam.workloadIdentityUser para permitir que actúe como tu 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. Otorga a la KSA spark-executor la función iam.workloadIdentityUser para permitir que actúe como tu 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}"