Configurare i secret per i servizi

Il tuo servizio potrebbe richiedere chiavi API, password, certificati o altre informazioni sensibili per le sue dipendenze. Per Cloud Run, Google consiglia di archiviare queste informazioni sensibili in un secret creato in Secret Manager.

Rendi un secret disponibile per i tuoi container in uno dei seguenti modi:

  • Quando monti ogni secret come volume, Cloud Run lo rende disponibile al container sotto forma di file. Durante la lettura di un volume, Cloud Run recupera sempre il valore del secret da Secret Manager per utilizzare il valore con l'ultima versione. Questo metodo è indicato anche se prevedi di implementare la rotazione dei secret.
  • Passa un secret utilizzando le variabili di ambiente. Le variabili di ambiente vengono risolte all'avvio dell'istanza, quindi se utilizzi questo metodo, Google consiglia di bloccare il secret a una versione specifica anziché utilizzare latest come versione.

Per saperne di più, consulta le best practice di Secret Manager.

Come vengono controllati i secret durante il deployment e il runtime

Durante il deployment del servizio, Cloud Run controlla tutti i secret che utilizzi. Il controllo garantisce che il account di servizio che esegue il container disponga dell'autorizzazione per accedere a questi secret.

Durante il runtime, quando le istanze vengono avviate:

  • Se il secret è una variabile di ambiente, Cloud Run recupera il valore del secret prima di avviare l'istanza. Se il processo di recupero del secret non va a buon fine, l'istanza non si avvia.
  • Se monti il secret come volume, Cloud Run non esegue alcun controllo durante l'avvio dell'istanza. Tuttavia, durante il runtime, se un secret non è accessibile, i tentativi di lettura del volume montato non vanno a buon fine.

Proprietà del volume

La proprietà di un volume di secret di Cloud Run varia in base all'ambiente di esecuzione e al tipo di deployment.

Quando monti un volume di secret, l'identità proprietaria dei file e delle directory varia a seconda dell'ambiente di esecuzione del workload e del fatto che il deployment sia composto da uno o più container.

Nell'ambiente di esecuzione di prima generazione in cui esegui il deployment di un singolo container, l'identità che utilizzi per il container è proprietaria del volume del secret. In tutti gli altri casi, root è proprietario del volume. È incluso quanto segue:

  • Ambiente di esecuzione di prima generazione in cui esegui il deployment di più container
  • L'ambiente di seconda generazione

Prima di iniziare

  1. Abilita l'API Secret Manager, se non è già abilitata.

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    Abilitare l'API

  2. Utilizza un secret esistente o creane uno in Secret Manager, come descritto in Crea un secret.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per configurare i secret, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Per consentire a Cloud Run di accedere al secret, l'identità di servizio deve avere il seguente ruolo:

Per istruzioni su come aggiungere l'entità dell'identità del servizio al ruolo Secret Manager Secret Accessor, consulta Gestisci l'accesso ai secret.

Per un elenco di ruoli e autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il tuo servizio Cloud Run interagisce con le APIGoogle Cloud , come le librerie client Cloud, consulta la guida alla configurazione dell'identità del servizio. Per saperne di più sulla concessione dei ruoli, consulta Autorizzazioni di deployment e Gestisci l'accesso.

Rendi un secret accessibile a Cloud Run

Qualsiasi modifica alla configurazione porta alla creazione di una nuova revisione. Anche le revisioni successive riceveranno automaticamente questa impostazione di configurazione, a meno che non apporti aggiornamenti espliciti per modificarla.

Puoi rendere un secret accessibile al tuo servizio utilizzando la console Google Cloud , Google Cloud CLI o un file YAML quando esegui il deployment di un nuovo servizio o aggiorni un servizio esistente ed esegui il deployment di una revisione. Fai clic sulla scheda che preferisci:

