Utilizza i secret

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Il tuo servizio o job potrebbe richiedere dipendenze che richiedono chiavi API, password o altre informazioni sensibili. Per Cloud Run, Google consiglia di archiviare questo tipo di informazioni sensibili in un secret creato in Secret Manager.

Puoi rendere un secret disponibile per i tuoi container in due modi:

  • Monta ogni secret come un volume, rendendo il secret disponibile per il container come file. La lettura di un volume recupera sempre il valore del secret da Secret Manager, quindi può essere utilizzato con la versione più recente. Questo metodo funziona bene anche con la rotazione dei secret.
  • Trasmettere un secret tramite variabili di ambiente. Le variabili di ambiente vengono risolte al momento dell'avvio dell'istanza, quindi se utilizzi questo metodo, Google consiglia di fissare il secret a una versione specifica anziché utilizzare più recente.

Per ulteriori informazioni, consulta il documento sulle best practice di Secret Manager.

Come vengono controllati i secret al momento del deployment e in fase di runtime

Durante il deployment o la creazione di un servizio, vengono controllati tutti i secret utilizzati, come variabile di ambiente o montati come volume, per garantire che l'account di servizio utilizzato per eseguire il container abbia accesso ai container. Se un controllo non va a buon fine, il deployment o la creazione del job non vanno a buon fine.

Durante il runtime, quando si avviano le istanze:

  • Se il secret è una variabile di ambiente, il valore del secret viene recuperato prima dell'avvio dell'istanza, quindi se il recupero del secret ha esito negativo, l'istanza non si avvia.
  • Se il secret viene montato come volume, non viene eseguito alcun controllo durante l'avvio dell'istanza. Tuttavia, durante il runtime, se un secret non è accessibile, i tentativi di lettura del volume montato non andranno a buon fine.

Consenti a Cloud Run di accedere a un secret

Puoi utilizzare un secret di Secret Manager esistente o creare un nuovo secret. Tuttavia, per consentire a un servizio Cloud Run di accedere al secret, devi concedere il ruolo Secret Accessor Secret Manager all'account di servizio Cloud Run:

  1. Vai alla pagina di Secret Manager in Google Cloud Console

  2. Seleziona il secret e, nella scheda delle autorizzazioni sul lato destro, fai clic su Aggiungi entità.

  3. Nella casella di testo Nuove entità, inserisci l'email dell'account di servizio per il servizio Cloud Run.

  4. Concedi il ruolo Funzione di accesso a Secret Manager di secret.

Rendi un secret accessibile a Cloud Run

Puoi rendere disponibili i secret per i servizi e per i job.

Per i servizi Cloud Run

Qualsiasi modifica della configurazione determina la 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:

Console

  1. Vai a Cloud Run

  2. Fai clic su Crea servizio se stai configurando un nuovo servizio in cui stai eseguendo il deployment. Se stai configurando un servizio esistente, fai clic sul servizio, quindi su Modifica ed esegui il deployment di una nuova revisione.

  3. Se stai configurando un nuovo servizio, compila la pagina delle impostazioni del servizio iniziale come preferisci, quindi fai clic su Container, connessioni, sicurezza per espandere la pagina di configurazione del servizio.

  4. Fai clic sulla scheda Variabili e segreti.

    immagine

  5. Nella scheda Variabili e Secret:

    • In Secret, fai clic su Fai riferimento a un secret
    • Seleziona il secret che vuoi utilizzare dall'elenco a discesa Secret.
    • Nel menu a discesa Metodo di riferimento, seleziona il modo in cui vuoi utilizzare il secret, montato come volume o esposto come variabili di ambiente.
    • Se stai montando il secret come volume,
      1. In Percorso di montaggio, specifica il percorso di montaggio che utilizzi per i secret.
      2. Per impostazione predefinita, è selezionata l'ultima versione. Se vuoi puoi selezionare una versione specifica. In Percorsi specificati per le versioni dei secret, specifica il percorso della versione e il numero di versione.
      3. Fai clic su Fine.
    • Se esponi il secret come variabile di ambiente:
      1. Fornisci il nome della variabile e seleziona la versione del secret oppure più recente per utilizzare sempre la versione corrente del secret.
      2. Fai clic su Fine.

  6. Fai clic su Crea o Esegui il deployment.

Riga di comando

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:

    • SERVICE con il nome del tuo servizio.
    • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest
    • PATHcon il percorso di montaggio del volume e il nome file del secret. Deve iniziare con una barra iniziale, 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 con il nome del secret nello stesso progetto, ad esempio mysecret.
    • VERSION con 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:

    • SERVICE con il nome del tuo servizio.
    • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest
    • ENV_VAR_NAME con il nome della variabile di ambiente che vuoi utilizzare con il secret.
    • SECRET_NAME con il nome del secret nello stesso progetto, ad esempio mysecret.
    • VERSION con 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 ciascun secret con una virgola. Il comando seguente 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

