Secrets konfigurieren

Ihr Dienst benötigt möglicherweise Abhängigkeiten, die API-Schlüssel, Passwörter 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 Dienstbereitstellung 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 Dienstbereitstellung 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 eines Secrets bereitstellen, unterscheidet sich die Identität der Dateien und Verzeichnisse je nach Ausführungsumgebung der Arbeitslast und ob die Bereitstellung aus einem oder mehreren Containern besteht.

In der Ausführungsumgebung der ersten Generation, in der Sie einen einzelnen Container bereitstellen, gehört das Secret-Volume der Identität, die für den Container verwendet wird. In allen anderen Fällen gehört der Volume dem Root. Dazu zählen:

  • Ausführungsumgebung der ersten Generation, in der Sie mehrere Container bereitstellen
  • Die Umgebung der zweiten Generation

Vorbereitung

  1. Enable the Secret Manager API.

    Enable the API

  2. 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:

Damit Cloud Run auf das Secret zugreifen kann, muss die Dienstidentität die folgende Rolle haben:

Eine Anleitung zum Hinzufügen des Hauptkontos der Dienstidentität 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 Service 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

Jede Konfigurationsänderung führt zur Erstellung einer neuen Überarbeitung. Für nachfolgende Überarbeitungen gilt automatisch dieselbe Konfigurationseinstellung, sofern Sie sie nicht explizit aktualisieren.

Sie können ein Secret für Ihren Dienst über die Google Cloud Console, die Google Cloud CLI oder eine YAML-Datei bereitstellen, wenn Sie einen neuen Dienst bereitstellen oder einen vorhandenen Dienst aktualisieren und eine Überarbeitung bereitstellen: Klicken Sie auf den gewünschten Tab:

Console

  1. Rufen Sie in der Google Cloud Console Cloud Run auf.

    Zu Cloud Run

  2. Klicken Sie auf Container bereitstellen und wählen Sie Dienst aus, um einen neuen Dienst zu konfigurieren. Füllen Sie die Seite mit den anfänglichen Diensteinstellungen aus und klicken Sie dann auf Container, Volumes, Netzwerk, Sicherheit, um die Seite zur Dienstkonfiguration zu maximieren.

  3. Wenn Sie einen vorhandenen Dienst konfigurieren möchten, klicken Sie auf den Dienst und auf Neue Überarbeitung bearbeiten und bereitstellen.

  4. Folgen Sie der Anleitung, um das Secret als Volume bereitzustellen oder als Umgebungsvariable freizugeben.

    • So stellen Sie ein Secret als Volume bereit:

      1. Klicken Sie auf den Tab Volumes und wählen Sie Volume hinzufügen aus.
      2. Wählen Sie in der Liste Volume-Typ die Option Secret aus.
      3. Geben Sie im Feld Volumename einen Namen ein oder übernehmen Sie den Standardnamen.
      4. Wählen Sie in der Liste Secret das gewünschte Secret aus.
      5. Geben Sie im Feld Path 1 den Namen der Datei ein, die bereitgestellt werden soll.
      6. Wählen Sie in der Liste Version 1 die Version des Secrets aus, auf die verwiesen werden soll. Standardmäßig ist die neueste Version ausgewählt. Sie können bei Bedarf eine bestimmte Version auswählen.
      7. Klicken Sie auf Fertig.
      8. Rufen Sie den Tab Container auf, um das Secret im Container bereitzustellen.
      9. Klicken Sie auf dem Tab Volume-Bereitstellungen auf Volume bereitstellen.
      10. Wählen Sie in der Liste Name 1 den Volumenamen aus.
      11. Geben Sie im Feld Bereitstellungspfad 1 den Bereitstellungspfad für dieses Secret ein. In diesem Verzeichnis werden alle Versionen Ihres Secrets abgelegt.
      12. Klicken Sie auf Fertig.
      13. Klicken Sie auf Erstellen oder Bereitstellen.
    • So machen Sie das Secret als Umgebungsvariable verfügbar:

      1. Klicken Sie auf den Tab Container.
      2. Klicken Sie auf dem Tab Variablen und Secrets auf Secret referenzieren.
      3. Geben Sie im Feld Name 1 den Namen der Umgebungsvariable ein.
      4. Wählen Sie in der Liste Secret das gewünschte Secret aus.
      5. Wählen Sie in der Liste Version 1 die Version des Secrets aus, auf die verwiesen werden soll.
      6. Klicken Sie auf Fertig.
      7. Klicken Sie auf Erstellen oder Bereitstellen.

gcloud

