Secrets in der Messwertkonfiguration des Ops-Agent verwalten

Zum Konfigurieren einiger Drittanbieterintegrationen müssen Sie Secrets wie Passwörter für die Messwertempfänger des Ops-Agent angeben. Standardmäßig werden diese Secrets als Klartext in der config.yaml-Datei des Agents gespeichert. Diese Secrets sind in den Systemlogs enthalten, die vom Agent geschrieben und an Cloud Logging übertragen werden. Dadurch sind die Secrets außerhalb der virtuellen Maschine (VM) sichtbar, auf der der Ops-Agent ausgeführt wird.

Ab der Ops-Agent-Version 2.57.0, können Sie einen in Secret Manager integrierten OpenTelemetry-Anbieter verwenden, um Klartext-Secrets in Ihren Konfigurationsdateien zu vermeiden.

Ein Anbieter ist eine OpenTelemetry-Konfigurationskomponente, ähnlich den Empfänger- und Prozessorkomponenten. Jeder Anbieter hat einen Typ und jeder Anbietertyp ordnet einen bestimmten Bezeichner in der Konfiguration einem Wert zu.

Der googlesecretmanager-Bereitsteller ordnet Secret Manager-Bezeichner den Secrets zu, z. B. Passwörtern, Tokens und API-Schlüsseln, die Sie in Secret Manager gespeichert haben. Die Verwendung des googlesecretmanager-Anbieters bietet folgende Vorteile:

  • Erweiterte Sicherheitsfunktionen: Ihre Konfigurationsdateien enthalten keine vertraulichen Informationen wie Passwörter. Die eigentlichen Secrets werden in Secret Manager gespeichert, einem Dienst, der speziell für das sichere Speichern, den Zugriff und die Verwaltung vertraulicher Daten entwickelt wurde.
  • Geringeres Risiko der Offenlegung: Secret Manager ruft Secrets während der Initialisierung des Ops-Agents ab. Dadurch wird verhindert, dass Klartext-Secrets versehentlich in Logs erfasst werden.

Sie können googlesecretmanager nur in der Konfiguration der Messwerterfassung in benutzerdefinierten Ops-Agent-Konfigurationen verwenden. Verwenden Sie den Anbieter nicht, um Secrets in der Konfiguration der Loggerfassung zu ersetzen.

Hinweis

Wenn Sie den googlesecretmanager-Bereitsteller verwenden möchten, müssen Sie die Secret Manager API aktivieren und den Zugriff auf die API zulassen. Gehen Sie dazu so vor:

  1. Installieren Sie die Google Cloud CLI und melden Sie sich dann mit Ihrer föderierten Identität in der gcloud CLI an. Initialisieren Sie die Google Cloud CLI nach der Anmeldung mit dem folgenden Befehl: initialize

    gcloud init
  2. Legen Sie das Standardprojekt für die Google Cloud CLI fest:

    gcloud config set project PROJECT_ID
    

    Ersetzen Sie vor dem Ausführen des vorherigen Befehls die PROJECT_ID Variable durch die ID Ihres Google Cloud Projekts.

  3. Aktivieren Sie die Secret Manager API:

    Erforderliche Rollen zum Aktivieren von APIs

    Zum Aktivieren von APIs benötigen Sie die Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen.

    gcloud services enable secretmanager.googleapis.com
  4. Aktualisieren Sie die OAuth-Zugriffsbereiche für Ihre Instanz, um den erforderlichen Bereich für Secret Manager einzuschließen: 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"
    

    Ersetzen Sie vor dem Ausführen des vorherigen Befehls die folgenden Variablen:

    • INSTANCE_ID: die ID Ihrer VM.
    • SERVICE_ACCT_EMAIL: die Adresse des Dienstkontos, das mit der VM verknüpft ist.

    Weitere Informationen finden Sie unter Auf die Secret Manager API zugreifen.

  5. Gewähren Sie dem Nutzer, der die Ops-Agent-Konfigurationen verwaltet die Berechtigungen, die zum Erstellen und Verwalten von Secrets erforderlich sind. Die Identity and Access Management-Rolle roles/secretManager.secretAdmin enthält die erforderlichen Berechtigungen:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="user:USER_EMAIL" \
      --role=roles/secretManager.secretAdmin
    

    Ersetzen Sie vor dem Ausführen des vorherigen Befehls die folgenden Variablen:

    • PROJECT_ID: die ID Ihres Google Cloud Projekts.
    • USER_EMAIL: die Adresse des Nutzers, dem die Rolle gewährt wird.
  6. Gewähren Sie dem Dienstkonto, das mit der VM verknüpft ist, die Berechtigungen, die es für den Zugriff auf die Secrets benötigt. Die Identity and Access Management-Rolle roles/secretManager.secretAccessor enthält die erforderlichen Berechtigungen:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCT_EMAIL" \
      --role=roles/secretManager.secretAccessor
    

    Ersetzen Sie vor dem Ausführen des vorherigen Befehls die folgenden Variablen:

    • PROJECT_ID: die ID Ihres Google Cloud Projekts.
    • SERVICE_ACCT_EMAIL: die Adresse des Dienstkontos, das mit der VM verknüpft ist.