Console

  1. Nella console Google Cloud , vai a Cloud Run:

    Vai a Cloud Run

  2. Seleziona Servizi dal menu di navigazione di Cloud Run:

    1. Se stai configurando un nuovo servizio, fai clic su Esegui il deployment del container e compila la pagina delle impostazioni iniziali del servizio. Quindi fai clic su Container, networking, sicurezza per espandere la pagina di configurazione del servizio.

    2. Se stai configurando un servizio esistente, fai clic sul servizio.

  3. Segui i passaggi per montare il secret come volume o esporlo come variabile di ambiente.

    • Per esporre il secret come variabile di ambiente:

      1. Fai clic sulla scheda Container.
      2. In Variabili e secret, fai clic su Fai riferimento a un secret.
      3. Nel campo Nome 1, inserisci il nome della variabile di ambiente.
      4. Dall'elenco Secret, seleziona il secret che vuoi utilizzare.
      5. Nell'elenco Versione 1, seleziona la versione del secret a cui fare riferimento.
      6. Fai clic su Fine.
      7. Fai clic su Crea per un nuovo servizio. Fai clic su Visualizza differenze e fai di nuovo il deployment, quindi su Esegui il deployment delle modifiche per un servizio esistente.
    • Per montare il secret come volume:

      1. Se stai configurando un nuovo servizio, fai clic sulla scheda Volumi. Se stai configurando un servizio esistente, fai clic sulla scheda Container.
      2. Fai clic su Monta volume.
      3. Fai clic su Secret.
      4. Nel campo Percorso montaggio, inserisci il percorso di montaggio per questo secret. Questa è la directory in cui vengono inserite tutte le versioni del secret.
      5. Dall'elenco Secret, seleziona il secret che vuoi utilizzare.
      6. Nel campo Percorso 1, inserisci il nome del file da montare.
      7. Nell'elenco Versione 1, seleziona la versione del secret a cui fare riferimento. Per impostazione predefinita, è selezionata l'ultima versione. Se vuoi, puoi selezionare una versione specifica.
      8. Fai clic su Salva.
      9. Fai clic su Crea per un nuovo servizio. Fai clic su Visualizza differenze e fai di nuovo il deployment, quindi su Esegui il deployment delle modifiche per un servizio esistente.

gcloud

Per rendere un secret accessibile al tuo servizio, inserisci uno dei seguenti comandi.

  • Per montare il secret come volume durante il deployment di un servizio:

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

    Sostituisci quanto segue:

    • SERVICE: il nome del servizio.
    • IMAGE_URL: un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATH: il percorso di montaggio del volume e il nome file del secret. Deve iniziare con una barra, ad esempio: /etc/secrets/dbconfig/password, dove /etc/secrets/dbconfig/ è il percorso di montaggio del volume e password è il nome file del secret.
    • SECRET_NAME: il nome del secret nello stesso progetto, ad esempio mysecret.
    • VERSION: la versione del secret. Utilizza latest per l'ultima versione o un numero, ad esempio 2.
  • Per esporre il secret come variabile di ambiente durante il deployment di un servizio:

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

    Sostituisci quanto segue:

    • SERVICE: il nome del servizio.
    • IMAGE_URL: un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • ENV_VAR_NAME: il nome della variabile di ambiente che vuoi utilizzare con il secret.
    • SECRET_NAME: il nome del secret nello stesso progetto, ad esempio mysecret.
    • VERSION: la versione del secret. Utilizza latest per l'ultima versione o un numero, ad esempio 2.
  • Puoi aggiornare più secret contemporaneamente. Per farlo, separa le opzioni di configurazione di ogni secret con una virgola. Il seguente comando aggiorna un secret montato come volume e un altro secret esposto come variabile di ambiente.

    Per aggiornare i secret esistenti, inserisci il seguente comando:

    gcloud run deploy SERVICE --image IMAGE_URL \
    --update-secrets=PATH=SECRET_NAME:VERSION,ENV_VAR_NAME=SECRET_NAME:VERSION
  • Per cancellare i secret esistenti e rendere un nuovo secret accessibile al servizio, utilizza il flag --set-secrets:

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

YAML

  1. Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Per i secret esposti come variabili di ambiente, in env, aggiorna ENV_VAR, VERSION e/o SECRET_NAME come preferisci. Se hai più secret montati come variabili di ambiente, avrai più attributi di questo tipo.

    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. Per i secret montati come percorsi file, aggiorna MOUNT_PATH, VOLUME_NAME, VERSION, FILENAME e/o SECRET_NAME come preferisci. Se hai più secret montati come percorsi file, avrai più attributi di questo tipo.

    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

    Tieni presente che VOLUME_NAME può essere impostato su qualsiasi nome.

    Sostituisci quanto segue:

    • SERVICE: il nome del servizio Cloud Run.
    • IMAGE_URL: un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • REVISION: un nuovo nome della revisione o eliminalo (se presente). Se fornisci un nuovo nome della revisione, questo deve soddisfare i seguenti criteri:
      • Inizia con SERVICE-
      • Contiene solo lettere minuscole, numeri e -
      • Non termina con -
      • Non supera i 63 caratteri
  4. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml

