Gestire i secret nella configurazione delle metriche di Ops Agent

La configurazione di alcune integrazioni di terze parti richiede la fornitura di secret, ad esempio password, per i ricevitori di metriche di Ops Agent. Per impostazione predefinita, questi secret vengono archiviati come testo normale nel file config.yaml dell'agente. Questi secret sono inclusi nei log di sistema scritti dall'agente e trasmessi a Cloud Logging, esponendo i secret oltre la macchina virtuale (VM) su cui è in esecuzione Ops Agent.

A partire dalla versione 2.57.0 di Ops Agent, puoi utilizzare un provider OpenTelemetry integrato in Secret Manager per eliminare i secret in testo non crittografato nei file di configurazione.

Un provider è un componente di configurazione OpenTelemetry, analogo ai componenti ricevitore e processore. Ogni provider ha un tipo e ogni tipo di provider mappa un identificatore specifico nella configurazione a un valore.

Il provider googlesecretmanager mappa gli identificatori di Secret Manager ai secret, come password, token e chiavi API, che hai archiviato in Secret Manager. L'utilizzo del provider googlesecretmanager offre i seguenti vantaggi:

  • Maggiore sicurezza: i file di configurazione non contengono informazioni sensibili come le password. I secret effettivi vengono archiviati in Secret Manager, un servizio progettato specificamente per archiviare, accedere e gestire in modo sicuro i dati sensibili.
  • Rischio di esposizione ridotto: Secret Manager recupera i secret durante l'inizializzazione di Ops Agent, il che impedisce che i secret in testo non crittografato vengano registrati accidentalmente nei log.

Puoi utilizzare googlesecretmanager solo nella configurazione della raccolta di metriche nelle configurazioni personalizzate di Ops Agent. Non utilizzare il provider per sostituire i secret nella configurazione della raccolta di log.

Prima di iniziare

Per utilizzare il provider googlesecretmanager, devi abilitare l'API Secret Manager e consentire l'accesso all'API, come descritto nei seguenti passaggi:

  1. Installa Google Cloud CLI, quindi accedi a gcloud CLI con la tua identità federata. Dopo aver eseguito l'accesso, inizializza Google Cloud CLI eseguendo il comando seguente:

    gcloud init
  2. Imposta il progetto predefinito per Google Cloud CLI:

    gcloud config set project PROJECT_ID
    

    Prima di eseguire il comando precedente, sostituisci la variabile PROJECT_ID con l'identificatore del tuo Google Cloud progetto.

  3. Abilita l'API Secret Manager:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    gcloud services enable secretmanager.googleapis.com
  4. Aggiorna gli ambiti di accesso OAuth per l'istanza in modo da includere l'ambito richiesto per 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"
    

    Prima di eseguire il comando precedente, sostituisci le seguenti variabili:

    • INSTANCE_ID: l'identificatore della VM.
    • SERVICE_ACCT_EMAIL: l'indirizzo del account di servizio associato alla VM.

    Per saperne di più, consulta Accedere all'API Secret Manager.

  5. Concedi all'utente che gestisce le configurazioni di Ops Agent le autorizzazioni necessarie per creare e gestire i secret. Il ruolo Identity and Access Management roles/secretManager.secretAdmin include le autorizzazioni necessarie:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="user:USER_EMAIL" \
      --role=roles/secretManager.secretAdmin
    

    Prima di eseguire il comando precedente, sostituisci le seguenti variabili:

    • PROJECT_ID: l'identificatore del Google Cloud progetto.
    • USER_EMAIL: l'indirizzo dell'utente a cui viene concesso il ruolo.
  6. Concedi al account di servizio associato alla VM le autorizzazioni necessarie per accedere ai secret. Il ruolo Identity and Access Management roles/secretManager.secretAccessor include le autorizzazioni necessarie:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCT_EMAIL" \
      --role=roles/secretManager.secretAccessor
    

    Prima di eseguire il comando precedente, sostituisci le seguenti variabili:

    • PROJECT_ID: l'identificatore del tuo Google Cloud progetto.
    • SERVICE_ACCT_EMAIL: l'indirizzo del account di servizio associato alla VM.

Sostituire i secret in testo non crittografato con i secret gestiti

Per eliminare l'utilizzo di secret in testo non crittografato nei file di configurazione utilizzando Secret Manager e il provider googlesecretmanager:

  1. Crea un secret in Secret Manager per ogni secret in testo normale nei file di configurazione.
  2. Sostituisci ogni secret in testo non crittografato nei file di configurazione con un riferimento al secret corrispondente in Secret Manager.

Ad esempio, se utilizzi un ricevitore di metriche mysql, il file di configurazione potrebbe includere una voce simile alla seguente:

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

In questo esempio, vuoi inserire la stringa plaintext-secret in Secret Manager e poi sostituire il secret in testo non crittografato con un riferimento al secret gestito.

Creare secret di Secret Manager per i secret in testo normale

Per creare un secret di Secret Manager contenente il secret in testo non crittografato plaintext-secret, esegui il seguente comando:
echo -n "plaintext-secret" | gcloud secrets create SECRET_NAME \
    --replication-policy="automatic" \
    --data-file=-

Prima di eseguire il comando precedente, sostituisci le seguenti variabili:

  • plaintext-secret: sostituisci con il secret in testo normale.
  • SECRET_NAME: sostituisci con un nome significativo per il secret.

Il nome della risorsa completo del nuovo secret ha il seguente formato, con un VERSION di 1:

projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION

Per saperne di più su come archiviare, controllare le versioni e accedere ai secret in Secret Manager, consulta Creare un secret.

Sostituire i secret in testo normale

Per aggiornare i file di configurazione, sostituisci ogni secret in testo non crittografato con un riferimento al provider googlesecretmanager e al nome della risorsa del secret gestito, come mostrato nell'esempio seguente:

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

Riavviare Ops Agent

Linux

  1. Per riavviare l'agente, esegui il seguente comando sull'istanza:
    sudo systemctl restart google-cloud-ops-agent
    
  2. Per verificare che l'agente sia stato riavviato, esegui il seguente comando e verifica che i componenti "Agente Metriche" e "Agente Logging" siano stati avviati:
    sudo systemctl status "google-cloud-ops-agent*"
    

Windows

  1. Connettiti all'istanza utilizzando RDP o uno strumento simile e accedi a Windows.
  2. Apri un terminale PowerShell con privilegi di amministratore facendo clic con il tasto destro del mouse sull'icona di PowerShell e selezionando Esegui come amministratore
  3. Per riavviare l'agente, esegui il seguente comando PowerShell:
    Restart-Service google-cloud-ops-agent -Force
    
  4. Per verificare che l'agente sia stato riavviato, esegui il seguente comando e verifica che i componenti "Agente Metriche" e "Agente Logging" siano stati avviati:
    Get-Service google-cloud-ops-agent*