Ihr Job benötigt möglicherweise Abhängigkeiten, die API-Schlüssel, Passwörter, Zertifikate oder andere vertrauliche Informationen erfordern. Für Cloud Run empfiehlt Google, diese Art von vertraulichen Informationen in einem Secret zu speichern, das in Secret Manager erstellt wurde.
Es gibt zwei Möglichkeiten, ein Secret für Ihre Container verfügbar zu machen:
- Stellen Sie jedes Secret als Volume bereit, das dem Container als Datei zur Verfügung steht. Beim Lesen eines Volumes wird immer der Secret-Wert aus Secret Manager abgerufen, sodass er mit der neuesten Version verwendet werden kann. 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 setzen.
Weitere Informationen finden Sie im Dokument Best Practices für Secret Manager.
So werden Secrets bei der Bereitstellung und zur Laufzeit geprüft
Während der Joberstellung werden alle Secrets, ob als Umgebungsvariable oder als Volume bereitgestellt, überprüft, um sicherzustellen, dass das Dienstkonto, mit dem der Container ausgeführt wird, Zugriff darauf hat. Wenn eine Prüfung fehlschlägt, schlägt die Joberstellung fehl.
Während der Laufzeit beim Start von Instanzen:
- Wenn das Secret eine Umgebungsvariable ist, wird der Wert des Secrets vor dem Starten der Instanz abgerufen. Wenn also der Secret-Abruf fehlschlägt, wird die Instanz nicht gestartet.
- Wenn das Secret als Volume bereitgestellt wird, wird beim Start der Instanz keine Prüfung durchgeführt. Während der Laufzeit schlägt jedoch der Zugriff auf ein bereitgestelltes Volume fehl, wenn auf ein Secret nicht zugegriffen werden kann.
Volume-Inhaberschaft variiert je nach Ausführungsumgebung und Bereitstellungstyp
Wenn Sie ein Volume mithilfe der Ausführungsumgebung der zweiten Generation bereitstellen, was bei Jobs der Fall ist, gehört das Volume dem Root.
Hinweise
Sie können ein vorhandenes Secret Manager-Secret verwenden oder ein neues Secret erstellen.
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:
-
Rolle Cloud Run Admin (
roles/run.admin
) im Cloud Run-Job -
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ätshauptkontos 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 Ihr Cloud Run-Job 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 Ihren Job über die Google Cloud Console, die Google Cloud CLI oder YAML zugänglich machen:
Console
Wechseln Sie in der Google Cloud Console zur Seite "Cloud Run-Jobs":
Klicken Sie auf Container bereitstellen und wählen Sie Job aus, um die Seite mit den anfänglichen Jobeinstellungen auszufüllen. Wählen Sie den Job aus und klicken Sie dann auf Bearbeiten, wenn Sie einen vorhandenen Job konfigurieren.
Klicken Sie auf Container, Variablen und Secrets, Verbindungen, Sicherheit, um die Seite mit den Jobattributen zu maximieren.
Klicken Sie auf den Tab Variablen und Secrets.
- Auf dem Tab "Variablen und Secrets":
- Klicken Sie unter Secrets auf Secret-Referenz hinzufügen.
- Wählen Sie aus der Drop-down-Liste Secret das gewünschte Secret aus.
- Wählen Sie im Drop-down-Menü Referenzmethode aus, wie Sie Ihr Secret verwenden möchten: als Volume oder als Umgebungsvariable bereitgestellt.
- Wenn Sie das Secret als Volume bereitstellen,
- Geben Sie unter Bereitstellungspfad den Bereitstellungspfad an, den Sie für Secrets verwenden.
- Standardmäßig ist die neueste Version ausgewählt. Sie können bei Bedarf eine bestimmte Version auswählen. Geben Sie unter Angegebene Pfade für Secret-Versionen den Pfad zur Version und zur Versionsnummer an.
- Klicken Sie auf Fertig.
- Wenn Sie das Secret als Umgebungsvariable bereitstellen möchten:
- Geben Sie den Namen der Variablen an und wählen Sie die Secret-Version aus. Mit Neueste können Sie immer die aktuelle Secret-Version verwenden.
- Klicken Sie auf Fertig.
- Auf dem Tab "Variablen und Secrets":
Klicken Sie auf Erstellen oder Aktualisieren.
gcloud
So geben Sie das Secret in einer Umgebungsvariablen an, wenn Sie einen neuen Job erstellen:
gcloud run jobs create JOB_NAME \ --image IMAGE_URL \ --set-secrets ENV_VAR_NAME=SECRET_NAME:VERSION
Ersetzen
- JOB_NAME durch den Namen des Jobs.
- ENV_VAR_NAME durch den Namen der Umgebungsvariablen, die für das Secret verwendet werden soll.
- SECRET_NAME durch den Secret-Namen im selben Projekt, z. B.
mysecret
. - VERSION mit der Secret-Version. Verwenden Sie
latest
für die neueste Version oder eine Zahl, z. B.2
. - Ersetzen Sie IMAGE_URL durch einen Verweis auf das Container-Image, z. B.
us-docker.pkg.dev/cloudrun/container/job:latest
.
Mit einer durch Kommas getrennten Liste können Sie mehrere Umgebungsvariablen/Secret-Paare angeben.
So geben Sie das Secret in einer Umgebungsvariablen an, wenn Sie einen Job aktualisieren:
gcloud run jobs update JOB_NAME \ --set-secrets ENV_VAR_NAME=SECRET_NAME:VERSION
So stellen Sie das Secret beim Erstellen eines Jobs als Volume bereit:
gcloud run jobs create JOB_NAME \ --image IMAGE_URL \ --set-secrets=PATH=SECRET_NAME:VERSION
Ersetzen Sie:
- JOB_NAME durch den Namen des Jobs.
- IMAGE_URL durch einen Verweis auf das Container-Image, z. B.
us-docker.pkg.dev/cloudrun/container/job:latest
. PATH
durch den Bereitstellungspfad des Volumes und des Dateinamens des Secrets. Sie muss mit einem Schrägstrich beginnen, z. B./etc/secrets/dbconfig/password
, wobei/etc/secrets/dbconfig/
der Bereitstellungspfad des Volumes undpassword
der Dateiname des Secrets ist.SECRET_NAME
durch den Secret-Namen im selben Projekt, z. B.mysecret
.VERSION
mit der Secret-Version. Verwenden Sielatest
für die neueste Version oder eine Zahl, z. B.2
.
So aktualisieren Sie ein Secret in einem vorhandenen Job:
gcloud run jobs update JOB_NAME \ --update-secrets=PATH=SECRET_NAME:VERSION
YAML
Aufgrund von Einschränkungen zur API-Kompatibilität müssen die Secret-Standorte in einer Annotation gespeichert werden.
Wenn Sie einen neuen Dienst erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Dienst aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:
gcloud run jobs describe JOB_NAME --format export > job.yaml
Für Secrets, die als Umgebungsvariablen bereitgestellt werden:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB spec: template: spec: template: spec: containers: - env: - name: SECRET_NAME valueFrom: secretKeyRef: key: VERSION name: SECRET_LOOKUP_NAME image: IMAGE_URL
Ersetzen Sie:
JOB
durch den Namen des Jobs.- IMAGE_URL durch einen Verweis auf das Container-Image, z. B.
us-docker.pkg.dev/cloudrun/container/hello:latest
. Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat die FormLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. SECRET_NAME
durch den Secret-Namen, z. B.mysecret
.VERSION
mit der Secret-Version. Verwenden Sielatest
für die neueste Version oder eine Zahl, z. B.2
.SECRET_LOOKUP_NAME
durch einen Namen mit einer gültigen Syntax für Secret-Namen (z. B.my-secret
); dieser kannSECRET_NAME
entsprechen.
Für Secrets, die als Dateipfade bereitgestellt werden:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: template: spec: template: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME secret: items: - key: VERSION path: FILENAME secretName: SECRET_LOOKUP_NAME
Ersetzen Sie:
JOB_NAME
durch den Namen des Jobs.- IMAGE_URL durch einen Verweis auf das Container-Image, z. B.
us-docker.pkg.dev/cloudrun/container/hello:latest
. Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat die FormLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. PATH
durch den Bereitstellungspfad des Volumes und des Dateinamens des Secrets. Sie muss mit einem Schrägstrich beginnen, z. B./etc/secrets/dbconfig/password
, wobei/etc/secrets/dbconfig/
der Bereitstellungspfad des Volumes undpassword
der Dateiname des Secrets ist.PROJECT_NUMBER
durch die Projektnummer des Projekts, in dem das Secret erstellt wurde.SECRET_NAME
durch den Namen des Secrets, z. B.mysecret
.VERSION
mit der Secret-Version. Verwenden Sielatest
für die neueste Version oder eine Zahl, z. B.2
.SECRET_LOOKUP_NAME
durch einen Namen mit einer gültigen Syntax für Secret-Namen (z. B.my-secret
); dieser kannSECRET_NAME
entsprechen.VOLUME_NAME
durch einen beliebigen Namen (z. B.my-volume
). Er kann mitSECRET_NAME
identisch sein.
Auf Secrets aus anderen Projekten verweisen
Sie können auf ein Secret von einem anderen Projekt verweisen, wenn dem Dienstkonto Ihres Projekts Zugriff auf das Secret gewährt wurde.
Console
Wechseln Sie in der Google Cloud Console zur Seite "Cloud Run-Jobs":
Klicken Sie auf Container bereitstellen und wählen Sie Job aus, um die Seite mit den anfänglichen Jobeinstellungen auszufüllen. Wählen Sie den Job aus und klicken Sie dann auf Bearbeiten, wenn Sie einen vorhandenen Job konfigurieren.
Klicken Sie auf Container, Variablen und Secrets, Verbindungen, Sicherheit, um die Seite mit den Jobattributen zu maximieren.
Klicken Sie auf den Tab Variablen und Secrets.
- Auf dem Tab "Variablen und Secrets":
- Klicken Sie unter Secrets auf Secret-Referenz hinzufügen.
- Wählen Sie in der Drop-down-Liste Secrets die Option Secret manuell eingeben aus, um das folgende Formular anzuzeigen:
- Geben Sie im Formular Secret nach Ressourcen-ID hinzufügen das Secret aus dem anderen Projekt im Format
projects/PROJECT_NUMBER/secrets/SECRET_NAME
ein. Sie können alternativ die Ressourcen-ID aus dem anderen Projekt kopieren und einfügen, wenn Sie Zugriff darauf haben, indem Sie das Secret auswählen, auf die Ellipse Aktionen rechts neben dem Secret klicken und Ressourcen-ID kopieren aus dem Pull-down-Menü auswählen. - Klicken Sie auf Secret hinzufügen.
- Wählen Sie im Drop-down-Menü Referenzmethode aus, wie Sie Ihr Secret verwenden möchten: als Volume oder als Umgebungsvariable bereitgestellt.
- Wenn Sie das Secret als Volume bereitstellen,
- Geben Sie unter Bereitstellungspfad den Bereitstellungspfad an, den Sie für Secrets verwenden.
- Standardmäßig ist die neueste Version ausgewählt. Sie können bei Bedarf eine bestimmte Version auswählen. Geben Sie unter Angegebene Pfade für Secret-Versionen den Pfad zur Version und zur Versionsnummer an.
- Klicken Sie auf Fertig.
- Wenn Sie das Secret als Umgebungsvariable bereitstellen möchten:
- Geben Sie den Namen der Variablen an und wählen Sie die Secret-Version aus. Mit Neueste können Sie immer die aktuelle Secret-Version verwenden.
- Klicken Sie auf Fertig.
- Auf dem Tab "Variablen und Secrets":
Klicken Sie auf Erstellen oder Aktualisieren.
gcloud
So stellen Sie ein Secret beim Aktualisieren eines Jobs als Volume bereit:
gcloud run jobs update JOB_NAME \ --image IMAGE_URL \ --update-secrets=PATH=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION
- JOB_NAME durch den Namen des Jobs.
- IMAGE_URL durch einen Verweis auf das Container-Image, z. B.
us-docker.pkg.dev/cloudrun/container/hello:latest
. Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat die FormLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. PATH
durch den Bereitstellungspfad des Volumes und des Dateinamens des Secrets. Sie muss mit einem Schrägstrich beginnen, z. B./etc/secrets/dbconfig/password
, wobei/etc/secrets/dbconfig/
der Bereitstellungspfad des Volumes undpassword
der Dateiname des Secrets ist.PROJECT_NUMBER
durch die Projektnummer des Projekts, in dem das Secret erstellt wurde.SECRET_NAME
durch den Secret-Namen, z. B.mysecret
.VERSION
mit der Secret-Version. Verwenden Sielatest
für die neueste Version oder eine Zahl, z. B.2
.
YAML
Wenn Sie einen neuen Job erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Dienst aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:
gcloud run jobs describe JOB_NAME --format export > job.yaml
Aufgrund von Einschränkungen zur API-Kompatibilität müssen die Secret-Standorte in einer Annotation gespeichert werden.
Für Secrets, die als Umgebungsvariablen bereitgestellt werden:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB spec: template: metadata: annotations: run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME spec: template: spec: containers: - env: - name: SECRET_NAME valueFrom: secretKeyRef: key: VERSION name: SECRET_LOOKUP_NAME image: IMAGE_URL
Ersetzen Sie:
JOB
durch den Namen des Jobs.- IMAGE_URL durch einen Verweis auf das Container-Image, z. B.
us-docker.pkg.dev/cloudrun/container/hello:latest
. Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat die FormLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. SECRET_NAME
durch den Namen des Secrets, z. B.mysecret
.VERSION
mit der Secret-Version. Verwenden Sielatest
für die neueste Version oder eine Zahl, z. B.2
.PROJECT_NUMBER
durch die Projektnummer des Projekts, in dem das Secret erstellt wurde.SECRET_LOOKUP_NAME
durch einen Namen mit einer gültigen Syntax für Secret-Namen (z. B.my-secret
); dieser kannSECRET_NAME
entsprechen.
Für Secrets, die als Dateipfade bereitgestellt werden:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: template: metadata: annotations: run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME spec: template: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME secret: items: - key: VERSION path: FILENAME secretName: SECRET_LOOKUP_NAME
Ersetzen Sie:
JOB_NAME
durch den Namen des Jobs.- IMAGE_URL durch einen Verweis auf das Container-Image, z. B.
us-docker.pkg.dev/cloudrun/container/hello:latest
. Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat die FormLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. PATH
durch den Bereitstellungspfad des Volumes und des Dateinamens des Secrets. Sie muss mit einem Schrägstrich beginnen, z. B./etc/secrets/dbconfig/password
, wobei/etc/secrets/dbconfig/
der Bereitstellungspfad des Volumes undpassword
der Dateiname des Secrets ist.PROJECT_NUMBER
durch die Projektnummer des Projekts, in dem das Secret erstellt wurde.SECRET_NAME
durch den Namen des Secrets, z. B.mysecret
.VERSION
mit der Secret-Version. Verwenden Sielatest
für die neueste Version oder eine Zahl, z. B.2
.SECRET_LOOKUP_NAME
durch einen Namen mit einer gültigen Syntax für Secret-Namen (z. B.my-secret
); dieser kannSECRET_NAME
entsprechen.VOLUME_NAME
durch einen beliebigen Namen (z. B.my-volume
). Er kann mitSECRET_NAME
identisch sein.
Einstellungen für Secrets aufrufen
So rufen Sie die aktuellen Secret-Einstellungen für Ihren Cloud Run-Job auf:
Console
Wechseln Sie in der Google Cloud Console zur Seite "Cloud Run-Jobs":
Klicken Sie auf den gewünschten Job, um die Seite Jobdetails zu öffnen.
Klicken Sie auf den Tab Konfiguration.
Suchen Sie die CPU-Einstellung in den Konfigurationsdetails.
gcloud
Verwenden Sie den folgenden Befehl:
gcloud run jobs describe JOB_NAME
Suchen Sie in der zurückgegebenen Konfiguration nach der Einstellung für Secrets.
Unzulässige Pfade und Einschränkungen
Mit Cloud Run können Sie keine Secrets unter /dev
, /proc
und /sys
oder in ihren Unterverzeichnissen bereitstellen.
Wenn Sie Secrets unter /tmp
bereitstellen und die Ausführungsumgebung der ersten Generation verwenden, lesen Sie die Informationen zum bekannten Problem unter Secrets unter /tmp
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.
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.