Terraform

  1. Crea un secret e una versione del secret.

    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. Crea un account di servizio e concedigli l'accesso al 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. È possibile accedere ai secret di Secret Manager da Cloud Run come percorsi di file montati o come variabili di ambiente.

    1. Per i secret montati come percorsi file, fai riferimento alla risorsa Secret Manager nel parametro volumes. name corrisponde a una voce nel parametro volume_mounts:

      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. Per i secret esposti come variabili di ambiente, fai riferimento alla risorsa Secret Manager nel parametro env:

      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]
      }

Scrivi

Per specificare i secret nel file compose.yaml, aggiungi l'attributo secrets alla definizione del servizio. In questo modo viene creato un secret di Secret Manager per archiviare questi dati in base al valore nel file locale.

  services:
    web:
      image: IMAGE
      secrets:
        - SECRET_NAME
  secrets:
    SECRET_NAME:
      file: SECRET_FILE_PATH

Sostituisci quanto segue:

  • IMAGE: l'URL dell'immagine container.
  • SECRET_NAME: il nome del secret, ad esempio mysecret.
  • SECRET_FILE_PATH: il percorso del file locale contenente il valore del secret.

Esegui il deployment del servizio

  1. Per eseguire il deployment dei servizi, esegui il comando gcloud run compose up:

    gcloud run compose up compose.yaml
  2. Rispondi y a eventuali prompt per installare i componenti richiesti o per abilitare le API.

  3. (Facoltativo) Rendi pubblico il servizio se vuoi consentire l'accesso non autenticato al servizio.

Dopo il deployment, viene visualizzato l'URL del servizio Cloud Run. Copia questo URL e incollalo nel browser per visualizzare il container in esecuzione. Puoi disattivare l'autenticazione predefinita dalla console Google Cloud .

Fai riferimento ai secret di altri progetti

Per fare riferimento a un secret di un altro progetto, verifica che il service account del tuo progetto abbia accesso al secret.

Console

  1. Nella console Google Cloud , vai a Cloud Run:

    Vai a Cloud Run

  2. Seleziona Servizi dal menu di navigazione di Cloud Run:

    1. Se stai configurando un nuovo servizio, fai clic su Esegui il deployment del container e compila la pagina delle impostazioni iniziali del servizio. Quindi fai clic su Container, networking, sicurezza per espandere la pagina di configurazione del servizio.

    2. Se stai configurando un servizio esistente, fai clic sul servizio.

  3. Segui i passaggi per montare il secret come volume o esporlo come variabile di ambiente.

    • Per esporre il secret come variabile di ambiente:

      1. Se stai configurando un servizio esistente, fai clic sulla scheda Container. Se stai creando un nuovo servizio, fai clic per espandere Container, networking, sicurezza.
      2. In Variabili e secret, fai clic su Fai riferimento a un secret.
      3. Nel campo Nome 1, inserisci il nome della variabile di ambiente.
      4. Nell'elenco Secret, fai clic su Inserisci il secret manualmente.
      5. Inserisci l'ID risorsa del secret nel seguente formato:

        projects/PROJECT_NUMBER/secrets/SECRET_NAME
        

        Sostituisci quanto segue:

        • PROJECT_NUMBER con il numero di progetto Google Cloud . Per istruzioni dettagliate su come trovare il numero del progetto, consulta Creazione e gestione dei progetti.

        • SECRET_NAME: il nome del secret in Secret Manager.

      6. Nell'elenco Versione 1, seleziona la versione del secret a cui fare riferimento.

      7. Fai clic su Fine.

      8. Fai clic su Visualizza differenze e fai di nuovo il deployment, quindi su Esegui il deployment delle modifiche.

    • Per montare il secret come volume:

      1. Se stai configurando un servizio esistente, fai clic sulla scheda Container. Se stai creando un nuovo servizio, fai clic sulla scheda Volumi in Container, Networking, Sicurezza.
      2. Fai clic su Monta volume.
      3. Fai clic su Secret.
      4. Nel campo Percorso montaggio, inserisci il percorso di montaggio per questo secret. Questa è la directory in cui vengono inserite tutte le versioni del secret.
      5. Nell'elenco Secret, fai clic su Inserisci il secret manualmente.
      6. Inserisci l'ID risorsa del secret nel seguente formato:

        projects/PROJECT_NUMBER/secrets/SECRET_NAME
        

        Sostituisci quanto segue:

        • PROJECT_NUMBER con il numero di progetto Google Cloud . Per istruzioni dettagliate su come trovare il numero del progetto, consulta Creazione e gestione dei progetti.

        • SECRET_NAME: il nome del secret in Secret Manager.

      7. Nel campo Percorso 1, inserisci il nome del file da montare.

      8. Nell'elenco Versione 1, seleziona la versione del secret a cui fare riferimento. Per impostazione predefinita, è selezionata l'ultima versione. Se vuoi, puoi selezionare una versione specifica.

      9. Fai clic su Salva.

      10. Fai clic su Visualizza differenze e fai di nuovo il deployment, quindi su Esegui il deployment delle modifiche.

