Autenticación del clúster personal de Dataproc

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 del clúster se ejecuten de forma segura con 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úster personal habilitada, solo tu identidad podrá usarlo. Otros usuarios no podrán ejecutar trabajos en el clúster ni acceder a los extremos de Component Gateway 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 de clúster personal habilitada habilitan y configuran automáticamente Kerberos en el clúster para una comunicación segura dentro del clúster. Sin embargo, todas las identidades de Kerberos en el clúster interactuarán con los recursos de Google Cloudcomo el mismo usuario.

  • Los clústeres con la autenticación de clúster personal habilitada no admiten imágenes personalizadas.

  • La autenticación del clúster personal de Dataproc no admite los flujos de trabajo de Dataproc.

  • La autenticación de clúster personal de Dataproc está diseñada solo para trabajos interactivos que ejecuta un usuario individual (humano). Los trabajos y las operaciones de larga duración deben configurar y usar una identidad de cuenta de servicio adecuada.

  • Las credenciales propagadas se restringen con un límite de acceso a las credenciales. El límite de acceso predeterminado se limita a leer y escribir objetos de Cloud Storage en buckets 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.

  • La autenticación del clúster personal de Dataproc usa atributos de invitado de Compute Engine. Si la función de atributos de invitado está inhabilitada, fallará la autenticación de clúster personal.

Objetivos

  • Crea un clúster de Dataproc con la autenticación del clúster 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

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc API.

    Enable the API

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Enable the Dataproc API.

    Enable the API

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. 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. Crear un clúster

      gcloud dataproc clusters create CLUSTER_NAME \
          --properties=dataproc:dataproc.personal-auth.user=your-email-address \
          --enable-component-gateway \
          --optional-components=JUPYTER \
          --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 con 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 a credenciales con alcance reducido predeterminado. Restringe el acceso al bucket de etapa de pruebas del clúster de Dataproc (consulta Cómo 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
        
    4. 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.

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

    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 incluye 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 autenticar con Kerberos y enviar 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 Jupyter, usa gcloud CLI para crear un archivo rose.txt en un bucket de Cloud Storage en 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 leerlo o escribir en él. 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