Autenticación del clúster personal de Dataproc

Cuando creas un clúster de Dataproc, puedes habilitar Autenticación personal del clúster de Dataproc para permitir interactivas y de alta calidad en el clúster para que se ejecuten de forma segura como tu identidad de usuario. Esto significa que las interacciones con otros recursos de Google Cloud, como Cloud Storage se autenticará como tú en lugar del clúster cuenta de servicio.

Consideraciones

  • Cuando creas un clúster con la autenticación del clúster personal habilitada, el clúster solo lo podrá usar tu identidad. Otros usuarios no podrá ejecutar trabajos en el clúster ni acceder Puerta de enlace del componente extremos en el clúster.

  • Los clústeres con la autenticación de clúster personal habilitada bloquean el acceso SSH y las funciones de Compute Engine, como las secuencias de comandos de inicio en todas las VM del clúster.

  • Los clústeres con la autenticación del clúster personal habilitada habilitan automáticamente y configurar Kerberos en el clúster para una comunicación segura dentro del clúster. Sin embargo, todas las identidades de Kerberos del clúster interactuarán con Google Cloud. recursos como el mismo usuario.

  • Por el momento, la autenticación del clúster personal de Dataproc no admitir los flujos de trabajo de Dataproc.

  • La autenticación personal del clúster de Dataproc se diseñó solo para trabajos interactivos ejecutados por un usuario individual (humano). Los trabajos de larga duración y de servicio deben configurar y usar una identidad de cuenta de servicio adecuada.

  • Las credenciales propagadas se reducen el alcance con un Límite de acceso a las credenciales. El límite de acceso predeterminado se limita a la lectura y escritura de objetos de Cloud Storage en buckets de Cloud Storage que pertenezcan al mismo proyecto que contiene el clúster. Puedes definir un límite de acceso no predeterminado cuando enable_an_interactive_session.

Objetivos

  • Crea un clúster de Dataproc con Dataproc Se habilitó la autenticación del clúster personal.

  • Inicia la propagación de las credenciales al clúster.

  • Usa un notebook de Jupyter en el clúster para ejecutar trabajos de Spark que se autentican con tus credenciales

Antes de comenzar

Crea un proyecto

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita la API de Dataproc.

    Habilita la API

  5. Instala Google Cloud CLI.
  6. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  9. Habilita la API de Dataproc.

    Habilita la API

  10. Instala Google Cloud CLI.
  11. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init

Configura el entorno

Configura el entorno desde Cloud Shell o una terminal local:

Cloud Shell

  1. Inicia una sesión de Cloud Shell.

Terminal local

  1. Ejecuta gcloud auth login para obtener credenciales de usuario válidas.

Crea un clúster y habilita una sesión interactiva

  1. Busca la dirección de correo electrónico de tu cuenta activa en gcloud.

    gcloud auth list --filter=status=ACTIVE --format="value(account)"
    

  2. Crea un clúster.

    gcloud dataproc clusters create cluster-name \
        --properties=dataproc:dataproc.personal-auth.user=your-email-address \
        --enable-component-gateway \
        --optional-components=ANACONDA,JUPYTER,ZEPPELIN \
        --region=region
    

  3. Habilita una sesión de propagación de credenciales para que el clúster comience a usar tus credenciales personales cuando interactúas con recursos de Google Cloud.

    gcloud dataproc clusters enable-personal-auth-session \
        --region=region \
        cluster-name
    

    Resultado de muestra:

    Injecting initial credentials into the cluster cluster-name...done.
    Periodically refreshing credentials for cluster cluster-name. This will continue running until the command is interrupted...
    

    1. Ejemplo de límite de acceso de alcance reducido: En el siguiente ejemplo, se habilita una sesión de autenticación personal que es más restrictiva que el límite predeterminado de acceso a credenciales con alcance reducido. Restringe el acceso a del clúster de Dataproc de almacenamiento en etapa intermedia (consulta Reducir el alcance con límites de acceso a credenciales para obtener más información).
