Para configurar algunas de las integraciones de terceros, debe proporcionar secretos, como contraseñas, para los receptores de métricas del agente de operaciones. De forma predeterminada, estos secretos se almacenan como texto sin formato en el archivo config.yaml
del agente. Estos secretos se incluyen en los registros del sistema que escribe el agente y se transmiten a Cloud Logging, lo que expone los secretos fuera de la máquina virtual en la que se ejecuta el agente de operaciones.
A partir de la versión 2.57.0 del agente de operaciones, puedes usar un proveedor de OpenTelemetry integrado en Secret Manager para eliminar los secretos en texto sin cifrar de tus archivos de configuración.
Un proveedor es un componente de configuración de OpenTelemetry, similar a los componentes de receptor y procesador. Cada proveedor tiene un tipo, y cada tipo de proveedor asigna un identificador específico de la configuración a un valor.
El proveedor googlesecretmanager
asigna los identificadores de Secret Manager a los secretos, como contraseñas, tokens y claves de API, que hayas almacenado en Secret Manager. Usar el proveedor
googlesecretmanager
ofrece las siguientes ventajas:
- Seguridad mejorada: tus archivos de configuración no contienen información sensible, como contraseñas. Los secretos reales se almacenan en Secret Manager, un servicio diseñado específicamente para almacenar, acceder y gestionar datos sensibles de forma segura.
- Menor riesgo de exposición: Secret Manager obtiene los secretos durante la inicialización del agente de operaciones, lo que evita que los secretos en texto sin formato se registren accidentalmente en los registros.
Solo puedes usar googlesecretmanager
en la configuración de la recogida de métricas en configuraciones personalizadas del agente de operaciones. No uses el proveedor para sustituir secretos en la configuración de la recogida de registros.
Antes de empezar
Para usar el proveedor googlesecretmanager
, debes habilitar la API Secret Manager y permitir el acceso a la API, tal como se describe en los siguientes pasos:
-
Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:
gcloud init
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
Define el proyecto predeterminado de Google Cloud CLI:
gcloud config set project PROJECT_ID
Antes de ejecutar el comando anterior, sustituye la variable PROJECT_ID por el identificador de tu Google Cloud proyecto.
-
Enable the Secret Manager API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable secretmanager.googleapis.com
- Actualiza los permisos de acceso de OAuth de tu instancia para incluir el permiso necesario de Secret Manager,
https://www.googleapis.com/auth/cloud-platform
:gcloud compute instances set-service-account "INSTANCE_ID" \ --service-account "SERVICE_ACCT_EMAIL" \ --scopes "https://www.googleapis.com/auth/cloud-platform"
Antes de ejecutar el comando anterior, sustituya las siguientes variables:
- INSTANCE_ID: el identificador de tu VM.
- SERVICE_ACCT_EMAIL: la dirección de la cuenta de servicio asociada a la VM.
Para obtener más información, consulta Acceder a la API Secret Manager.
- Concede al usuario que gestiona las configuraciones del agente de Ops los permisos necesarios para crear y gestionar secretos. El rol Gestión de identidades y accesos
roles/secretManager.secretAdmin
incluye los permisos necesarios:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:USER_EMAIL" \ --role=roles/secretManager.secretAdmin
Antes de ejecutar el comando anterior, sustituya las siguientes variables:
- PROJECT_ID: el identificador de tu proyecto de Google Cloud .
- USER_EMAIL: la dirección del usuario al que se le concede el rol.
- Concede a la cuenta de servicio asociada a la VM los permisos que necesita para acceder a los secretos. El rol Gestión de identidades y accesos
roles/secretManager.secretAccessor
incluye los permisos necesarios:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCT_EMAIL" \ --role=roles/secretManager.secretAccessor
Antes de ejecutar el comando anterior, sustituya las siguientes variables:
- PROJECT_ID: el identificador de tu proyecto de Google Cloud .
- SERVICE_ACCT_EMAIL: la dirección de la cuenta de servicio asociada a la VM.
- Crea un secreto en Secret Manager para cada secreto de texto sin formato en tus archivos de configuración.
- Sustituye cada secreto de texto sin cifrar de tus archivos de configuración por una referencia al secreto correspondiente en Secret Manager.
- plaintext-secret: sustitúyelo por tu secreto de texto sin formato.
- SECRET_NAME: sustitúyelo por un nombre descriptivo para tu secreto.
- Para reiniciar el agente, ejecuta el siguiente comando en tu instancia:
sudo systemctl restart google-cloud-ops-agent
- Para confirmar que el agente se ha reiniciado, ejecuta el siguiente comando y verifica que los componentes "Metrics Agent" y "Logging Agent" se han iniciado:
sudo systemctl status "google-cloud-ops-agent*"
- Conéctate a tu instancia mediante RDP o una herramienta similar e inicia sesión en Windows.
- Abre un terminal de PowerShell con privilegios de administrador haciendo clic con el botón derecho en el icono de PowerShell y seleccionando Ejecutar como administrador.
- Para reiniciar el agente, ejecuta el siguiente comando de PowerShell:
Restart-Service google-cloud-ops-agent -Force
- Para confirmar que el agente se ha reiniciado, ejecuta el siguiente comando y verifica que los componentes "Metrics Agent" y "Logging Agent" se han iniciado:
Get-Service google-cloud-ops-agent*
Sustituir secretos en texto sin formato por secretos gestionados
Para eliminar el uso de secretos de texto sin formato en los archivos de configuración mediante Secret Manager y el proveedor googlesecretmanager
, haz lo siguiente:
Por ejemplo, si usas un receptor de métricas mysql
, tu archivo de configuración podría incluir una entrada como la siguiente:
receivers: mysql: type: mysql username: root password: plaintext-secret
En este ejemplo, quieres colocar la cadena plaintext-secret
en Secret Manager y, a continuación, sustituir el secreto en texto sin cifrar por una referencia al secreto gestionado.
Crear secretos de Secret Manager para secretos de texto sin formato
Para crear un secreto de Secret Manager que contenga el secretoplaintext-secret
en texto sin formato, ejecuta el siguiente comando:
echo -n "plaintext-secret" | gcloud secrets create SECRET_NAME \ --replication-policy="automatic" \ --data-file=-
Antes de ejecutar el comando anterior, sustituya las siguientes variables:
El nombre completo del recurso de tu nuevo secreto tiene el siguiente formato, con un VERSION de 1
:
projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION
Para obtener más información sobre cómo almacenar, versionar y acceder a secretos en Secret Manager, consulta Crear un secreto.
Sustituir secretos de texto sin formato
Para actualizar los archivos de configuración, sustituye cada secreto de texto sin cifrar por una referencia al proveedor googlesecretmanager
y al nombre del recurso del secreto gestionado, tal como se muestra en el siguiente ejemplo:
receivers: mysql: type: mysql username: root password: ${googlesecretmanager:projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION}