Secrets konfigurieren

Mit Secret Manager können Sie API-Schlüssel, Passwörter und andere sensible Informationen sicher speichern. In dieser Anleitung erfahren Sie, wie Sie Cloud Functions für den Zugriff auf Secrets konfigurieren, die in Secret Manager gespeichert sind.

In diesem Dokument werden beide Möglichkeiten erläutert, wie Sie ein Secret für Ihre Funktion bereitstellen können:

  • Das Secret als Volume bereitstellen. Dadurch wird das Secret für die Funktion als Datei verfügbar. Wenn Sie ein Secret als Volume referenzieren, greift Ihre Funktion jedes Mal, wenn die Datei vom Laufwerk gelesen wird, auf den Secret-Wert aus dem Secret Manager zu. Dies macht das Bereitstellen als Volume zu einer guten Strategie, wenn Sie auf die neueste Version des Secrets verweisen möchten, anstatt auf eine angepinnte Version des Secrets. Diese Methode funktioniert auch gut, wenn Sie die Secret-Rotation implementieren möchten.

  • Das Secret als Umgebungsvariable übergeben. Umgebungsvariablenwerte werden zum Zeitpunkt des Instanzstarts aufgelöst. Wenn Sie diese Methode verwenden, empfehlen wir daher, auf eine angeheftete Version des Secrets anstatt auf die neueste Version des Secrets zu verweisen.

Weitere Informationen zur Verwendung von Secret Manager finden Sie unter Secret Manager – Übersicht. Wie Sie Secrets erstellen und darauf zugreifen können, erfahren Sie unter Secret erstellen.

Hinweis

  1. Secret Manager API aktivieren.

    Aktivieren Sie die API

  2. Erstellen Sie ein Secret in Secret Manager, wenn noch nicht geschehen, wie unter Secret erstellen beschrieben.

Zugriff auf Secrets gewähren

Ihre Funktion kann auf Secrets zugreifen, die sich im selben Projekt wie die Funktion befinden, sowie auf Secrets, die sich in einem anderen Projekt befinden. Für den Zugriff auf ein Secret muss dem Laufzeitdienstkonto der Funktion Zugriff auf das Secret gewährt werden.

Standardmäßig verwendet Cloud Functions das App Engine-Standarddienstkonto zur Authentifizierung bei Secret Manager. Für den Produktionseinsatz empfiehlt Google, dass Sie Ihre Funktion so konfigurieren, dass sie sich mit einem nutzerverwalteten Dienstkonto authentifiziert, dem die Rollen mit den geringsten Berechtigungen zugewiesen sind, die zum Ausführen der Aufgaben dieser Funktion erforderlich sind.

Um Secret Manager mit Cloud Functions zu verwenden, weisen Sie dem mit Ihrer Funktion verknüpften Dienstkonto die Rolle roles/secretmanager.secretAccessor zu:

  1. Rufen Sie in der Google Cloud Console die Seite "Secret Manager" auf:
    Zur Seite "Secret Manager"

  2. Klicken Sie auf das Kästchen neben dem Secret.

  3. Falls das Fenster noch nicht geöffnet ist, klicken Sie auf Infofeld ansehen, um es zu öffnen.

  4. Klicken Sie im Infofeld auf Hauptkonto hinzufügen.

  5. Geben Sie im Feld Neue Hauptkonten das Dienstkonto ein, das Ihre Funktion für ihre Identität verwendet. Das Dienstkonto der Funktion ist eines der folgenden:

  6. Wählen Sie im Drop-down-Menü Rolle auswählen die Option Secret Manager und dann Zugriffsfunktion für Secret Manager-Secret aus.

Funktion für den Zugriff auf Secrets vorbereiten

Es gibt zwei Möglichkeiten, ein Secret für Ihre Funktion bereitzustellen:

  • Das Secret als Umgebungsvariable übergeben.
  • Das Secret als Volume bereitstellen.

Umgebungsvariablen

So verwenden Sie Umgebungsvariablen, um Secrets für Ihre Funktion verfügbar zu machen:

  1. Legen Sie während der Funktionsbereitstellung eine Laufzeit-Umgebungsvariable fest.
  2. Machen Sie das Secret in einer Umgebungsvariable für Ihre Funktion zugänglich.
  3. Greifen Sie zur Laufzeit programmatisch auf die Umgebungsvariable zu.

Secret als Volume bereitstellen