Geben Sie einen der folgenden Befehle ein, damit Ihr Dienst auf ein Secret zugreifen kann:

  • So stellen Sie das Secret beim Bereitstellen eines Dienstes als Volume bereit:

    gcloud run deploy SERVICE --image IMAGE_URL  \
    --update-secrets=PATH=SECRET_NAME:VERSION

    Ersetzen Sie:

    • SERVICE durch den Namen des Dienstes.
    • 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 Form LOCATION-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 und password der Dateiname des Secrets ist.
    • 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.
  • So geben Sie das Secret beim Bereitstellen eines Dienstes als Umgebungsvariable an:

    gcloud run deploy SERVICE \
    --image IMAGE_URL \
    --update-secrets=ENV_VAR_NAME=SECRET_NAME:VERSION

    Ersetzen Sie:

    • SERVICE durch den Namen des Dienstes.
    • 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 Form LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • ENV_VAR_NAME durch den Namen der Umgebungsvariable, die Sie mit dem Secret verwenden möchten.
    • 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.
  • Sie können mehrere Secrets gleichzeitig aktualisieren. Trennen Sie dazu 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 run deploy SERVICE --image IMAGE_URL \
    --update-secrets=PATH=SECRET_NAME:VERSION,ENV_VAR_NAME=SECRET_NAME:VERSION
  • Mit dem Flag --set-secrets können Sie vorhandene Secrets löschen und ein neues Secret für den Dienst zugänglich machen:

    gcloud run services update SERVICE \
    --set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION"

YAML

  1. 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 services describe SERVICE --format export > service.yaml
  2. Für Secrets, die als Umgebungsvariablen bereitgestellt werden, env, aktualisieren Sie ENV_VAR, VERSION und/oder SECRET_NAME wunschgemäß. Wenn Sie mehrere Secrets als Umgebungsvariablen bereitgestellt haben, sind mehrere dieser Attribute vorhanden.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            env:
            - name: ENV_VAR
              valueFrom:
                secretKeyRef:
                  key: VERSION
                  name: SECRET_NAME
  3. Aktualisieren Sie MOUNT_PATH, VOLUME_NAME, VERSION, FILENAME und/oder SECRET_NAME wie gewünscht für Secrets, die als Dateipfade bereitgestellt werden. Wenn Sie mehrere Secrets als Dateipfade bereitgestellt haben, sind mehrere dieser Attribute vorhanden.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - mountPath: MOUNT_PATH
              name: VOLUME_NAME
          volumes:
          - name: VOLUME_NAME
            secret:
              items:
              - key: VERSION
                path: FILENAME
              secretName: SECRET_NAME

    Beachten Sie, dass VOLUME_NAME auf einen beliebigen Namen gesetzt werden kann.

    Ersetzen

    • SERVICE durch den Namen Ihres Cloud Run-Dienstes
    • 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 Form LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • REVISION durch einen neuen Überarbeitungsnamen oder löschen (falls vorhanden). Wenn Sie einen neuen Überarbeitungsnamen angeben, muss er die folgenden Kriterien erfüllen:
      • Beginnt mit SERVICE-
      • Enthält nur Kleinbuchstaben, Ziffern und -
      • Endet nicht mit -
      • Darf nicht mehr als 63 Zeichen enthalten
  4. Ersetzen Sie den Dienst mit dem folgenden Befehl durch die neue Konfiguration:

    gcloud run services replace service.yaml

Terraform

  1. Erstellen Sie ein Secret und eine Secret-Version.

    resource "google_secret_manager_secret" "default" {
      secret_id = "my-secret"
      replication {
        auto {}
      }
    }
    
    resource "google_secret_manager_secret_version" "default" {
      secret      = google_secret_manager_secret.default.name
      secret_data = "this is secret data"
    }
  2. Erstellen Sie ein Dienstkonto und gewähren Sie diesem Zugriff auf das Secret:

    resource "google_service_account" "default" {
      account_id   = "cloud-run-service-account"
      display_name = "Service account for Cloud Run"
    }
    
    resource "google_secret_manager_secret_iam_member" "default" {
      secret_id = google_secret_manager_secret.default.id
      role      = "roles/secretmanager.secretAccessor"
      # Grant the new deployed service account access to this secret.
      member     = "serviceAccount:${google_service_account.default.email}"
      depends_on = [google_secret_manager_secret.default]
    }
  3. Auf Secret Manager-Secrets kann über Cloud Run als bereitgestellte Dateipfade oder als Umgebungsvariablen zugegriffen werden.

    1. Verweisen Sie für Secrets, die als Dateipfade bereitgestellt werden, auf die Secret Manager-Ressource im volumes-Parameter. name entspricht einem Eintrag im volume_mounts-Parameter:

      resource "google_cloud_run_v2_service" "mounted_secret" {
        name     = "service-with-mounted-secret"
        location = "us-central1"
        ingress  = "INGRESS_TRAFFIC_ALL"
      
        deletion_protection = false # set to "true" in production
      
        template {
          volumes {
            name = "my-service-volume"
            secret {
              secret = google_secret_manager_secret.default.secret_id
              items {
                version = "latest"
                path    = "my-secret"
                mode    = 0 # use default 0444
              }
            }
          }
          containers {
            image = "us-docker.pkg.dev/cloudrun/container/hello"
            volume_mounts {
              name       = "my-service-volume"
              mount_path = "/secrets"
            }
          }
          service_account = google_service_account.default.email
        }
        depends_on = [google_secret_manager_secret_version.default]
      }
    2. Verweisen Sie für Secrets, die als Umgebungsvariablen bereitgestellt werden, auf die Secret Manager-Ressource im env-Parameter:

      resource "google_cloud_run_v2_service" "env_variable_secret" {
        name     = "service-with-env-var-secret"
        location = "us-central1"
        ingress  = "INGRESS_TRAFFIC_ALL"
      
        deletion_protection = false # set to "true" in production
      
        template {
          containers {
            image = "us-docker.pkg.dev/cloudrun/container/hello"
            env {
              name = "MY_SECRET"
              value_source {
                secret_key_ref {
                  secret  = google_secret_manager_secret.default.secret_id
                  version = "latest"
                }
              }
            }
          }
          service_account = google_service_account.default.email
        }
        depends_on = [google_secret_manager_secret_version.default]
      }

