Administra secretos en la configuración del recopilador de OpenTelemetry compilado por Google

Configurar algunos componentes, como receptores o exportadores, puede requerir que proporciones secretos, como contraseñas. Puedes incluir estos secretos como texto sin formato en los archivos de configuración del recopilador. Sin embargo, estos secretos se incluyen en los registros del sistema que escribe el recopilador y se transmiten a Cloud Logging, lo que los expone más allá del nodo o la máquina virtual (VM) en la que se ejecuta el recopilador.

A partir de la versión 0.126.0 del recopilador compilado por Google, puedes usar un proveedor de OpenTelemetry integrado en Secret Manager para eliminar los secretos de texto simple de tus archivos de configuración.

Un proveedor es un componente de configuración de OpenTelemetry, análogo a los componentes de receptor y procesador. Cada proveedor tiene un tipo, y cada tipo de proveedor asigna un identificador específico en la configuración a un valor.

El proveedor de googlesecretmanager asigna identificadores de Secret Manager a los secretos, como contraseñas, tokens y claves de API, que almacenaste en Secret Manager. Usar el proveedor googlesecretmanager ofrece los siguientes beneficios:

  • Mayor seguridad: Los 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 y administrar datos sensibles de forma segura, además de acceder a ellos.
  • Menor riesgo de exposición: Secret Manager recupera secretos durante la inicialización del recopilador de OpenTelemetry integrado en Google, lo que evita que los secretos de texto simple se asienten por accidente en los registros.

Antes de comenzar

Para usar el proveedor de googlesecretmanager, debes habilitar la API de Secret Manager y permitir el acceso a ella, como se describe en los siguientes pasos:

  1. Instala Google Cloud CLI. Después de la instalación, inicializa Google Cloud CLI ejecutando el siguiente comando:

    gcloud init

    Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

  2. Configura el proyecto predeterminado para Google Cloud CLI de la siguiente manera:

    gcloud config set project PROJECT_ID
    

    Antes de ejecutar el comando anterior, reemplaza la variable PROJECT_ID por el identificador de tu proyecto de Google Cloud .

  3. Enable the Secret Manager API:

    gcloud services enable secretmanager.googleapis.com
  4. Actualiza los permisos de acceso de OAuth para que la instancia incluya el permiso que requiere 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, reemplaza las siguientes variables:

    • INSTANCE_ID: es el identificador de la VM.
    • SERVICE_ACCT_EMAIL: es la dirección de la cuenta de servicio asociada a la VM.

    Para obtener más información, consulta Accede a la API de Secret Manager.

  5. Otorga al usuario que administra los parámetros de configuración del recopilador de OpenTelemetry integrado en Google los permisos necesarios para crear y administrar secretos. El rol de Identity and Access Management 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, reemplaza las siguientes variables:

    • PROJECT_ID: es el identificador de tu proyecto de Google Cloud .
    • USER_EMAIL: es la dirección del usuario al que se le otorga el rol.
  6. Otorga a la cuenta de servicio asociada a la VM los permisos necesarios para acceder a los secretos. El rol de Identity and Access Management 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, reemplaza las siguientes variables:

    • PROJECT_ID: es el identificador de tu proyecto de Google Cloud .
    • SERVICE_ACCT_EMAIL: es la dirección de la cuenta de servicio asociada a la VM.
  7. Reemplaza los secretos de texto simple por los administrados

    Para dejar de usar secretos de texto simple en tus archivos de configuración con Secret Manager y el proveedor de googlesecretmanager, haz lo siguiente:

    1. Crea un secreto en Secret Manager para cada secreto de texto simple en tus archivos de configuración.
    2. Reemplaza cada secreto de texto simple en tus archivos de configuración por una referencia al secreto correspondiente en Secret Manager.

    Por ejemplo, si usas un exportador http, tu archivo de configuración podría incluir una entrada como la siguiente:

    exporters:
      logging:
        loglevel: debug
      http:
        endpoint: "https://example.com/api/metrics"
        headers:
          X-API-Key: plaintext-secret
    

    En este ejemplo, debes colocar la cadena plaintext-secret en Secret Manager y, luego, reemplazar el secreto de texto simple por una referencia al secreto administrado.

    Crea secretos de Secret Manager para los secretos de texto simple

    Para crear un secreto de Secret Manager que incluya el secreto de texto simple plaintext-secret, ejecuta el siguiente comando:
    echo -n "plaintext-secret" | gcloud secrets create SECRET_NAME \
        --replication-policy="automatic" \
        --data-file=-
    

    Antes de ejecutar el comando anterior, reemplaza las siguientes variables:

    • plaintext-secret: Reemplázala por el secreto de texto simple.
    • SECRET_NAME: Reemplázala por un nombre significativo para el secreto.

    El nombre del recurso completamente calificado del nuevo secreto tiene el siguiente formato, con una VERSION de 1:

    projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION

    Para obtener más información sobre cómo almacenar secretos, controlar sus versiones y acceder a ellos en Secret Manager, consulta Crea un secreto.

    Reemplaza secretos de texto simple

    Para actualizar tus archivos de configuración, reemplaza cada secreto de texto simple por una referencia al proveedor de googlesecretmanager y al nombre del recurso del secreto administrado, como se muestra en el siguiente ejemplo:

    exporters:
      logging:
        loglevel: debug
      http:
        endpoint: "https://example.com/api/metrics"
        headers:
          X-API-Key: ${googlesecretmanager:projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION}
    

    Más información

    Para obtener más información sobre el uso del proveedor googlesecretmanager, visita el repositorio opentelemetry-collector-contrib.