So stellen Sie ein Secret als Volume bereit:

  1. Erstellen Sie eine Datei mit Ihrem Secret.

  2. Wählen Sie ein nicht verwendetes, Nicht-System-Verzeichnis wie z. B. /mnt/secrets als Bereitstellungspfad für Ihr Secret. Alle bereits vorhandenen Dateien oder Unterverzeichnisse in diesem Verzeichnis mit Ausnahme Ihres Secrets und seiner Versionen sind nach der Bereitstellung des Secrets nicht mehr zugänglich.

  3. Machen Sie das Secret als bereitgestelltes Volume für Ihre Funktion zugänglich.

  4. Zur Laufzeit lesen Sie den Dateiinhalt programmatisch, um auf den Secret-Wert zuzugreifen.

Wenn das Secret beispielsweise in /mnt/secrets/secret1 bereitgestellt wurde, muss die Funktion diese Datei lesen. Hier ist ein Beispiel dafür, wie Sie die Datei mit Node.js synchron lesen können:

fs.readFileSync('/mnt/secrets/secret1')

Secret für eine Funktion zugänglich machen

Wenn Sie von einer Funktion auf ein Secret verweisen möchten, müssen Sie das Secret zuerst für die Funktion zugänglich machen. Sie können ein Secret für neue oder vorhandene Funktionen über die Google Cloud Console oder die Google Cloud CLI zugänglich machen:

Console

So machen Sie ein Secret für eine Funktion zugänglich:

  1. Rufen Sie die Seite "Cloud Functions" in der Google Cloud Console auf:
    Zur Seite "Cloud Functions"

  2. Klicken Sie auf den Namen der Funktion, die auf ein Secret zugreifen können soll.

  3. Klicken Sie auf Bearbeiten.

  4. Klicken Sie auf Laufzeit, Build..., um die erweiterten Konfigurationsoptionen zu maximieren.

  5. Klicken Sie auf Sicherheit und Image-Repository, um den Tab zu öffnen.

  6. Klicken Sie auf Secret-Referenz hinzufügen, um ein Secret für die Funktion festzulegen.

  7. Wählen Sie das Secret aus, das zugänglich sein soll. Erstellen Sie ein Secret, falls erforderlich.

    • So verweisen Sie auf ein Secret im selben Projekt wie die Funktion:

      1. Wählen Sie das Secret aus der Drop-down-Liste aus.
    • So verweisen Sie auf ein Secret von einem anderen Projekt:

      1. Prüfen Sie, ob dem Dienstkonto Ihres Projekts Zugriff auf das Secret gewährt wurde.

      2. Wählen Sie Secret manuell eingeben.

      3. Geben Sie die Ressourcen-ID des Secrets im folgenden Format ein:

        projects/PROJECT_ID/secrets/SECRET_NAME

        Dabei gilt:

        • PROJECT_ID: Die ID des Projekts, in dem sich das Secret befindet.

        • SECRET_NAME: Der Name des Secrets im Secret Manager.

  8. Wählen Sie die Referenzmethode für das Secret aus. Sie können das Secret als Volume bereitstellen oder als Umgebungsvariable freigeben.

    • So stellen Sie das Secret als Volume bereit:

      1. Wählen Sie Mounted as Volume aus.

      2. Geben Sie im Feld Bereitstellungspfad den Bereitstellungspfad für dieses Secret ein. Dies ist das Verzeichnis, in dem alle Versionen Ihres Secrets gespeichert sind.

      3. Geben Sie im Feld Path1 den Namen der Datei ein, die bereitgestellt werden soll. Dieser Name wird mit dem Bereitstellungspfad aus dem vorherigen Schritt verkettet, um den vollständigen Bereitstellungspfad zu bilden, unter dem Ihr Secret bereitgestellt wird.

      4. Wählen Sie im Drop-down Version1 die Version des Secrets aus, auf die verwiesen werden soll.

      5. Um zusätzliche Versionen dieses Secrets bereitzustellen, klicken Sie auf +Hinzufügen, um zusätzliche Pfade und die Versionen dieses Secrets anzugeben, die darin bereitgestellt werden sollen.

    • So machen Sie das Secret als Umgebungsvariable verfügbar:

      1. Wählen Sie Als Umgebungsvariable verfügbar gemacht aus.

      2. Geben Sie im Feld Name1 den Namen der Umgebungsvariable ein.

      3. Wählen Sie im Drop-down Version1 die Version des Secrets aus, auf die verwiesen werden soll.

      4. Um zusätzliche Versionen dieses Secrets für Ihre Funktion verfügbar zu machen, klicken Sie auf +Hinzufügen, um zusätzliche Umgebungsvariablen und die Versionen dieses Secrets zu definieren, die darin gespeichert werden sollen.

  9. Klicken Sie auf Fertig.

  10. Klicken Sie auf Next (Weiter).

  11. Klicken Sie auf Deploy.

