Proveedor de credenciales de Secret Manager

En este documento, se describe cómo usar Secret Manager como un almacén de credenciales con Google Cloud Serverless para Apache Spark para almacenar y acceder de forma segura a los datos sensibles que procesan las cargas de trabajo sin servidores.

Descripción general

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

Cuando ejecutas una carga de trabajo por lotes de Serverless for Apache Spark, puedes configurarla para que use un secreto de Secret Manager con el proveedor de credenciales de Secret Manager de Dataproc.

Disponibilidad

Esta función está disponible para las versiones 1.2.29 y 2.2.29, y las versiones principales posteriores del entorno de ejecución de Serverless para Apache Spark.

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 global del proyecto que contiene una colección de metadatos y versiones de secretos. Puedes almacenar, administrar y acceder a los secretos como BLOB binarios o cadenas de texto.
Credential En Hadoop y otras cargas de trabajo de Dataproc, una credencial consta de un nombre de credencial (ID) y un valor de credencial (contraseña). Un mapa de ID y valor de credenciales para un ID de secreto y un valor de secreto (versión del secreto) de Secret Manager.

Permisos

Dataproc verifica si existen los siguientes secretos opcionales:

  • fs-gs-encryption-key
  • fs-gs-encryption-key-hash
  • fs-gs-proxy-password
  • fs-gs-proxy-username

Para asegurarte de que la cuenta de servicio de VM de Dataproc tenga permiso para verificar los secretos de fs-gs, agrega el rol de usuario con acceso a secretos de Secret Manager con la siguiente condición a la cuenta de servicio, de la siguiente manera:

{
  "expression": "resource.name.startsWith(\"projects/PROJECT_NUMBER/secrets/fs-gs-\")",
  "title": "gsmkeycondition",
  "description": "Permission to access Dataproc secrets"
}

Uso

Puedes configurar Hadoop y otros componentes de OSS compatibles para que funcionen con Secret Manager. Para ello, establece las siguientes propiedades cuando envíes una carga de trabajo de Serverless para Apache Spark:

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

    --properties=spark.hadoop.hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
    
    • El scheme en la ruta de acceso 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.
  • Operador de punto sustituto : El servicio de 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 corregir esta limitación, habilita esta propiedad para reemplazar los puntos (.) por guiones (-) en los nombres de las credenciales. Esto garantiza que las credenciales de OSS con puntos en sus nombres se puedan almacenar y recuperar correctamente desde Secret Manager.

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

    --properties=spark.hadoop.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 tienen un operador de punto (.) en su nombre, esta propiedad se puede ignorar de forma segura.

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

    --properties=spark.hadoop.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 de forma segura.

Ejecuta una carga de trabajo por lotes con el proveedor de credenciales de Secret Manager

Para enviar una carga de trabajo por lotes que use el proveedor de credenciales de Secret Manager, ejecuta el siguiente comando de forma local o en Cloud Shell.

gcloud dataproc batches submit spark \
    --region=REGION \
    --jars=JARS \
    --class=MAIN_CLASS \
    --properties="spark.hadoop.hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,spark.hadoop.hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
    ...other flags as needed...

Reemplaza lo siguiente:

  • REGION: Es una región de Compute Engine en la que se ejecuta tu carga de trabajo.
  • JARS: Ruta de acceso al JAR de la carga de trabajo
  • MAIN_CLASS: La clase principal del JAR
  • PROJECT_ID: Tu ID del proyecto, que se encuentra en la sección Project info del Google Cloud panel de la consola