Auf Secrets aus anderen Projekten verweisen

Wenn Sie auf ein Secret aus einem anderen Projekt verweisen möchten, prüfen Sie, ob das Dienstkonto Ihres Projekts Zugriff auf das Secret hat.

Console

  1. Rufen Sie in der Google Cloud Console Cloud Run auf.

    Zu Cloud Run

  2. Klicken Sie auf Container bereitstellen und wählen Sie Dienst aus, um einen neuen Dienst zu konfigurieren. Füllen Sie die Seite mit den anfänglichen Diensteinstellungen aus und klicken Sie dann auf Container, Volumes, Netzwerk, Sicherheit, um die Seite zur Dienstkonfiguration zu maximieren.

  3. Wenn Sie einen vorhandenen Dienst konfigurieren möchten, klicken Sie auf den Dienst und auf Neue Überarbeitung bearbeiten und bereitstellen.

  4. Folgen Sie der Anleitung, um das Secret als Volume bereitzustellen oder als Umgebungsvariable freizugeben.

    • So stellen Sie ein Secret als Volume bereit:

      1. Klicken Sie auf den Tab Volumes und wählen Sie Volume hinzufügen aus.
      2. Wählen Sie in der Liste Volume-Typ die Option Secret aus.
      3. Geben Sie im Feld Volumename einen Namen ein oder übernehmen Sie den Standardnamen.
      4. Klicken Sie in der Liste Secret auf Secret manuell eingeben.
      5. Geben Sie die Ressourcen-ID des Secrets im folgenden Format ein:

        projects/PROJECT_NUMBER/secrets/SECRET_NAME
        

        Ersetzen Sie Folgendes:

        • PROJECT_NUMBER durch Ihre Google Cloud-Projektnummer. Eine detaillierte Anleitung zum Ermitteln der Projektnummer finden Sie unter Projekte erstellen und verwalten.

        • SECRET_NAME: Der Name des Secrets im Secret Manager.

      6. Geben Sie im Feld Path 1 den Namen der Datei ein, die bereitgestellt werden soll.

      7. Wählen Sie in der Liste Version 1 die Version des Secrets aus, auf die verwiesen werden soll. Standardmäßig ist die neueste Version ausgewählt. Sie können bei Bedarf eine bestimmte Version auswählen.

      8. Klicken Sie auf Fertig.

      9. Rufen Sie den Tab Container auf, um das Secret im Container bereitzustellen.

      10. Klicken Sie auf dem Tab Volume-Bereitstellungen auf Volume bereitstellen.

      11. Wählen Sie in der Liste Name 1 den Volumenamen aus.

      12. Geben Sie im Feld Bereitstellungspfad 1 den Bereitstellungspfad für dieses Secret ein. In diesem Verzeichnis werden alle Versionen Ihres Secrets abgelegt.

      13. Klicken Sie auf Fertig.

      14. Klicken Sie auf Erstellen oder Bereitstellen.

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

      1. Klicken Sie auf den Tab Container.
      2. Klicken Sie auf dem Tab Variablen und Secrets auf Secret referenzieren.
      3. Geben Sie im Feld Name 1 den Namen der Umgebungsvariable ein.
      4. Klicken Sie in der Liste Secret auf Secret manuell eingeben.
      5. Geben Sie die Ressourcen-ID des Secrets im folgenden Format ein:

        projects/PROJECT_NUMBER/secrets/SECRET_NAME
        

        Ersetzen Sie Folgendes:

        • PROJECT_NUMBER durch Ihre Google Cloud-Projektnummer. Eine detaillierte Anleitung zum Ermitteln der Projektnummer finden Sie unter Projekte erstellen und verwalten.

        • SECRET_NAME: Der Name des Secrets im Secret Manager.

      6. Wählen Sie in der Liste Version 1 die Version des Secrets aus, auf die verwiesen werden soll.

      7. Klicken Sie auf Fertig.

      8. Klicken Sie auf Erstellen oder Bereitstellen.