Der Code Ihrer Funktion kann jetzt auf das Secret verweisen.

gcloud

Geben Sie einen der folgenden Befehle ein, um ein Secret für eine Funktion zugänglich zu machen.

  • Geben Sie den folgenden Befehl ein, um das Secret als Volume bereitzustellen:

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --set-secrets 'SECRET_FILE_PATH=SECRET:VERSION'
    

    Dabei gilt:

    • FUNCTION_NAME: Der Name Ihrer Funktion.

    • RUNTIME: Die Laufzeit, in der die Funktion ausgeführt werden soll.

    • SECRET_FILE_PATH: Der vollständige Pfad des Secrets. Beispiel: /mnt/secrets/primary/latest, wobei /mnt/secrets/primary/ der Bereitstellungspfad und latest der Pfad des Secrets ist. Sie können auch die Bereitstellungspfade und die Pfade des Secrets separat angeben:

      --set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'

    • SECRET: Der Name des Secrets im Secret Manager.

    • VERSION: Die zu verwendende Version des Secrets. Beispiel: 1 oder latest.

    Das Flag --set-secrets überschreibt alle vorhandenen Secrets. Wenn Sie die vorhandenen Secrets der Funktion beibehalten möchten, verwenden Sie stattdessen das Flag --update-secrets.

  • Geben Sie den folgenden Befehl ein, um das Secret als Umgebungsvariable bereitzustellen:

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --set-secrets 'ENV_VAR_NAME=SECRET:VERSION'
    

    Dabei gilt:

    • FUNCTION_NAME: Der Name Ihrer Funktion.

    • RUNTIME: Die Laufzeit, in der die Funktion ausgeführt werden soll.

    • ENV_VAR_NAME: Der Name der Umgebungsvariablen

    • SECRET: Der Name des Secrets im Secret Manager.

    • VERSION: Die zu verwendende Version des Secrets. Beispiel: 1 oder latest.

    Das Flag --set-secrets überschreibt alle vorhandenen Secrets. Wenn Sie die vorhandenen Secrets der Funktion beibehalten möchten, verwenden Sie stattdessen das Flag --update-secrets.

  • Sie können auf ein Secret von einem anderen Projekt verweisen, wenn dem Dienstkonto der Funktion Zugriff auf das Secret gewährt wurde. Verwenden Sie den Ressourcenpfad des Secrets, um auf ein Secret von einem anderen Projekt zu verweisen:

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --update-secrets 'SECRET_FILE_PATH=SECRET_RESOURCE_PATH:VERSION'
    

    Dabei gilt:

    • FUNCTION_NAME: Der Name Ihrer Funktion.

    • SECRET_RESOURCE_PATH: Der Ressourcenpfad für das Secret des Projekts. Der Ressourcenpfad hat das folgende Format:

      projects/PROJECT_ID/secrets/SECRET_NAME

      Dabei gilt:

      • PROJECT_ID: Die ID des Projekts, in dem sich das Secret befindet.

      • SECRET_NAME: Der Name des Secrets im Secret Manager.

    • RUNTIME: Die Laufzeit, in der die Funktion ausgeführt werden soll.

    • SECRET_FILE_PATH: Der vollständige Pfad des Secrets. Beispiel: /mnt/secrets/primary/latest, wobei /mnt/secrets/primary/ der Bereitstellungspfad und latest der Pfad des Secrets ist. Sie können auch die Bereitstellungspfade und die Pfade des Secrets separat angeben:

      --set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'

    • SECRET: Der Name des Secrets im Secret Manager.

    • VERSION: Die zu verwendende Version des Secrets. Beispiel: 1 oder latest.

  • Sie können mehrere Secrets gleichzeitig aktualisieren. Trennen Sie die Konfigurationsoptionen für jedes Secret durch ein Komma. Mit dem folgenden Befehl wird ein Secret aktualisiert, das als Volume bereitgestellt wird, und ein weiteres Secret, das als Umgebungsvariable bereitgestellt wird.

    Geben Sie den folgenden Befehl ein, um vorhandene Secrets zu aktualisieren:

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --update-secrets 'ENV_VAR_NAME=SECRET:VERSION, \
    SECRET_FILE_PATH=SECRET:VERSION'
    

    Dabei gilt:

    • FUNCTION_NAME: Der Name Ihrer Funktion.

    • RUNTIME: Die Laufzeit, in der die Funktion ausgeführt werden soll.

    • ENV_VAR_NAME: Der Name der Umgebungsvariablen

    • SECRET: Der Name des Secrets im Secret Manager.

    • VERSION: Die zu verwendende Version des Secrets. Beispiel: 1 oder latest.

    • SECRET_FILE_PATH: Der vollständige Pfad des Secrets. Beispiel: /mnt/secrets/primary/latest, wobei /mnt/secrets/primary/ der Bereitstellungspfad und latest der Pfad des Secrets ist. Sie können auch die Bereitstellungspfade und die Pfade des Secrets separat angeben:

      --set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'

