Usar el proveedor de credenciales de Secret Manager

Secret Manager puede proteger tus datos sensibles, como tus claves de API, contraseñas y certificados. Puedes usarlo para gestionar, acceder y auditar tus secretos enGoogle Cloud.

Puedes configurar un clúster o un trabajo de Dataproc para que use un secreto de Secret Manager mediante el proveedor de credenciales de Secret Manager.

Disponibilidad

Esta función se puede usar con clústeres de Dataproc creados con las versiones de imagen 2.0.97, 2.1.41, 2.2.6 o posteriores de Dataproc.

Terminología

En la siguiente tabla se describen los términos que se usan en este documento.

Término Descripción
Secret Un secreto de Secret Manager es un objeto de proyecto global que contiene una colección de metadatos y versiones de secretos. Puedes almacenar, gestionar y acceder a secretos en forma de blobs binarios o de cadenas de texto.
Credential En Hadoop y otras aplicaciones alojadas en Dataproc, una credencial consta de un nombre (ID) y un valor (contraseña). Un ID y un valor de credenciales se asignan a un ID y un valor de secreto (versión de secreto) de Secret Manager.

Uso

Puedes configurar Hadoop y otros componentes de software libre para que funcionen con Secret Manager. Para ello, define las siguientes propiedades al crear un clúster de Dataproc o enviar una tarea.

  • Ruta del proveedor : la propiedad de ruta del proveedor, hadoop.security.credential.provider.path, es una lista separada por comas de uno o varios URIs de proveedores de credenciales que se recorre para resolver una credencial.

    --properties=hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
    
    • El scheme de la ruta del proveedor indica el tipo de proveedor de credenciales. Los esquemas de Hadoop incluyen jceks://, user:// y localjceks://. Usa el esquema gsm:// para buscar credenciales en Secret Manager.
  • Sustituir el operador de punto : el servicio Secret Manager no permite puntos (.) en los nombres de los secretos. Sin embargo, algunos componentes de software de código abierto (OSS) usan puntos en sus claves de credenciales. Para solucionar esta limitación, habilita esta propiedad para sustituir los puntos (.) por guiones (-) en los nombres de las credenciales. De esta forma, las credenciales de OSS con puntos en sus nombres se pueden almacenar y recuperar correctamente de Secret Manager.

    Por ejemplo, si una clave de credencial de OSS es a.b.c, debe modificarla a a-b-c cuando la almacene en Secret Manager.

    --properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    

    Esta propiedad es opcional. De forma predeterminada, el valor es false. En el caso de las claves de credenciales que no tengan el operador de punto (.) en su nombre, esta propiedad se puede ignorar sin problemas.

  • Versión de secreto : los secretos de Secret Manager pueden tener varias versiones (valores). Usa esta propiedad para acceder a una versión específica de un secreto y tener un acceso estable en entornos de producción.

    --properties=hadoop.security.credstore.google-secret-manager.secret-version=1
    

    Esta propiedad es opcional. De forma predeterminada, Secret Manager accede a la versión LATEST, que se resuelve en el valor más reciente del secreto en el tiempo de ejecución. Si tu caso de uso es acceder siempre a la versión LATEST de un secreto, puedes ignorar esta propiedad sin problema.

Crear un clúster de Dataproc con el proveedor de credenciales de Secret Manager

  1. Ejecuta el siguiente comando de forma local o en Cloud Shell para crear un clúster de Dataproc con las propiedades necesarias.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --properties="hadoop:hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hadoop:hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed...
    

Notas:

Enviar un trabajo de Dataproc con un proveedor de credenciales de Secret Manager

  1. Ejecuta el siguiente comando de forma local o en Cloud Shell para enviar una tarea de Dataproc con las propiedades necesarias.

    gcloud dataproc jobs submit CLUSTER_NAME \
        --region=REGION \
        --properties="hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed... \
        -- job-args
    

Notas:

Usar Secret Manager con Hive Metastore

La propiedad javax.jdo.option.ConnectionPassword de Hive Metastore contiene la contraseña utilizada para autenticar el acceso a la base de datos del metastore. La contraseña se guarda en formato de texto en hive-site.xml, lo que supone un riesgo para la seguridad. Una práctica recomendada para producción es almacenar la contraseña en Secret Manager y, a continuación, actualizar el archivo de configuración hive-site.xml para permitir que el servicio de metastore de Hive lea la contraseña de Secret Manager.

En los siguientes ejemplos se muestra cómo usar Secret Manager en diferentes situaciones de Hive Metastore.

