Cuando creas un clúster de Dataproc, puedes habilitar la autenticación del clúster personal de Dataproc para permitir que las cargas de trabajo interactivas en el clúster 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án como tú en lugar de la cuenta de servicio del clúster.
Consideraciones
Cuando creas un clúster con la autenticación de clústeres personales habilitada, solo tu identidad puede usarla. Otros usuarios no podrán ejecutar trabajos en el clúster ni acceder a los extremos de la puerta de enlace de componentes 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 que tienen habilitada la autenticación personal de clústeres habilitan y configuran Kerberos automáticamente en el clúster para que la comunicación dentro del clúster sea segura. Sin embargo, todas las identidades de Kerberos del clúster interactuarán con los recursos de Google Cloud como el mismo usuario.
En la actualidad, la autenticación del clúster personal de Dataproc no es compatible con los flujos de trabajo de Dataproc.
La autenticación del clúster personal de Dataproc está diseñada solo para trabajos interactivos que ejecutan usuarios individuales (humanos). Los trabajos y las operaciones de larga duración deben configurar y usar una identidad de cuenta de servicio adecuada.
Las credenciales propagadas tienen un alcance inferior 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 depósitos de Cloud Storage que pertenecen 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 la autenticación personal de Dataproc habilitada.
Inicia la propagación de 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
- 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.
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
-
Habilita la API de Dataproc.
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
-
Habilita la API de Dataproc.
- Instala Google Cloud CLI.
-
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
- Inicia una sesión de Cloud Shell.
Terminal local
- Ejecuta
gcloud auth login
para obtener credenciales de usuario válidas.
Crea un clúster y habilita una sesión interactiva
Busque la dirección de correo electrónico de su cuenta activa en gcloud.
gcloud auth list --filter=status=ACTIVE --format="value(account)"
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
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...
- 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 de acceso de credencial de alcance reducido predeterminado. Restringe el acceso al bucket de etapa de pruebas del clúster de Dataproc (consulta Cómo reducir el alcance con los límites de acceso a las 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
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 se ejecuta el comando.
Escribe
Ctrl-C
para finalizar la sesión.
En el siguiente ejemplo, se crea un clúster con un límite de acceso a las credenciales de alcance reducido.
Accede a Jupyter en el clúster
gcloud CLI
- Obtener detalles del clúster
gcloud dataproc clusters describe cluster-name --region=region
La URL de la interfaz web de Jupyter aparece en los detalles del clúster.
... JupyterLab: https://UUID-dot-us-central1.dataproc.googleusercontent.com/jupyter/lab/ ...
- Copia la URL en tu navegador local para iniciar la IU de Jupyter.
- Verifica que la autenticación del clúster personal se haya realizado de forma correcta.
- Inicia una terminal de Jupyter.
- Ejecuta
gcloud auth list
- Verifica que tu nombre de usuario sea la única cuenta activa.
- En una terminal de Jupyter, habilite Jupyter para autenticar con Kerberos y enviar trabajos de Spark.
kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
- Ejecuta
klist
para verificar que Jupyter obtuvo un TGT válido.
- Ejecuta
- En una terminal de Juypter, usa
gsutil
para crear un archivorose.txt
en un depósito de Cloud Storage en tu proyecto.echo "A rose by any other name would smell as sweet" > /tmp/rose.txt
gsutil cp /tmp/rose.txt gs://bucket-name/rose.txt
- Marca el archivo como privado para que solo tu cuenta de usuario pueda leerlo o escribir en él. Jupyter usará tus credenciales personales cuando interactúe con Cloud Storage.
gsutil acl set private gs://bucket-name/rose.txt
- Verifica tu acceso privado.
gsutil acl get gs://$BUCKET/rose.txt
[ { "email": "$USER", "entity": "user-$USER", "role": "OWNER" } ]
- Marca el archivo como privado para que solo tu cuenta de usuario pueda leerlo o escribir en él. Jupyter usará tus credenciales personales cuando interactúe con Cloud Storage.
Consola
- Haz clic en el vínculo Componenta de puerta de enlace de Jupyter para iniciar la IU de Jupyter.
- Verifica que la autenticación del clúster personal se haya realizado de forma correcta.
- Inicia una terminal de Jupyter
- Ejecuta
gcloud auth list
- Verifica que tu nombre de usuario sea la única cuenta activa.
- En una terminal de Jupyter, habilite Jupyter para autenticar con Kerberos y enviar trabajos de Spark.
kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
- Ejecuta
klist
para verificar que Jupyter obtuvo un TGT válido.
- Ejecuta
- En una terminal de Jupyter, usa
gsutil
para crear un archivorose.txt
en un depósito de Cloud Storage de tu proyecto.echo "A rose by any other name would smell as sweet" > /tmp/rose.txt
gsutil cp /tmp/rose.txt gs://bucket-name/rose.txt
- Marca el archivo como privado para que solo tu cuenta de usuario pueda leerlo o escribir en él. Jupyter usará tus credenciales personales cuando interactúe con Cloud Storage.
gsutil acl set private gs://bucket-name/rose.txt
- Verifica tu acceso privado.
gsutil acl get gs://bucket-name/rose.txt
[ { "email": "$USER", "entity": "user-$USER", "role": "OWNER" } ]
- Marca el archivo como privado para que solo tu cuenta de usuario pueda leerlo o escribir en él. Jupyter usará tus credenciales personales cuando interactúe con Cloud Storage.
Ejecuta un trabajo de PySpark desde Jupyter
- Navega a una carpeta y crea un notebook de PySpark.
Ejecuta un trabajo de recuento de palabras básico 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 archivorose.txt
en Cloud Storage porque se ejecuta con tus credenciales de usuario.También puedes verificar los registros de auditoría del depósito de Cloud Storage 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
- Borra el clúster de Dataproc.
gcloud dataproc clusters delete cluster-name --region=region