gcloud

  • Per montare un secret come volume durante il deployment di un servizio:

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

    Sostituisci quanto segue:

    • SERVICE: il nome del servizio.
    • IMAGE_URL: un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • PATH: il percorso di montaggio del volume e il nome file del secret. Deve iniziare con una barra, ad esempio: /etc/secrets/dbconfig/password, dove /etc/secrets/dbconfig/ è il percorso di montaggio del volume e password è il nome file del secret.
    • PROJECT_NUMBER: il numero del progetto in cui è stato creato il secret.
    • SECRET_NAME: il nome del secret, ad esempio mysecret.
    • VERSION: la versione del secret. Utilizza latest per l'ultima versione o un numero, ad esempio 2.

YAML

  1. Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:

    gcloud run services describe SERVICE --format export > service.yaml

A causa di vincoli relativi alla compatibilità delle API, le posizioni dei secret devono essere archiviate in un'annotazione.

  1. Per i secret esposti come variabili di ambiente:

    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

    Sostituisci quanto segue:

    • SERVICE: il nome del servizio.
    • IMAGE_URL: un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • ENV_VAR: il nome della variabile di ambiente.
    • PROJECT_NUMBER: il numero del progetto in cui è stato creato il secret.
    • SECRET_NAME: il nome del secret, ad esempio mysecret.
    • VERSION: la versione del secret. Utilizza latest per l'ultima versione o un numero, ad esempio 2.
    • SECRET_LOOKUP_NAME: qualsiasi nome con una sintassi del nome del secret valida, ad esempio my-secret, può essere uguale a SECRET_NAME.
  2. Per i secret montati come percorsi file:

    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

    Sostituisci quanto segue:

    • SERVICE: il nome del servizio.
    • IMAGE_URL: un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • PATH: il percorso di montaggio del volume e il nome file del secret. Deve iniziare con una barra, ad esempio: /etc/secrets/dbconfig/password, dove /etc/secrets/dbconfig/ è il percorso di montaggio del volume e password è il nome file del secret.
    • PROJECT_NUMBER: il numero del progetto in cui è stato creato il secret.
    • SECRET_NAME: il nome del secret, ad esempio mysecret.
    • VERSION: la versione del secret. Utilizza latest per l'ultima versione o un numero, ad esempio 2.
    • SECRET_LOOKUP_NAME: qualsiasi nome con una sintassi del nome del secret valida, ad esempio my-secret, può essere uguale a SECRET_NAME.
    • VOLUME_NAME: qualsiasi nome, ad esempio my-volume, può essere uguale a SECRET_NAME.

Terraform

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Aggiungi quanto segue a una risorsa google_cloud_run_v2_service nella configurazione Terraform:

Per i secret esposti come variabili di ambiente:

resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE_NAME"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"
      env {
        name = "SECRET_NAME"
        value_source {
          secret_key_ref {
            secret = "projects/PROJECT_ID/secrets/SECRET_NAME"
            version = "VERSION"
          }
        }
      }
    }
  }
}

Sostituisci quanto segue:

  • SERVICE_NAME: il nome del job Cloud Run.
  • REGION: la regione Google Cloud . Ad esempio europe-west1.
  • IMAGE_URL: un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • SECRET_NAME: il nome del secret, ad esempio mysecret.
  • PROJECT_ID: l'ID progetto in cui è stato creato il secret.
  • VERSION: la versione del secret. Utilizza latest per l'ultima versione o un numero, ad esempio 2.

Per i secret montati come percorsi file:

resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE_NAME"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"

      volume_mounts {
        name       = "VOLUME_NAME"
        mount_path = "MOUNT_PATH"
      }
    }

    volumes {
      name = "VOLUME_NAME"
      secret {
        secret = "projects/PROJECT_ID/secrets/SECRET_NAME"
      }
    }
  }
}

