Proveedor de credenciales de Secret Manager

En este documento se describe cómo usar Secret Manager como 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 servidor.

Información general

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.

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

Disponibilidad

Esta función está disponible en las versiones de tiempo de ejecución de Serverless para Apache Spark 1.2.29, 2.2.29 o posteriores.

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 cargas de trabajo de 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.

Permisos

Dataproc comprueba 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 tiene permiso para consultar los secretos de fs-gs, añade el rol Permiso para acceder a los recursos de Secret Manager a la cuenta de servicio con la siguiente condición:

{
  "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 software libre compatibles para que funcionen con Secret Manager. Para ello, define las siguientes propiedades al enviar una carga de trabajo de Serverless para Apache Spark:

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

    --properties=spark.hadoop.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=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 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=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 sin problema.

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

Para enviar una carga de trabajo por lotes que utilice 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...

Haz los cambios siguientes: