Gérer les secrets dans la configuration des métriques de l'agent Ops

Pour configurer certaines intégrations tierces, vous devez fournir des secrets, tels que des mots de passe, pour les récepteurs de métriques de l'agent Ops. Par défaut, ces secrets sont stockés en texte brut dans le fichier config.yaml de l'agent. Ces secrets sont inclus dans les journaux système écrits par l'agent et transmis à Cloud Logging, ce qui les expose au-delà de la machine virtuelle (VM) sur laquelle l'agent Ops est exécuté.

À partir de la version 2.57.0 de l'agent Ops, vous pouvez utiliser un fournisseur OpenTelemetry intégré à Secret Manager pour éliminer les secrets en texte brut dans vos fichiers de configuration.

Un fournisseur est un composant de configuration OpenTelemetry, analogue aux composants de récepteur et de processeur. Chaque fournisseur a un type, et chaque type de fournisseur mappe un identifiant spécifique dans la configuration à une valeur.

Le fournisseur googlesecretmanager mappe les identifiants Secret Manager aux secrets, tels que les mots de passe, les jetons et les clés API, que vous avez stockés dans Secret Manager. L'utilisation du fournisseur googlesecretmanager offre les avantages suivants :

  • Sécurité renforcée : vos fichiers de configuration ne contiennent pas d'informations sensibles, comme des mots de passe. Les secrets réels sont stockés dans Secret Manager, un service conçu spécifiquement pour stocker, accéder et gérer les données sensibles de manière sécurisée.
  • Réduction du risque d'exposition : Secret Manager récupère les secrets lors de l'initialisation de l'Agent Ops, ce qui empêche l'enregistrement accidentel de secrets en texte brut dans les journaux.

Vous ne pouvez utiliser googlesecretmanager que dans la configuration de la collecte de métriques dans les configurations personnalisées de l'agent Ops. N'utilisez pas le fournisseur pour remplacer les secrets dans la configuration de la collecte des journaux.

Avant de commencer

Pour utiliser le fournisseur googlesecretmanager, vous devez activer l'API Secret Manager et autoriser l'accès à l'API, comme décrit dans les étapes suivantes :

  1. Installez la Google Cloud CLI. Une fois que la Google Cloud CLI est installée, initialisez-la en exécutant la commande suivante :

    gcloud init

    Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  2. Définissez le projet par défaut pour Google Cloud CLI :

    gcloud config set project PROJECT_ID
    

    Avant d'exécuter la commande précédente, remplacez la variable PROJECT_ID par l'identifiant de votre projet Google Cloud .

  3. Enable the Secret Manager API:

    gcloud services enable secretmanager.googleapis.com
  4. Mettez à jour les champs d'application de l'accès OAuth pour votre instance afin d'inclure le champ d'application requis pour 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"
    

    Avant d'exécuter la commande précédente, remplacez les variables suivantes :

    • INSTANCE_ID : identifiant de votre VM.
    • SERVICE_ACCT_EMAIL : adresse du compte de service associé à la VM.

    Pour en savoir plus, consultez Accéder à l'API Secret Manager.

  5. Accordez à l'utilisateur qui gère les configurations de l'agent Ops les autorisations nécessaires pour créer et gérer des secrets. Le rôle Identity and Access Management roles/secretManager.secretAdmin inclut les autorisations nécessaires :
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="user:USER_EMAIL" \
      --role=roles/secretManager.secretAdmin
    

    Avant d'exécuter la commande précédente, remplacez les variables suivantes :

    • PROJECT_ID : identifiant de votre projet Google Cloud .
    • USER_EMAIL : adresse de l'utilisateur auquel le rôle est attribué.
  6. Accordez au compte de service associé à la VM les autorisations dont il a besoin pour accéder aux secrets. Le rôle Identity and Access Management roles/secretManager.secretAccessor inclut les autorisations nécessaires :
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCT_EMAIL" \
      --role=roles/secretManager.secretAccessor
    

    Avant d'exécuter la commande précédente, remplacez les variables suivantes :

    • PROJECT_ID : identifiant de votre projet Google Cloud .
    • SERVICE_ACCT_EMAIL : adresse du compte de service associé à la VM.
  7. Remplacer les secrets en texte brut par des secrets gérés

    Pour éviter d'utiliser des secrets en texte brut dans vos fichiers de configuration en utilisant Secret Manager et le fournisseur googlesecretmanager, procédez comme suit :

    1. Créez un secret dans Secret Manager pour chaque secret en texte brut dans vos fichiers de configuration.
    2. Remplacez chaque secret en texte brut dans vos fichiers de configuration par une référence au secret correspondant dans Secret Manager.

    Par exemple, si vous utilisez un récepteur de métriques mysql, votre fichier de configuration peut inclure une entrée semblable à la suivante :

    receivers:
      mysql:
        type: mysql
        username: root
        password: plaintext-secret
    

    Dans cet exemple, vous souhaitez placer la chaîne plaintext-secret dans Secret Manager, puis remplacer le secret en texte brut par une référence au secret géré.

    Créer des secrets Secret Manager pour les secrets en texte brut

    Pour créer un secret Secret Manager contenant le secret en texte brut plaintext-secret, exécutez la commande suivante :
    echo -n "plaintext-secret" | gcloud secrets create SECRET_NAME \
        --replication-policy="automatic" \
        --data-file=-
    

    Avant d'exécuter la commande précédente, remplacez les variables suivantes :

    • plaintext-secret : remplacez par votre secret en texte brut.
    • SECRET_NAME : remplacez cette valeur par un nom explicite pour votre secret.

    Le nom complet de la ressource de votre nouveau secret se présente au format suivant, avec un VERSION de 1 :

    projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION

    Pour en savoir plus sur le stockage, le versionnage et l'accès aux secrets dans Secret Manager, consultez Créer un secret.

    Remplacer les secrets en texte brut

    Pour mettre à jour vos fichiers de configuration, remplacez chaque secret en texte brut par une référence au fournisseur googlesecretmanager et au nom de ressource du secret géré, comme indiqué dans l'exemple suivant :

    receivers:
      mysql:
        type: mysql
        username: root
        password: ${googlesecretmanager:projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION}
    

    Redémarrer l'agent Ops

    Linux

    1. Pour redémarrer l'agent, exécutez la commande suivante sur votre instance :
      sudo systemctl restart google-cloud-ops-agent
      
    2. Pour vérifier que l'agent a redémarré, exécutez la commande suivante et vérifiez que les composants "Agent de métriques" et "Agent de journalisation" ont démarré :
      sudo systemctl status "google-cloud-ops-agent*"
      

    Windows

    1. Connectez-vous à votre instance via RDP ou un outil similaire, et connectez-vous à Windows.
    2. Ouvrez un terminal PowerShell avec des droits d'administrateur en effectuant un clic droit sur l'icône PowerShell, puis en sélectionnant Exécuter en tant qu'administrateur.
    3. Pour redémarrer l'agent, exécutez la commande PowerShell suivante :
      Restart-Service google-cloud-ops-agent -Force
      
    4. Pour vérifier que l'agent a redémarré, exécutez la commande suivante et vérifiez que les composants "Agent de métriques" et "Agent de journalisation" ont démarré :
      Get-Service google-cloud-ops-agent*