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
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 incluyenjceks://
,user://
ylocaljceks://
. Usa el esquemagsm://
para buscar credenciales en Secret Manager.
- El
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 aa-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ónLATEST
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:
- REGION: una región de Compute Engine en la que se ejecuta tu carga de trabajo
- JARS: ruta del archivo JAR de la carga de trabajo
- MAIN_CLASS: la clase principal del archivo JAR
- PROJECT_ID: el ID de tu proyecto, que aparece en la sección Información del proyecto del Google Cloud panel de control de la consola