gcloud dataproc clusters enable-personal-auth-session \
    --project=PROJECT_ID \
    --region=REGION \
    --access-boundary=<(echo -n "{ \
  \"access_boundary\": { \
    \"accessBoundaryRules\": [{ \
      \"availableResource\": \"//storage.googleapis.com/projects/_/buckets/$(gcloud dataproc clusters describe --project=PROJECT_ID --region=REGION CLUSTER_NAME --format="value(config.configBucket)")\", \
      \"availablePermissions\": [ \
        \"inRole:roles/storage.objectViewer\", \
        \"inRole:roles/storage.objectCreator\", \
        \"inRole:roles/storage.objectAdmin\", \
        \"inRole:roles/storage.legacyBucketReader\" \
      ] \
    }] \
  } \
}") \
   CLUSTER_NAME
  1. Mantén el comando en ejecución y cambia a una nueva pestaña de Cloud Shell o sesión de terminal. El cliente actualizará las credenciales mientras el comando se esté ejecutando.

  2. Escribe Ctrl-C para finalizar la sesión.

En el siguiente ejemplo, se crea un clúster con acceso a credenciales de alcance reducido límite.

Accede a Jupyter en el clúster

gcloud

  1. Obtén detalles del clúster.
    gcloud dataproc clusters describe cluster-name --region=region
    

    La URL de la interfaz web de Jupyter se mostrará en los detalles del clúster.

    ...
    JupyterLab: https://UUID-dot-us-central1.dataproc.googleusercontent.com/jupyter/lab/
    ...
    
  2. Copia la URL en tu navegador local para iniciar la IU de Jupyter.
  3. Comprueba que la autenticación de clúster personal se haya realizado correctamente.
    1. Inicia una terminal de Jupyter.
    2. Ejecuta gcloud auth list
    3. Verifica que tu nombre de usuario sea la única cuenta activa.
  4. En una terminal de Jupyter, habilita Jupyter para que se autentique con Kerberos y envíe trabajos de Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. Ejecuta klist para verificar que Jupyter obtuvo un TGT válido.
  5. En una terminal de Juypter, usa gcloud CLI para crear un rose.txt en un bucket de Cloud Storage de tu proyecto.
    echo "A rose by any other name would smell as sweet" > /tmp/rose.txt
    

    gcloud storage cp /tmp/rose.txt gs://bucket-name/rose.txt
    
    1. Marca el archivo como privado para que solo tu cuenta de usuario pueda leer o escribir. escribir en ella. Jupyter usará tus credenciales personales cuando interactúe. con Cloud Storage.
      gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
      
    2. Verifica tu acceso privado.
      gcloud storage objects describe gs://$BUCKET/rose.txt
      

      acl:
  6. email: $USER entity: user-$USER role: OWNER

Console

  1. Haz clic en el vínculo Componenta de puerta de enlace de Jupyter para iniciar la IU de Jupyter.
  2. Comprueba que la autenticación de clúster personal se haya realizado correctamente.
    1. Inicia una terminal de Jupyter
    2. Ejecuta gcloud auth list
    3. Verifica que tu nombre de usuario sea la única cuenta activa.
  3. En una terminal de Jupyter, habilita Jupyter para que se autentique con Kerberos y envíe trabajos de Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. Ejecuta klist para verificar que Jupyter obtuvo un TGT válido.
  4. En una terminal de Jupyter, usa gcloud CLI para crear un rose.txt en un bucket de Cloud Storage de tu proyecto.
    echo "A rose by any other name would smell as sweet" > /tmp/rose.txt
    

    gcloud storage cp /tmp/rose.txt gs://bucket-name/rose.txt
    
    1. Marca el archivo como privado para que solo tu cuenta de usuario pueda leer o escribir. escribir en ella. Jupyter usará tus credenciales personales cuando interactúe. con Cloud Storage.
      gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
      
    2. Verifica tu acceso privado.
      gcloud storage objects describe gs://bucket-name/rose.txt
      
      acl:
  5. email: $USER entity: user-$USER role: OWNER

Ejecuta un trabajo de PySpark desde Jupyter

  1. Navega a una carpeta y, luego, crea un notebook de PySpark.
  2. Ejecuta un trabajo básico de recuento de palabras en el archivo rose.txt que creaste antes.

    text_file = sc.textFile("gs://bucket-name/rose.txt")
    counts = text_file.flatMap(lambda line: line.split(" ")) \
             .map(lambda word: (word, 1)) \
             .reduceByKey(lambda a, b: a + b)
    print(counts.collect())
    

    Spark puede leer el archivo rose.txt en Cloud Storage porque se ejecuta con tus credenciales de usuario.

    También puedes consultar el bucket de Cloud Storage Registros de auditoría para verificar que el trabajo acceda a Cloud Storage con tu identidad (consulta Registros de auditoría de Cloud con Cloud Storage para obtener más información).

Limpieza

  1. Borra el clúster de Dataproc.
    gcloud dataproc clusters delete cluster-name --region=region