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 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=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ónLATEST
de un secreto, puedes ignorar esta propiedad sin problema.
Crear un clúster de Dataproc con el proveedor de credenciales de Secret Manager
- 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:
- CLUSTER_NAME: el nombre del nuevo clúster.
- REGION: una región de Compute Engine en la que se ejecutará tu carga de trabajo.
- PROJECT_ID: tu ID de proyecto se indica en la sección Información del proyecto del Google Cloud panel de control de la consola.
Enviar un trabajo de Dataproc con un proveedor de credenciales de Secret Manager
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:
- CLUSTER_NAME: el nombre del clúster que ejecutará el trabajo.
- REGION: una región de Compute Engine en la que se ejecutará tu carga de trabajo.
- PROJECT_ID: tu ID de proyecto se indica en la sección Información del proyecto del Google Cloud panel de control de la consola.
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
- 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.
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
.
- Nombre del secreto:
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(-
).
- METASTORE_PASSWORD: Como Secret Manager no admite el operador de punto(
Verifica que el secreto exista.
sudo hadoop credential list -provider gsm://projects/PROJECT_ID
Usa un editor de texto para quitar la propiedad
javax.jdo.option.ConnectionPassword
del archivohive-site.xml
y, a continuación, añade las propiedadeshadoop.security.credential.provider.path
yhadoop.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
Reinicia Hive Metastore.
sudo systemctl restart hive-metastore
Crear un clúster con un almacén de metadatos de Hive externo
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...
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
.
- Nombre del secreto:
- 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(-
).
- METASTORE_PASSWORD: Como Secret Manager no admite el operador de punto(
- Alternativa 1: Usa Secret Manager para crear un secreto.
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
- 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
- Consulta la documentación de Hive.