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 Run-Funktionen 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.
Vorbereitung
-
Enable the Secret Manager API.
- 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 Run Functions das Compute-Standarddienstkonto zur Authentifizierung bei Secret Manager. Wenn das Standarddienstkonto bereits die Rolle "Bearbeiter" hat, sollten Sie die Rolle "Bearbeiter" durch weniger strikte Rollen ersetzen.
Um Secret Manager mit Cloud Run-Funktionen zu verwenden, weisen Sie dem mit Ihrer Funktion verknüpften Dienstkonto die Rolle roles/secretmanager.secretAccessor
zu:
Rufen Sie in der Google Cloud Console die Seite "Secret Manager" auf:
Zur Seite "Secret Manager"Klicken Sie auf das Kästchen neben dem Secret.
Falls das Fenster noch nicht geöffnet ist, klicken Sie auf Infofeld ansehen, um es zu öffnen.
Klicken Sie im Infofeld auf Hauptkonto hinzufügen.
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:
Das nutzerverwaltete Dienstkonto, das der Funktion zum Zeitpunkt der Bereitstellung zugewiesen ist. Informationen zum Bereitstellen einer Funktion mit einem nutzerverwalteten Dienstkonto finden Sie unter Einzelne Dienstkonten für Ihre Funktion verwenden.
Das Compute-Standarddienstkonto. Weitere Informationen zu Rollenempfehlungen finden Sie unter Empfehlungen zur geringsten Berechtigung.
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:
- Legen Sie während der Bereitstellung der Funktion eine Laufzeit-Umgebungsvariable fest.
- Machen Sie das Secret in einer Umgebungsvariable für Ihre Funktion zugänglich.
- Greifen Sie zur Laufzeit programmatisch auf die Umgebungsvariable zu.
Secret als Volume bereitstellen
So stellen Sie ein Secret als Volume bereit:
Erstellen Sie eine Datei mit Ihrem Secret.
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.Machen Sie das Secret als bereitgestelltes Volume für Ihre Funktion zugänglich.
Zur Laufzeit programmatisch den Dateiinhalt lesen, 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:
Rufen Sie in der Google Cloud Console die Seite „Cloud Run-Funktionen“ auf:
Zur Seite „Cloud Run-Funktionen“Klicken Sie auf den Namen der Funktion, die auf ein Secret zugreifen können soll.
Klicken Sie auf Bearbeiten.
Klicken Sie auf Laufzeit, Build..., um die erweiterten Konfigurationsoptionen zu maximieren.
Klicken Sie auf Sicherheit und Image-Repository, um den Tab zu öffnen.
Klicken Sie auf Secret-Referenz hinzufügen, um ein Secret für die Funktion festzulegen.
Wählen Sie das Secret aus, das zugänglich sein soll. Erstellen Sie gegebenenfalls ein Secret.
So verweisen Sie auf ein Secret im selben Projekt wie die Funktion:
- Wählen Sie das Secret aus der Drop-down-Liste aus.
So verweisen Sie auf ein Secret von einem anderen Projekt:
Prüfen Sie, ob dem Dienstkonto Ihres Projekts Zugriff auf das Secret gewährt wurde.
Wählen Sie Secret manuell eingeben.
Geben Sie die Ressourcen-ID des Secrets im folgenden Format ein:
projects/PROJECT_ID/secrets/SECRET_NAME
Ersetzen Sie dabei Folgendes:
PROJECT_ID: Die ID des Projekts, in dem sich das Secret befindet.
SECRET_NAME: Der Name des Secrets im Secret Manager.
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:
Wählen Sie Mounted as Volume aus.
Geben Sie im Feld Bereitstellungspfad den Bereitstellungspfad für dieses Secret ein. In diesem Verzeichnis werden alle Versionen Ihres Secrets abgelegt.
Geben Sie im Feld Path1 den Namen der Datei ein, die bereitgestellt werden soll. Dieser Name wird mit dem Bereitstellungspfad aus dem vorherigen Schritt zusammengeführt, um den vollständigen Bereitstellungspfad zu bilden, unter dem das Secret bereitgestellt wird.
Wählen Sie im Drop-down Version1 die Version des Secrets aus, auf die verwiesen werden soll.
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:
Wählen Sie Als Umgebungsvariable verfügbar gemacht aus.
Geben Sie im Feld Name1 den Namen der Umgebungsvariable ein.
Wählen Sie im Drop-down Version1 die Version des Secrets aus, auf die verwiesen werden soll.
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.
Klicken Sie auf Fertig.
Klicken Sie auf Weiter.
Klicken Sie auf Bereitstellen.
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'
Ersetzen Sie dabei Folgendes:
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 undlatest
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
oderlatest
.
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'
Ersetzen Sie dabei Folgendes:
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
oderlatest
.
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'
Ersetzen Sie dabei Folgendes:
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
Ersetzen Sie dabei Folgendes:
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 undlatest
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
oderlatest
.
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'
Ersetzen Sie dabei Folgendes:
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
oderlatest
.SECRET_FILE_PATH: Der vollständige Pfad des Secrets. Beispiel:
/mnt/secrets/primary/latest
, wobei/mnt/secrets/primary/
der Bereitstellungspfad undlatest
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
Rufen Sie in der Google Cloud Console die Seite „Cloud Run-Funktionen“ auf:
Zur Seite „Cloud Run-Funktionen“Klicken Sie auf den Namen der Funktion, um eines ihrer Secrets zu entfernen.
Klicken Sie auf Bearbeiten.
Klicken Sie auf Laufzeit-, Build- und Verbindungseinstellungen, um die erweiterten Konfigurationsoptionen zu maximieren.
Klicken Sie auf Sicherheit und Image-Repository, um den Tab Sicherheit zu öffnen.
Bewegen Sie den Mauszeiger auf das Secret, das Sie entfernen möchten, und klicken Sie dann auf
Löschen.Klicken Sie auf Weiter.
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
Ersetzen Sie dabei Folgendes:
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, ...'
Ersetzen Sie dabei Folgendes:
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 undlatest
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
Rufen Sie in der Google Cloud Console die Seite „Cloud Run-Funktionen“ auf:
Zur Seite „Cloud Run-Funktionen“Klicken Sie auf den Namen der Funktion, um deren verfügbaren Secrets aufzurufen.
Klicken Sie auf Bearbeiten.
Klicken Sie auf Laufzeit-, Build- und Verbindungseinstellungen, um die erweiterten Konfigurationsoptionen zu maximieren.
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
- Erwägen Sie Funktionen zu entwickeln, die Secret Manager verwenden, mithilfe der Secret Manager-Clientbibliotheken.