Puoi scaricare e visualizzare la configurazione del servizio esistente utilizzando il comando gcloud run services describe --format export, che restituisce risultati puliti in formato YAML. Puoi quindi modificare i campi descritti di seguito e caricare il file YAML modificato con il comando gcloud run services replace. Assicurati di modificare solo i campi come documentato.

  1. Per visualizzare e scaricare la configurazione:

    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ù di questi attributi.

    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 disponi di più secret montati come percorsi file, avrai più di questi attributi.

    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

    • SERVICE con il nome del tuo servizio Cloud Run
    • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest
    • REVISION con un nuovo nome di revisione o eliminalo (se presente). Se si fornisce un nuovo nome di revisione, deve soddisfare i seguenti criteri:
      • Inizia con SERVICE-
      • Contiene solo lettere minuscole, numeri e -
      • Non termina con -
      • Non superi i 63 caratteri
  4. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml

Fare riferimento ai secret di altri progetti

Puoi fare riferimento a un secret di un altro progetto, se al tuo account di servizio del progetto è consentito di accedere al secret.

Console

  1. Vai a Cloud Run

  2. Fai clic su Crea servizio se stai configurando un nuovo servizio in cui stai eseguendo il deployment. Se stai configurando un servizio esistente, fai clic sul servizio, quindi su Modifica ed esegui il deployment di una nuova revisione.

  3. Se stai configurando un nuovo servizio, compila la pagina delle impostazioni del servizio iniziale come preferisci, quindi fai clic su Container, connessioni, sicurezza per espandere la pagina di configurazione del servizio.

  4. Fai clic sulla scheda Variabili e segreti.

    immagine

  5. Nella scheda Variabili e Secret:

    • In Secret, fai clic su Fai riferimento a un secret
    • Seleziona Non vedi il tuo secret? Inserisci l'ID risorsa secret dall'elenco a discesa Secret per visualizzare il seguente modulo:

      Secret tra progetti

    • Nel modulo Aggiungi un secret per ID risorsa, inserisci il secret dall'altro progetto nel formato projects/PROJECT_NUMBER/secrets/SECRET_NAME. In alternativa, puoi copiare e incollare l'ID risorsa dall'altro progetto se puoi accedervi, selezionando il secret, facendo clic sui puntini di sospensione Azioni a destra del secret e selezionando Copia ID risorsa dal menu a discesa.
    • Fai clic su Aggiungi secret.
    • Nel menu a discesa Metodo di riferimento, seleziona il modo in cui vuoi utilizzare il secret, montato come un volume o esposto come variabili di ambiente.
    • Se stai montando il secret come volume,
      1. In Percorso di montaggio, specifica il percorso di montaggio che utilizzi per i secret.
      2. Per impostazione predefinita, è selezionata l'ultima versione. Se vuoi puoi selezionare una versione specifica. In Percorsi specificati per le versioni dei secret, specifica il percorso della versione e il numero di versione.
      3. Fai clic su Fine.
    • Se esponi il secret come variabile di ambiente:
      1. Fornisci il nome della variabile e seleziona la versione del secret oppure più recente per utilizzare sempre la versione corrente del secret.
      2. Fai clic su Fine.

  6. Fai clic su Crea o Esegui il deployment.

Riga di comando

  • 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:

    • SERVICE con il nome del tuo servizio.
    • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest
    • PATHcon il percorso di montaggio del volume e il nome file del secret. Deve iniziare con una barra iniziale, 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 con il numero di progetto per il progetto in cui è stato creato il secret.
    • SECRET_NAME con il nome del secret, ad esempio mysecret.
    • VERSION con la versione del secret. Utilizza latest per l'ultima versione o un numero, ad esempio 2.

YAML

Puoi scaricare e visualizzare la configurazione del servizio esistente utilizzando il comando gcloud run services describe --format export, che restituisce risultati puliti in formato YAML. Puoi quindi modificare i campi descritti di seguito e caricare il file YAML modificato con il comando gcloud run services replace. Assicurati di modificare solo i campi come documentato.

  1. Per visualizzare e scaricare la configurazione:

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

A causa di vincoli relativi alla compatibilità delle API, le località 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:
          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:

    • SERVICE con il nome del tuo servizio.
    • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest
    • ENV_VAR
    • PROJECT_NUMBER con il numero di progetto per il progetto in cui è stato creato il secret.
    • SECRET_NAME con il nome del secret, ad esempio mysecret.
    • VERSION con la versione del secret. Utilizza latest per l'ultima versione o un numero, ad esempio 2.
    • SECRET_LOOKUP_NAME con qualsiasi nome con una sintassi del nome del secret valida (ad es. my-secret), può essere lo stesso di SECRET_NAME
  2. Per i secret montati come percorsi file:

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

    • SERVICE con il nome del tuo servizio.
    • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest
    • PATHcon il percorso di montaggio del volume e il nome file del secret. Deve iniziare con una barra iniziale, 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 con il numero di progetto per il progetto in cui è stato creato il secret.
    • SECRET_NAME con il nome del secret, ad esempio mysecret.
    • VERSION con la versione del secret. Utilizza latest per l'ultima versione o un numero, ad esempio 2.
    • SECRET_LOOKUP_NAME con qualsiasi nome con una sintassi del nome del secret valida (ad es. my-secret), può essere lo stesso di SECRET_NAME
    • VOLUME_NAME con qualsiasi nome (ad esempio my-volume), può essere uguale a SECRET_NAME