Sostituisci quanto segue:

  • SERVICE_NAME: il nome del job Cloud Run.
  • REGION con la regione Google Cloud . Ad esempio europe-west1.
  • IMAGE_URL: un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • VOLUME_NAME: qualsiasi nome, ad esempio my-volume, può essere uguale a SECRET_NAME
  • MOUNT_PATH: il percorso di montaggio del volume e il nome file del secret. Deve iniziare con una barra, ad esempio: /etc/secrets/dbconfig/password, dove /etc/secrets/dbconfig/ è il percorso di montaggio del volume e password è il nome file del secret.
  • PROJECT_ID: l'ID progetto in cui è stato creato il secret.
  • SECRET_NAME: il nome del secret, ad esempio mysecret.

Visualizza le impostazioni dei secret

Per visualizzare le impostazioni attuali dei secret per il tuo servizio Cloud Run:

Console

  1. Nella console Google Cloud , vai alla pagina Servizi di Cloud Run:

    Vai a Cloud Run

  2. Fai clic sul servizio che ti interessa per aprire la pagina Dettagli servizio.

  3. Fai clic sulla scheda Container per visualizzare le impostazioni.

gcloud

  1. Utilizza il seguente comando:

    gcloud run services describe SERVICE
  2. Individua l'impostazione dei secret nella configurazione restituita.

Rimuovi i secret da un servizio

Puoi rimuovere i secret da un servizio utilizzando la console Google Cloud o gcloud CLI:

Console

  1. Nella console Google Cloud , vai alla pagina Servizi di Cloud Run:

    Vai a Cloud Run

  2. Seleziona il tuo servizio dall'elenco.

  3. Fai clic sulla scheda Container.

  4. Per eliminare i secret montati come volume o variabile di ambiente, fai clic su Elimina.

  5. Fai clic su Crea per un nuovo servizio. Fai clic su Visualizza differenze e fai di nuovo il deployment, quindi su Esegui il deployment delle modifiche per un servizio esistente.

gcloud

Puoi rimuovere tutti i secret da un servizio o specificare uno o più secret da rimuovere:

  • Per rimuovere tutti i secret, esegui questo comando:

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

    Sostituisci quanto segue:

    • SERVICE: il nome del servizio.
    • IMAGE_URL: un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • Per specificare un elenco di secret da rimuovere, utilizza il flag --remove-secrets. Il seguente comando rimuove un secret montato come volume e un altro secret esposto come variabile di ambiente:

    gcloud run deploy SERVICE --image IMAGE_URL \
    --remove-secrets=ENV_VAR_NAME,SECRET_FILE_PATH
    

    Sostituisci quanto segue:

    • SERVICE: il nome del servizio.
    • IMAGE_URL: un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • ENV_VAR_NAME: il nome della variabile di ambiente.
    • SECRET_FILE_PATH: il percorso completo del secret. Ad esempio, /mnt/secrets/primary/latest, dove /mnt/secrets/primary/ è il percorso di montaggio e latest è il percorso del secret. Puoi anche specificare i percorsi di montaggio e del secret separatamente:

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

Utilizza i secret nel codice

Per esempi di accesso ai secret nel codice come variabili di ambiente, consulta il tutorial sull'autenticazione degli utenti finali, in particolare la sezione Gestione della configurazione sensibile con Secret Manager.

Limitazioni

Le sezioni seguenti descrivono le limitazioni che si applicano al montaggio dei secret.

Percorsi non consentiti

  • Cloud Run non consente di montare secret in /dev, /proc e /sys o nelle relative sottodirectory.
  • Se monti secret su /tmp e utilizzi l'ambiente di esecuzione di prima generazione, consulta il problema noto relativo al montaggio di secret su /tmp.
  • Cloud Run non consente di montare più secret nello stesso percorso perché non è possibile montare due montaggi di volumi nella stessa posizione.

Secret regionali

Cloud Run non supporta i secret regionali.

Eseguire l'override di una directory

Se il secret è montato come volume in Cloud Run e l'ultima directory nel percorso di montaggio del volume esiste già, i file o le cartelle nella directory esistente diventano inaccessibili.

Ad esempio, se un secret denominato my-secret è montato sul percorso /etc/app_data, tutti i contenuti all'interno della directory app_data verranno sovrascritti e l'unico file visibile sarà /etc/app_data/my-secret.

Per evitare di sovrascrivere i file in una directory esistente, crea una nuova directory per montare il secret, ad esempio /etc/app_data/secrets, in modo che il percorso di montaggio del secret sia /etc/app_data/secrets/my-secret.