Proveedor de credenciales de Secret Manager

Descripción general

Secret Manager puede proteger tus datos sensibles, como las claves de API, las contraseñas y los certificados. Úsalo para administrar y auditar tus secretos en Google Cloud, además de acceder a ellos.

La API de GoogleHadoopSecretManagerCredentialProvider, que se integra en Secret Manager, es una implementación de la API de Hadoop CredentialProvider, una solución para proteger las credenciales sensibles contra el acceso público.

Puedes usar la API del proveedor de credenciales de Hadoop de las siguientes maneras:

Terminología

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

Período Descripción
Secret Un secreto es un objeto global del proyecto que contiene una colección de metadatos y versiones de secretos. Secret Manager te permite almacenar, administrar y acceder a los secretos como BLOB binarios o cadenas de texto.
Credential En Hadoop y otras aplicaciones alojadas en Dataproc, una credencial consta de un nombre (ID) y un valor de credencial (contraseña). Un ID de credencial y un valor se asignan a un ID y valor del secreto (versión del secreto) en Secret Manager.

Comandos de credenciales de Hadoop

Puedes usar el comando hadoop credential para crear, enumerar y administrar secretos. Los comandos hadoop credential usan este formato general: hadoop credential SUBCOMMAND OPTIONS.

En los siguientes ejemplos, se agrega la marca -provider para especificar el tipo y la ubicación del proveedor (el almacén del proveedor). El esquema gsm:// especifica el Secret Manager.

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

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

  • Enumera los secretos almacenados en un proyecto.

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

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

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

  • Verifica una versión de secreto específica en un archivo de configuración.

    hadoop credential conf CONFIG_FILE check SECRET_ID -provider gsm://projects/project-id -v VALUE
    
  • CONFIG_FILE: Es el archivo en formato XML que establece hadoop.security.credstore.google-secret-manager.secret-version.

  • Borra 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.

Configura componentes de OSS

Puedes configurar Hadoop y otros componentes de OSS compatibles para que funcionen con Secret Manager si configuras las siguientes propiedades del componente:

  • Ruta de acceso del proveedor (obligatorio): La propiedad de la ruta de acceso del proveedor, hadoop.security.credential.provider.path, es una lista separada por comas de uno o más URIs del proveedor de credenciales que se recorre para resolver una credencial.

    --properties=hadoop.security.credential.provider.path=gsm://projects/project-id
    
    • Se usa una scheme para indicar el tipo de proveedor de credenciales. Los esquemas de Hadoop incluyen jceks://, user:// y localjceks://. Usa el esquema gsm:// como se muestra en el ejemplo anterior para buscar la credencial en Secret Manager.
  • Sustituto del operador de punto (opcional): Secret Manager no admite el operador punto(.) en los nombres de secretos, pero las claves de credenciales de componente de OSS pueden contener este operador. Cuando se configura esta propiedad como true. puedes reemplazar los puntos(.)s por guiones(-) en los nombres de las credenciales. Por ejemplo, cuando esta propiedad se configura como true, puedes especificar el nombre de la credencial a.b.c como a-b-c cuando lo pases a Secret Manager. Esta propiedad solo es necesaria para especificar una credencial con los comandos de credenciales de Hadoop o cuando un componente de OSS intenta resolver credenciales. No tiene ningún efecto en la creación, enumeración o eliminación de los comandos de credenciales de Hadoop.

    --properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    
  • Versión del Secret (opcional): Los Secrets en Secret Manager pueden tener varias versiones (valores). Usa esta propiedad para acceder a una versión del Secret. De forma predeterminada, Secret Manager accede a la versión LATEST, que se resuelve al valor más reciente del secreto en el entorno de ejecución. Se recomienda definir esta propiedad para obtener un acceso estable en los entornos de producción.

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

Ejemplos de Hive Metastore

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

En las siguientes secciones, se proporcionan instrucciones para usar Secret Manager en diferentes situaciones de Hive Metastore.

Clúster de Hive con almacén de metadatos local

  1. Ejecuta el siguiente comando de forma local o en Cloud Shell para crear un clúster de Dataproc con las propiedades del clúster necesarias.

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

  2. Crear un secreto Puedes crear un Secret con Secret Manager o con el comando hadoop credential.

    • Alternativa 1: Usa Secret Manager para crear un Secret

      • Nombre del Secret: /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: Dado que Secret Manager no admite el operador punto(.), reemplaza los puntos(.) de la contraseña con guiones(-).
  3. Verifica que el secreto exista.

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

  4. Quita javax.jdo.option.ConnectionPassword del archivo hive-site.xml. Con el siguiente comando, se abre el archivo para editarlo en vim.

    sudo vim /etc/hive/conf/hive-site.xml
    

  5. Reinicia Hive Metastore.

    sudo systemctl restart hive-metastore
    

Clúster de Hive con 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 del clúster.

    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed... \
        --properties=core:fs.defaultFS=gs://METASTORE_CLUSTER_PROXY_BUCKET,dataproc:dataproc.components.deactivate="hdfs hive-server2 hive-metastore"
    

  2. Crear un secreto Puedes crear un Secret con Secret Manager o con el comando hadoop credential.

    • Alternativa 1: Usa Secret Manager para crear un secreto:
      • Nombre del Secret: /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: Dado que Secret Manager no admite el operador punto(.), sustituye los puntos(.) en la contraseña con guiones(-).
  3. Verifica que el secreto exista.

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

  4. Ejecuta el siguiente comando de forma local o en Cloud Shell para crear un clúster de Dataproc con las siguientes propiedades del clúster. Usa este clúster para ejecutar trabajos de Hive y conectarte al almacén de metadatos externo.

    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed...
        --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"
    

Para más información