Per job Cloud Run

Puoi rendere un secret accessibile al tuo job tramite la console Google Cloud o Google Cloud CLI:

Console

  1. Vai a Cloud Run

  2. Se stai configurando un nuovo job, fai clic sulla scheda Job e compila la pagina delle impostazioni del job iniziale come preferisci. Se stai configurando un job esistente, fai clic sul job e poi su Modifica.

  3. Fai clic su Container, variabili e secret, connessioni, sicurezza per espandere la pagina delle proprietà del job.

  4. Fai clic sulla scheda Variabili e segreti.

    immagine

  5. Nella scheda Variabili e Secret:

    • In Secret, fai clic su Fai riferimento a un secret
    • Seleziona il secret che vuoi utilizzare dall'elenco a discesa Secret.
    • Nel menu a discesa Metodo di riferimento, seleziona il modo in cui vuoi utilizzare il secret, montato come volume o esposto come variabili di ambiente.
    • Se stai montando il secret come volume,
      1. In Percorso di montaggio, specifica il percorso di montaggio che utilizzi per i secret.
      2. Per impostazione predefinita, è selezionata l'ultima versione. Se vuoi puoi selezionare una versione specifica. In Percorsi specificati per le versioni dei secret, specifica il percorso della versione e il numero di versione.
      3. Fai clic su Fine.
    • Se esponi il secret come variabile di ambiente:
      1. Fornisci il nome della variabile e seleziona la versione del secret oppure più recente per utilizzare sempre la versione corrente del secret.
      2. Fai clic su Fine.

  6. Fai clic su Crea o Aggiorna.

Riga di comando

  • Per specificare il secret in una variabile di ambiente quando crei un nuovo job:

    gcloud beta run jobs create JOB_NAME \
    --image IMAGE_URL \
    --set-secrets ENV_VAR_NAME=SECRET_NAME:VERSION

    Sostituisci

    • JOB_NAME con il nome del lavoro.
    • ENV_VAR_NAME con il nome della variabile di ambiente da utilizzare per il secret.
    • SECRET_NAME con il nome del secret nello stesso progetto, ad esempio mysecret.
    • VERSION con la versione del secret. Utilizza latest per la versione più recente o un numero, ad esempio 2.
    • Sostituisci IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/job:latest.

    Puoi specificare diverse coppie di variabile/secret dell'ambiente, utilizzando un elenco delimitato da virgole.

  • Per specificare il secret in una variabile di ambiente quando aggiorni un job:

    gcloud beta run jobs update JOB_NAME \
    --set-secrets ENV_VAR_NAME=SECRET_NAME:VERSION
  • Per montare il secret come volume durante la creazione di un job:

    gcloud beta run jobs create JOB_NAME \
    --image IMAGE_URL \
    --set-secrets=PATH=SECRET_NAME:VERSION

    Sostituisci:

    • JOB_NAME con il nome del lavoro.
    • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/job:latest
    • PATHcon il percorso di montaggio del volume e il nome file del secret. Deve iniziare con una barra iniziale, 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 con il nome del secret nello stesso progetto, ad esempio mysecret.
    • VERSION con la versione del secret. Utilizza latest per l'ultima versione o un numero, ad esempio 2.
  • Per aggiornare un secret in un job esistente:

    gcloud beta run jobs update JOB_NAME \
    --update-secrets=PATH=SECRET_NAME:VERSION

Visualizza le impostazioni dei secret

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

Console

  1. Vai a Cloud Run

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

  3. Fai clic sulla scheda Revisioni.

  4. Nel riquadro dei dettagli a destra, l'impostazione dei secret è elencata nella scheda Variabili e secret.

Riga di comando

  1. Utilizza il comando seguente:

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

Per visualizzare le impostazioni dei secret correnti per il tuo job Cloud Run:

Console

  1. Vai ai job Cloud Run

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

  3. Fai clic sulla scheda Configurazione.

  4. Individua l'impostazione dei secret nei dettagli di configurazione.

Riga di comando

  1. Utilizza il comando seguente:

    gcloud beta run jobs describe JOB_NAME
  2. Individua l'impostazione dei secret nella configurazione restituita.

Utilizza i secret nel codice

Per esempi su come accedere ai secret nel codice come variabili di ambiente, fai riferimento al tutorial sull'autenticazione degli utenti finali, in particolare nella sezione Gestire la configurazione sensibile con Secret Manager.

Percorsi e limitazioni non consentiti

Cloud Run non consente il montaggio di secret su /dev, /proc e /sys o nelle relative sottodirectory.

Se stai montando secret su /tmp e utilizzi un ambiente di esecuzione di prima generazione, consulta il problema noto relativo al montaggio dei secret su /tmp.

Cloud Run non consente di montare più secret sullo stesso percorso, perché due montaggi di volume non possono essere montati nella stessa posizione.