Crear un clúster con un metastore local

  1. Ejecuta el siguiente comando de forma local o en Cloud Shell para crear un clúster de Dataproc.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed... \
    

Notas:

  • CLUSTER_NAME: el nombre del nuevo clúster.
  • REGION: una región de Compute Engine en la que se ejecutará tu carga de trabajo.
  1. Crea un secreto con Secret Manager o con el comando hadoop credential.

    • Alternativa 1: Usa Secret Manager para crear un secreto.

      • Nombre del secreto: /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • Valor del secreto: METASTORE_PASSWORD.
    • Alternativa 2: Usa el comando hadoop credential para crear un secreto.

      sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
      

      • METASTORE_PASSWORD: Como Secret Manager no admite el operador de punto(.), sustituye los puntos(.) de la contraseña por guiones(-).
  2. Verifica que el secreto exista.

    sudo hadoop credential list -provider gsm://projects/PROJECT_ID
    

  3. Usa un editor de texto para quitar la propiedad javax.jdo.option.ConnectionPassword del archivo hive-site.xml y, a continuación, añade las propiedades hadoop.security.credential.provider.path y hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator al archivo.

    Propiedades de ejemplo:

    hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
    hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    

  4. Reinicia Hive Metastore.

    sudo systemctl restart hive-metastore
    

Crear un clúster con un almacén de metadatos de Hive externo

  1. Ejecuta el siguiente comando de forma local o en Cloud Shell para crear un clúster de Dataproc con las siguientes propiedades. Usa este clúster como almacén de metadatos de Hive externo para los trabajos de Hive que se ejecutan desde otros clústeres de Dataproc para cargas de trabajo de Spark Hive.

    gcloud dataproc clusters create METASTORE_CLUSTER_NAME \
        --region=REGION \
        --properties=core:fs.defaultFS=gs://METASTORE_CLUSTER_PROXY_BUCKET,dataproc:dataproc.components.deactivate="hdfs hive-server2 hive-metastore" \
        ...other flags as needed...
    
  2. Crea un secreto con Secret Manager o con el comando hadoop credential.

    • Alternativa 1: Usa Secret Manager para crear un secreto.
      • Nombre del secreto: /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • Valor del secreto: METASTORE_PASSWORD.
    • Alternativa 2: Usa el comando hadoop credential para crear un secreto.
      sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
      
      • METASTORE_PASSWORD: Como Secret Manager no admite el operador de punto(.), sustituye los puntos(.) de la contraseña por guiones(-).
  3. Verifica que el secreto exista.

    sudo hadoop credential list -provider gsm://projects/PROJECT_ID
      

Crear un clúster para ejecutar tareas de Hive que se conecten a un almacén de metadatos externo

  1. Ejecuta el siguiente comando de forma local o en Cloud Shell para crear un clúster de Dataproc con las siguientes propiedades. Usa este clúster para ejecutar trabajos de Hive que se conecten al metastore externo en otro clúster de Dataproc.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --properties="hive:javax.jdo.option.ConnectionURL=jdbc:mysql://METASTORE_CLUSTER_NAME-m/metastore,hive:hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hive:hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed...
    

Comandos de credenciales de Hadoop

Puedes usar SSH para conectarte al nodo maestro de Dataproc y usar el comando hadoop credential para crear, enumerar y gestionar secretos.

Los comandos de hadoop credential usan el siguiente formato: hadoop credential SUBCOMMAND OPTIONS. En los ejemplos siguientes, se añade la marca -provider para especificar el tipo y la ubicación del proveedor (el almacén del proveedor). El esquema gsm:// especifica Secret Manager.

  • Crea un secreto con el ID especificado. El comando no crea el secreto si el ID de secreto especificado ya existe. Este comportamiento es coherente con la API CredentialProvider de Hadoop.

    hadoop credential create SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    

  • Muestra los secretos almacenados en un proyecto.

    hadoop credential list -provider gsm://projects/PROJECT_ID
    

  • Comprueba si un secreto existe en un proyecto con un valor especificado.

    hadoop credential check SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    

  • Comprueba si hay una versión específica de un secreto en un archivo de configuración.

    hadoop credential conf CONFIG_FILE check SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    
  • CONFIG_FILE: archivo XML que define hadoop.security.credstore.google-secret-manager.secret-version.

  • Elimina todas las versiones de un secreto de un proyecto.

    hadoop credential delete SECRET_ID -provider gsm://projects/ PROJECT_ID
    

Consulta la guía de comandos de Hadoop para obtener más información.

Siguientes pasos