gcloud

  • So stellen Sie ein Secret beim Bereitstellen eines Dienstes als Volume bereit:

    gcloud run deploy SERVICE --image IMAGE_URL  \
    --update-secrets=PATH=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION

    Ersetzen Sie:

    • SERVICE durch den Namen des Dienstes.
    • 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 Form LOCATION-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 und password 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 Sie latest für die neueste Version oder eine Zahl, z. B. 2.

YAML

  1. 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 services describe SERVICE --format export > service.yaml

Aufgrund von Einschränkungen zur API-Kompatibilität müssen die Secret-Standorte in einer Annotation gespeichert werden.

  1. Für Secrets, die als Umgebungsvariablen bereitgestellt werden:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        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: VERSION
                  name: SECRET_LOOKUP_NAME

    Ersetzen Sie:

    • SERVICE durch den Namen des Dienstes.
    • 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 Form LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • ENV_VAR
    • 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 Sie latest 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 kann SECRET_NAME entsprechen.
  2. Für Secrets, die als Dateipfade bereitgestellt werden:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME
        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:

    • SERVICE durch den Namen des Dienstes.
    • 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 Form LOCATION-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 und password 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 Sie latest 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 kann SECRET_NAME entsprechen.
    • VOLUME_NAME durch einen beliebigen Namen (z. B. my-volume). Er kann mit SECRET_NAME identisch sein.

Einstellungen für Secrets aufrufen

So rufen Sie die aktuellen Secret-Einstellungen für Ihren Cloud Run-Dienst auf:

Console

  1. Rufen Sie in der Google Cloud Console Cloud Run auf.

    Zu Cloud Run

  2. Klicken Sie auf den gewünschten Dienst, um die Seite Dienstdetails zu öffnen.

  3. Klicken Sie auf den Tab Überarbeitungen.

  4. Im Detailbereich auf der rechten Seite ist die Secrets-Einstellung auf dem Tab Container aufgelistet.

gcloud

  1. Verwenden Sie den folgenden Befehl:

    gcloud run services describe SERVICE
  2. Suchen Sie in der zurückgegebenen Konfiguration nach der Einstellung für Secrets.

Secrets aus einem Dienst entfernen

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

Console

  1. Rufen Sie in der Google Cloud Console Cloud Run auf.

    Zu Cloud Run

  2. Wählen Sie Ihren Dienst in der Liste aus und klicken Sie auf Neue Version bearbeiten und bereitstellen.

  3. Klicken Sie auf den Tab Container.

  4. Wenn Sie Secrets löschen möchten, die als Volume bereitgestellt sind, wählen Sie den Tab Volume-Bindungen aus, bewegen Sie den Mauszeiger auf das Secret, das Sie entfernen möchten, und klicken Sie dann auf Löschen.

  5. Wenn Sie Secrets löschen möchten, die als Umgebungsvariablen bereitgestellt werden, wählen Sie den Tab Variablen und Secrets aus, bewegen Sie den Mauszeiger auf das Secret, das Sie entfernen möchten, und klicken Sie dann auf Löschen.

  6. Klicken Sie auf Bereitstellen.

gcloud

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

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

    gcloud run deploy SERVICE --image IMAGE_URL \
    --clear-secrets
    

    Ersetzen Sie:

    • SERVICE durch den Namen des Dienstes.
    • 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 Form LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • 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 run deploy SERVICE --image IMAGE_URL \
    --remove-secrets=ENV_VAR_NAME,SECRET_FILE_PATH
    

    Ersetzen Sie:

    • SERVICE durch den Namen des Dienstes.
    • 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 Form LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • 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
      

Secrets in Ihrem Code verwenden

Beispiele für den Zugriff auf Secrets in Ihrem Code als Umgebungsvariablen finden Sie in der Anleitung zur Endnutzerauthentifizierung, insbesondere im Abschnitt Vertrauliche Konfigurationen mit Secret Manager verarbeiten.

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 Bereitstellungspfad des Volumes bereits vorhanden ist, ist der Zugriff auf alle Dateien oder Ordner im vorhandenen Verzeichnis nicht mehr möglich.

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.