Secrets aus einer Funktion entfernen

Sie können Secrets aus einer Funktion mithilfe der Google Cloud Console oder der gcloud CLI entfernen:

Console

  1. Rufen Sie die Seite "Cloud Functions" in der Google Cloud Console auf:
    Zur Seite "Cloud Functions"

  2. Klicken Sie auf den Namen der Funktion, um eines ihrer Secrets zu entfernen.

  3. Klicken Sie auf Bearbeiten.

  4. Klicken Sie auf Laufzeit-, Build- und Verbindungseinstellungen, um die erweiterten Konfigurationsoptionen zu maximieren.

  5. Klicken Sie auf Sicherheit und Image-Repository, um den Tab Sicherheit zu öffnen.

  6. Halten Sie den Zeiger über das Secret, das Sie entfernen möchten, und klicken Sie dann auf Löschen.

  7. Klicken Sie auf Next (Weiter).

  8. Klicken Sie auf Bereitstellen.

gcloud

Sie können alle Secrets aus einer Funktion entfernen oder ein oder mehrere Secrets angeben, die entfernt werden sollen:

  • Führen Sie den folgenden Befehl aus, um alle Secrets zu entfernen:

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --clear-secrets
    

    Dabei gilt:

    • FUNCTION_NAME: Der Name Ihrer Funktion.

    • RUNTIME: Die Laufzeit, in der die Funktion ausgeführt werden soll.

    Alle Secrets werden von der Funktion gelöscht.

  • Mit dem Flag --remove-secrets geben Sie eine Liste der zu entfernenden Secrets an. Mit dem folgenden Befehl wird ein Secret gelöscht, das als Volume bereitgestellt wird, und ein weiteres Secret, das als Umgebungsvariable freigegeben wird.

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --remove-secrets='ENV_VAR_NAME,SECRET_FILE_PATH, ...'
    

    Dabei gilt:

    • FUNCTION_NAME: Der Name Ihrer Funktion.

    • RUNTIME: Die Laufzeit, in der die Funktion ausgeführt werden soll.

    • ENV_VAR_NAME: Der Name der Umgebungsvariablen

    • SECRET_FILE_PATH: Der vollständige Pfad des Secrets. Beispiel: /mnt/secrets/primary/latest, wobei /mnt/secrets/primary/ der Bereitstellungspfad und latest der Pfad des Secrets ist. Sie können auch die Bereitstellungspfade und die Pfade des Secrets separat angeben:

      --set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'

    Die angegebenen Secrets werden aus der Funktion entfernt.

Zugängliche Secrets der Funktion ansehen

Mit der Google Cloud Console oder der gcloud CLI können Sie sehen, auf welche Secrets Ihre Funktion zugreifen kann:

Console

  1. Rufen Sie die Seite "Cloud Functions" in der Google Cloud Console auf:
    Zur Seite "Cloud Functions"

  2. Klicken Sie auf den Namen der Funktion, um deren verfügbaren Secrets aufzurufen.

  3. Klicken Sie auf Bearbeiten.

  4. Klicken Sie auf Laufzeit-, Build- und Verbindungseinstellungen, um die erweiterten Konfigurationsoptionen zu maximieren.

  5. Klicken Sie auf Sicherheit, um den Tab „Sicherheit“ zu öffnen.

Auf dem Tab „Sicherheit“ werden die Secrets aufgelistet, auf die die Funktion zugreifen kann.

gcloud

Mit dem Befehl gcloud functions describe können Sie sehen, welche Secrets für Ihre Funktion verfügbar sind:

gcloud functions describe FUNCTION_NAME

Ersetzen Sie FUNCTION_NAME durch den Namen Ihrer Funktion.

Nächste Schritte