Für Ihre Instanz sind möglicherweise API-Schlüssel, Passwörter, Zertifikate oder andere vertrauliche Informationen für ihre Abhängigkeiten erforderlich. Für Cloud Run, empfiehlt Google, diese vertraulichen Informationen in einem Secret zu speichern, das Sie in Secret Manager erstellen.
Es gibt folgende Möglichkeiten, ein Secret für Ihre Container verfügbar zu machen:
- Wenn Sie jedes Secret als Volume bereitstellen, macht Cloud Run das Secret für den Container als Dateien verfügbar. Beim Lesen eines Volumes ruft Cloud Run immer den Secret-Wert aus Secret Manager ab, um den Wert mit der neuesten Version zu verwenden. Diese Methode funktioniert auch gut mit der Secret-Rotation.
- Übergeben Sie ein Secret mithilfe von Umgebungsvariablen.
Umgebungsvariablen werden beim Starten der Instanz aufgelöst. Wenn Sie diese Methode verwenden, empfiehlt Google, dass Sie das Secret auf eine bestimmte Version statt auf die neueste Version (
latest) setzen.
Weitere Informationen finden Sie unter Secret Manager Best Practices.
So werden Secrets bei der Bereitstellung und zur Laufzeit geprüft
Bei der Bereitstellung der Instanz prüft Cloud Run alle von Ihnen verwendeten Secrets. Bei der Prüfung wird sichergestellt, dass das Dienstkonto, mit dem der Container ausgeführt wird, die Berechtigung zum Zugriff auf diese Secrets hat.
Während der Laufzeit beim Start von Instanzen:
- Wenn das Secret eine Umgebungsvariable ist, ruft Cloud Run den Wert des Secrets vor dem Starten der Instanz ab. Wenn der Secret-Abruf fehlschlägt, wird die Instanz nicht gestartet.
- Wenn Sie das Secret als Volume bereitstellen, führt Cloud Run beim Start der Instanz keine Prüfungen durch. Während der Laufzeit schlägt jedoch der Zugriff auf ein bereitgestelltes Volume fehl, wenn auf ein Secret nicht zugegriffen werden kann.
Volume-Inhaberschaft
Die Inhaberschaft eines Cloud Run-Secret-Volumes variiert je nach Ausführungsumgebung und Bereitstellungstyp.
Wenn Sie ein Secret-Volume mit der Ausführungsumgebung der zweiten Generation bereitstellen, was bei Instanzen immer der Fall ist, ist der Root-Nutzer der Inhaber des Volumes.
Hinweis
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.- Verwenden Sie ein vorhandenes Secret oder erstellen Sie ein Secret in Secret Manager, wie unter Secret erstellen beschrieben.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zur Konfiguration von Secrets benötigen:
- Cloud Run Admin (
roles/run.admin) für die Cloud Run-Instanz - Dienstkontonutzer (
roles/iam.serviceAccountUser) für die Dienstidentität
Damit Cloud Run auf das Secret zugreifen kann, muss die Dienstidentität die folgende Rolle haben:
- Zugriffsperson für Secret Manager-Secret (
roles/secretmanager.secretAccessor)
Eine Anleitung zum Hinzufügen des Dienstidentitätspools zur Rolle „Zugriffsperson für Secret Manager-Secret“ finden Sie unter Zugriff auf Secrets verwalten.
Eine Liste der IAM-Rollen und -Berechtigungen im Zusammenhang mit Cloud Run finden Sie unter IAM-Rollen für Cloud Run und IAM-Berechtigungen für Cloud Run. Wenn Ihre Cloud Run-Instanz mit Google Cloud APIs wie Cloud-Clientbibliotheken verknüpft ist, lesen Sie die Konfigurationsanleitung für Dienstidentitäten. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Bereitstellungsberechtigungen und Zugriff verwalten.
Secret für Cloud Run zugänglich machen
Sie können ein Secret für Ihre Instanz über die Google Cloud CLI oder YAML bereitstellen, wenn Sie eine neue Instanz bereitstellen oder eine vorhandene Instanz aktualisieren:
gcloud
Führen Sie den folgenden Befehl aus, um das Secret beim Bereitstellen einer Instanz als Umgebungsvariable bereitzustellen:
gcloud beta run instances deploy INSTANCE \ --image IMAGE_URL \ --update-secrets=ENV_VAR_NAME=SECRET_NAME:VERSION
Ersetzen Sie Folgendes:
INSTANCE: Der Name der Instanz.IMAGE_URL: Ein Verweis auf das Container-Image, z. B.us-docker.pkg.dev/cloudrun/container/hello:latest.ENV_VAR_NAME: Der Name der Umgebungsvariablen, die Sie mit dem Secret verwenden möchten.SECRET_NAME: Der Secret-Name im selben Projekt, z. B.mysecret.VERSION: Die Secret-Version. Verwenden Sielatestfür die neueste Version oder eine Zahl, z. B.2.
Wenn Sie mehrere Secrets gleichzeitig aktualisieren möchten, 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. Führen Sie den folgenden Befehl aus, um vorhandene Secrets zu aktualisieren:
gcloud beta run instances deploy INSTANCE \ --image IMAGE_URL \ --update-secrets=PATH=SECRET_NAME:VERSION,ENV_VAR_NAME=SECRET_NAME:VERSION
Mit dem Flag
--set-secretskönnen Sie vorhandene Secrets löschen und ein neues Secret für die Instanz zugänglich machen:gcloud beta run instances update INSTANCE \ --set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION"
YAML
Wenn Sie eine neue Instanz erstellen, überspringen Sie diesen Schritt. Wenn Sie eine vorhandene Instanz aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
Für Secrets, die als Umgebungsvariablen bereitgestellt werden:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE annotations: run.googleapis.com/launch-stage: BETA spec: containers: - image: IMAGE_URL env: - name: ENV_VAR valueFrom: secretKeyRef: key: SECRET_VERSION name: SECRET_NAME
Ersetzen Sie Folgendes:
- INSTANCE: Der Name Ihrer Cloud Run-Instanz.
IMAGE_URL: Ein Verweis auf das Container-Image, z. B.us-docker.pkg.dev/cloudrun/container/hello:latest.- ENV_VAR: Der Name der Umgebungsvariablen.
- SECRET_VERSION: Die Secret-Version. Verwenden Sie
latestfür die neueste Version oder eine Zahl, z. B.2. - SECRET_NAME: Der Secret-Name, z. B.
mysecret.
Für Secrets, die als Dateipfade bereitgestellt werden:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE annotations: run.googleapis.com/launch-stage: BETA spec: containers: - image: IMAGE_URL volumeMounts: - name: VOLUME_NAME mountPath: MOUNT_PATH volumes: - name: VOLUME_NAME secret: secretName: SECRET_NAME items: - key: SECRET_VERSION path: SECRET_NAME
Ersetzen Sie Folgendes:
- INSTANCE: Der Name Ihrer Cloud Run-Instanz.
IMAGE_URL: Ein Verweis auf das Container-Image, z. B.us-docker.pkg.dev/cloudrun/container/hello:latest.- VOLUME_NAME: Ein beliebiger Name für Ihr Volume.
- MOUNT_PATH: Der relative Pfad, unter dem Sie das
Volume bereitstellen, z. B.
/mnt/my-volume. - SECRET_NAME: Der Secret-Name, z. B.
mysecret. - SECRET_VERSION: Die Secret-Version. Verwenden Sie
latestfür die neueste Version oder eine Zahl, z. B.2.
Ersetzen Sie die Instanz mit dem folgenden Befehl durch die neue Konfiguration:
gcloud beta run services replace service.yaml
Auf Secrets aus anderen Projekten verweisen
Wenn Sie auf ein Secret aus einem anderen Projekt verweisen möchten, prüfen Sie, ob das Instanz konto Ihres Projekts Zugriff auf das Secret hat.
gcloud
Führen Sie den folgenden Befehl aus, um auf ein Secret als Umgebungsvariable zu verweisen:
gcloud beta run instances deploy INSTANCE \ --image IMAGE_URL \ --update-secrets=ENV_VAR_NAME=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION
Ersetzen Sie Folgendes:
- INSTANCE: Der Name der Instanz.
IMAGE_URL: Ein Verweis auf das Container-Image, z. B.us-docker.pkg.dev/cloudrun/container/hello:latest.- PROJECT_NUMBER: Die Projektnummer des Projekts, in dem das Secret erstellt wurde.
- SECRET_NAME: Der Secret-Name, z. B.
mysecret. - VERSION: Die Secret-Version. Verwenden Sie
latestfür die neueste Version oder eine Zahl, z. B.2.
YAML
Wenn Sie eine neue Instanz erstellen, überspringen Sie diesen Schritt. Wenn Sie eine vorhandene Instanz aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
Für Secrets, die als Umgebungsvariablen bereitgestellt werden:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE annotations: run.googleapis.com/launch-stage: BETA metadata: annotations: run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME spec: containers: - image: IMAGE_URL env: - name: ENV_VAR valueFrom: secretKeyRef: key: SECRET_VERSION name: SECRET_LOOKUP_NAME
Ersetzen Sie Folgendes:
- INSTANCE: Der Name Ihrer Cloud Run-Instanz.
- SECRET_LOOKUP_NAME: Ein beliebiger Name mit einer gültigen Secret-Namen-
Syntax, z. B.
my-secret. Er kann mit SECRET_NAME identisch sein. - PROJECT_NUMBER: Die Projektnummer des Projekts, in dem das Secret erstellt wurde.
- SECRET_NAME: Der Secret-Name, z. B.
mysecret. IMAGE_URL: Ein Verweis auf das Container-Image, z. B.us-docker.pkg.dev/cloudrun/container/hello:latest.- ENV_VAR: Der Name der Umgebungsvariablen.
- SECRET_VERSION: Die Secret-Version. Verwenden Sie
latestfür die neueste Version oder eine Zahl, z. B.2.
Für Secrets, die als Dateipfade bereitgestellt werden:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE annotations: run.googleapis.com/launch-stage: BETA metadata: annotations: run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME spec: containers: - image: IMAGE_URL volumeMounts: - name: VOLUME_NAME mountPath: MOUNT_PATH volumes: - name: VOLUME_NAME secret: secretName: SECRET_NAME items: - key: SECRET_VERSION path: SECRET_LOOKUP_NAME
Ersetzen Sie Folgendes:
- INSTANCE: Der Name Ihrer Cloud Run-Instanz.
- SECRET_LOOKUP_NAME: Ein beliebiger Name mit einer gültigen Secret-Namen-
Syntax, z. B.
my-secret. Er kann mit SECRET_NAME identisch sein. - PROJECT_NUMBER: Die Projektnummer des Projekts, in dem das Secret erstellt wurde.
- SECRET_NAME: Der Secret-Name, z. B.
mysecret. IMAGE_URL: Ein Verweis auf das Container-Image, z. B.us-docker.pkg.dev/cloudrun/container/hello:latest.- VOLUME_NAME: Ein beliebiger Name für Ihr Volume.
- MOUNT_PATH: Der relative Pfad, unter dem Sie das
Volume bereitstellen, z. B.
/mnt/my-volume. - SECRET_VERSION: Die Secret-Version. Verwenden Sie
latestfür die neueste Version oder eine Zahl, z. B.2.
Ersetzen Sie die Instanz mit dem folgenden Befehl durch die neue Konfiguration:
gcloud beta run instances replace instance.yaml
Einstellungen für Secrets aufrufen
So rufen Sie die aktuellen Secret-Einstellungen für Ihre Cloud Run-Instanz auf:
gcloud
Verwenden Sie den folgenden Befehl:
gcloud beta run instances describe INSTANCE
Suchen Sie in der zurückgegebenen Konfiguration nach der Einstellung für Secrets.
Secrets aus einer Instanz entfernen
Sie können Secrets aus einer Instanz mithilfe der gcloud CLI entfernen:
gcloud
Sie können alle Secrets aus einer Instanz entfernen oder ein oder mehrere Secrets angeben, die entfernt werden sollen.
Führen Sie den folgenden Befehl aus, um alle Secrets zu entfernen:
gcloud beta run instances deploy INSTANCE --image IMAGE_URL \ --clear-secrets
Ersetzen Sie Folgendes:
- INSTANCE: Der Name der Instanz.
IMAGE_URL: Ein Verweis auf das Container-Image, z. B.us-docker.pkg.dev/cloudrun/container/hello:latest.
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 beta run instances deploy INSTANCE --image IMAGE_URL \ --remove-secrets=ENV_VAR_NAME,SECRET_FILE_PATH
Ersetzen Sie Folgendes:
- INSTANCE: Der Name der Instanz.
IMAGE_URL: Ein Verweis auf das Container-Image, z. B.us-docker.pkg.dev/cloudrun/container/hello:latest.- 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 undlatestder 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 in Ihrem Code verwenden
Beispiele für den Zugriff auf Secrets in Ihrem Code als Umgebungsvariablen finden Sie unter der Anleitung zur Endnutzerauthentifizierung, insbesondere im Abschnitt Vertrauliche Konfigurationen mit Secret Manager verarbeiten.
Beschränkungen
In den folgenden Abschnitten werden die Einschränkungen beschrieben, die für die Bereitstellung von Secrets gelten.
Unzulässige Pfade
- Mit Cloud Run können Sie keine Secrets unter
/dev,/procund/sysoder in ihren Unterverzeichnissen bereitstellen. - Mit Cloud Run können Sie nicht mehrere Secrets auf demselben Pfad bereitstellen, da zwei Volume-Bereitstellungen nicht unter demselben Speicherort bereitgestellt werden können.
Regionale Secrets
Cloud Run unterstützt keine regionalen Secrets.
Verzeichnis überschreiben
Wenn das Secret als Volume in Cloud Run bereitgestellt wird und das letzte Verzeichnis im Volume-Bereitstellungspfad bereits vorhanden ist, sind alle Dateien oder Ordner im vorhandenen Verzeichnis nicht mehr zugänglich.
Wenn z. B. ein Secret mit dem Namen my-secret im Pfad /etc/app_data bereitgestellt wird, wird der gesamte Inhalt im Verzeichnis app_data überschrieben und die einzige sichtbare Datei ist /etc/app_data/my-secret.
Um das Überschreiben von Dateien in einem vorhandenen Verzeichnis zu vermeiden, erstellen Sie ein neues Verzeichnis für die Bereitstellung des Secrets, z. B. /etc/app_data/secrets, sodass der Bereitstellungspfad für das Secret /etc/app_data/secrets/my-secret lautet.