Gestire i secret nella configurazione del Collector OpenTelemetry creato da Google

La configurazione di alcuni componenti, come ricevitori o esportatori, potrebbe richiedere di fornire segreti, come le password. Puoi includere questi secret come testo non crittografato nei file di configurazione dell'agente di raccolta. Tuttavia, questi secret sono inclusi nei log di sistema scritti dall'agente di raccolta e trasmessi a Cloud Logging, esponendo i secret oltre il nodo o la macchina virtuale (VM) in cui è in esecuzione l'agente di raccolta.

A partire dalla versione 0.126.0 dell'agente di raccolta creato da Google, puoi utilizzare un provider OpenTelemetry integrato con 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 fornitore ha un tipo e ogni tipo di fornitore 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:

  • Sicurezza avanzata: i file di configurazione non contengono informazioni sensibili come le password. I secret effettivi sono archiviati in Secret Manager, un servizio progettato appositamente per archiviare, accedere e gestire in modo sicuro i dati sensibili.
  • Rischio di esposizione ridotto: Secret Manager recupera i secret durante l'inizializzazione del raccoglitore OpenTelemetry integrato in Google, il che impedisce la registrazione accidentale di secret in testo normale nei log.

Prima di iniziare

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

  1. Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:

    gcloud init

    Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  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 progetto Google Cloud .

  3. Abilita l'API Secret Manager:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin), che include l'autorizzazione serviceusage.services.enable. Scopri come concedere i ruoli.

    gcloud services enable secretmanager.googleapis.com
  4. Aggiorna gli ambiti di accesso OAuth per la tua 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ù, vedi Accedere all'API Secret Manager.

  5. Concedi all'utente che gestisce le configurazioni di Google-Built OpenTelemetry Collector 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 tuo 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.

Sostituisci i secret in testo non crittografato con secret gestiti

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

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

Ad esempio, se utilizzi un esportatore http, il file di configurazione potrebbe includere una voce simile alla seguente:

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

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

Crea secret di Secret Manager per i secret in formato non crittografato

Per creare un secret di Secret Manager contenente il secret plaintext-secret in testo non crittografato, esegui questo 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 archiviazione, controllo delle versioni e accesso ai secret in Secret Manager, consulta Crea un secret.

Sostituisci i secret in formato non crittografato

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

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

Scopri di più

Per saperne di più sull'utilizzo del provider googlesecretmanager, visita il repository opentelemetry-collector-contrib.