Klartext-Secrets durch verwaltete Secrets ersetzen

So vermeiden Sie die Verwendung von Klartext-Secrets in Ihren Konfigurationsdateien mit Secret Manager und dem googlesecretmanager-Bereitsteller:

  1. Erstellen Sie in Secret Manager für jedes Klartext-Secret in Ihren Konfigurationsdateien ein Secret.
  2. Ersetzen Sie jedes Klartext-Secret in Ihren Konfigurationsdateien durch einen Verweis auf das entsprechende Secret in Secret Manager.

Wenn Sie beispielsweise einen mysql-Messwertempfänger verwenden, kann Ihre Konfigurationsdatei einen Eintrag wie den folgenden enthalten:

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

In diesem Beispiel möchten Sie den String plaintext-secret in Secret Manager platzieren und dann das Klartext-Secret durch einen Verweis auf das verwaltete Secret ersetzen.

Secret Manager-Secrets für Klartext-Secrets erstellen

Führen Sie den folgenden Befehl aus, um ein Secret Manager-Secret mit dem Klartext-Secret plaintext-secret zu erstellen:
echo -n "plaintext-secret" | gcloud secrets create SECRET_NAME \
    --replication-policy="automatic" \
    --data-file=-

Ersetzen Sie vor dem Ausführen des vorherigen Befehls die folgenden Variablen:

  • plaintext-secret: Ersetzen Sie dies durch Ihr Klartext-Secret.
  • SECRET_NAME: Ersetzen Sie dies durch einen aussagekräftigen Namen für Ihr Secret.

Der vollständig qualifizierte Ressourcenname Ihres neuen Secrets hat das folgende Format mit einer VERSION von 1:

projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION

Weitere Informationen zum Speichern, zur Versionsverwaltung und zum Zugreifen auf Secrets in Secret Manager finden Sie unter Secret erstellen.

Klartext-Secrets ersetzen

Ersetzen Sie in Ihren Konfigurationsdateien jedes Klartext-Secret durch einen Verweis auf den googlesecretmanager-Anbieter und den Ressourcennamen des verwalteten Secrets, wie im folgenden Beispiel gezeigt:

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

Ops-Agent neu starten

Linux

  1. Führen Sie den folgenden Befehl auf der Instanz aus, um den Agent neu zu starten:
    sudo systemctl restart google-cloud-ops-agent
    
  2. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob der Agent neu gestartet wurde. Prüfen Sie dann, ob die Komponenten „Metrics-Agent“ und „Logging-Agent“ gestartet wurden:
    sudo systemctl status "google-cloud-ops-agent*"
    

Windows

  1. Stellen Sie mithilfe von RDP oder einem ähnlichen Tool eine Verbindung zu Ihrer Instanz her und melden Sie sich bei Windows an.
  2. Öffnen Sie ein PowerShell-Terminal mit Administratorberechtigungen. Klicken Sie dazu mit der rechten Maustaste auf das PowerShell-Symbol und wählen Sie Als Administrator ausführen aus.
  3. Führen Sie den folgenden PowerShell-Befehl aus, um den Agent neu zu starten:
    Restart-Service google-cloud-ops-agent -Force
    
  4. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob der Agent neu gestartet wurde. Prüfen Sie dann, ob die Komponenten "Metrics-Agent" und "Logging-Agent" gestartet wurden:
    Get-Service google-cloud-ops-agent*