Configura i secret

Il job potrebbe dover avere 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 volume, in modo da rendere il secret disponibile al container come file. La lettura di un volume recupera sempre il valore del secret da Secret Manager, in modo che possa essere utilizzato con la versione più recente. Questo metodo funziona bene anche con la rotazione dei secret.
  • Passa un secret utilizzando le variabili di ambiente. Le variabili di ambiente vengono risolte al momento dell'avvio dell'istanza, quindi se utilizzi questo metodo, Google consiglia di bloccare il secret su una determinata versione anziché utilizzare il valore più recente.

Per saperne di più, consulta il documento sulle best practice di Secret Manager.

Come vengono controllati i secret durante il deployment e il runtime

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

Durante il runtime, all'avvio delle istanze:

  • Se il secret è una variabile di ambiente, il suo valore viene recuperato prima di avviare l'istanza. Di conseguenza, se il recupero del secret non va a buon fine, l'istanza non viene avviata.
  • Se il secret viene montato come volume, non viene eseguito alcun controllo durante l'avvio dell'istanza. Tuttavia, se un secret non è accessibile durante il runtime, i tentativi di lettura del volume montato non andranno a buon fine.

La proprietà dei volumi varia in base all'ambiente di esecuzione e al tipo di deployment

Quando monta un volume utilizzando l'ambiente di esecuzione di seconda generazione, che è il caso dei job, il volume è di proprietà di root.

Prima di iniziare

Puoi utilizzare un secret di Secret Manager esistente o crearne uno nuovo.

Ruoli obbligatori

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

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

Per istruzioni su come aggiungere l'entità di identità del servizio al ruolo Funzione di accesso ai secret di Secret Manager, consulta Gestire 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 job Cloud Run si interfaccia con le API Google Cloud, ad esempio le librerie client di Cloud, consulta la guida alla configurazione delle identità dei servizi. Per ulteriori informazioni sulla concessione dei ruoli, consulta Autorizzazioni di deployment e Gestione dell'accesso.

Rendi un secret accessibile a Cloud Run

Puoi rendere un secret accessibile al job utilizzando la console Google Cloud, Google Cloud CLI o YAML:

Console

  1. Nella console Google Cloud, vai alla pagina dei job Cloud Run:

    Vai a Cloud Run

  2. Se stai configurando un nuovo job, fai clic sulla scheda Job e compila la pagina iniziale delle impostazioni del job 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 secret.

    immagine

    • Nella scheda Variabili e secret:
      • In Secret, fai clic su Aggiungi un riferimento secret
      • Seleziona il secret che vuoi utilizzare dall'elenco a discesa Secret.
      • Nel menu a discesa Metodo di riferimento, seleziona in che modo 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 la versione più recente. Se vuoi, puoi selezionare una versione specifica. In Percorsi specificati per le versioni dei secret, specifica il percorso della versione e il numero della versione.
        3. Fai clic su Fine.
      • Se stai esponendo il secret come variabile di ambiente:
        1. Fornisci il nome della variabile e seleziona la versione del secret o la versione più recente per utilizzare sempre la versione corrente del secret.
        2. Fai clic su Fine.
  5. Fai clic su Crea o Aggiorna.

Riga di comando

  • Per specificare il secret in una variabile di ambiente durante la creazione di un nuovo job:

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

    Sostituisci

    • JOB_NAME con il nome del job.
    • 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. Usa latest per l'ultima versione oppure utilizza 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 variabile di ambiente/segreto, utilizzando un elenco delimitato da virgole.

  • Per specificare il secret in una variabile di ambiente durante l'aggiornamento di un job:

    gcloud 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 run jobs create JOB_NAME \
    --image IMAGE_URL \
    --set-secrets=PATH=SECRET_NAME:VERSION

    Sostituisci:

    • JOB_NAME con il nome del job.
    • 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 la versione più recente o un numero, ad esempio 2.
  • Per aggiornare un secret in un job esistente:

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

YAML

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

Scarica e visualizza la configurazione esistente dei job utilizzando il comando gcloud run jobs describe --format export, che restituisce risultati puliti in formato YAML. Quindi modifica i campi descritti di seguito e carica il file YAML modificato utilizzando il comando gcloud run jobs replace. Assicurati di modificare i campi solo come documentato.

  1. Per visualizzare e scaricare la configurazione:

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. Per i secret esposti come variabili di ambiente:

    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 

    Sostituisci:

    • JOB con il nome del job.
    • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, è necessario già creare il repository REPO_NAME. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • SECRET_NAME con il nome del secret, ad esempio mysecret.
    • VERSION con la versione del secret. Utilizza latest per la versione più recente 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 uguale a SECRET_NAME
  3. Per i secret montati come percorsi di file:

    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

    Sostituisci:

    • JOB_NAME con il nome del job.
    • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, è necessario già creare il repository REPO_NAME. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • 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 del 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 la versione più recente 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 uguale a SECRET_NAME
    • VOLUME_NAME con qualsiasi nome (ad es. my-volume), può essere uguale a SECRET_NAME

Riferimento ai secret di altri progetti

Puoi fare riferimento a un secret di un altro progetto, se all'account di servizio del progetto è stato consentito l'accesso al secret.

Console

  1. Nella console Google Cloud, vai alla pagina dei job Cloud Run:

    Vai a Cloud Run

  2. Se stai configurando un nuovo job, fai clic sulla scheda Job e compila la pagina iniziale delle impostazioni del job 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 secret.

    immagine

    • Nella scheda Variabili e secret:
      • In Secret, fai clic su Aggiungi un riferimento secret
      • Seleziona Inserisci il secret manualmente dall'elenco a discesa Secret per visualizzare il seguente modulo:

        Secret tra progetti

      • Nel modulo Add a secret by resource ID (Aggiungi un secret tramite ID risorsa), inserisci il secret dell'altro progetto nel formato projects/PROJECT_NUMBER/secrets/SECRET_NAME. In alternativa, puoi copiare e incollare l'ID risorsa dall'altro progetto se hai accesso, 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 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 la versione più recente. Se vuoi, puoi selezionare una versione specifica. In Percorsi specificati per le versioni dei secret, specifica il percorso della versione e il numero della versione.
        3. Fai clic su Fine.
      • Se stai esponendo il secret come variabile di ambiente:
        1. Fornisci il nome della variabile e seleziona la versione del secret o la versione più recente per utilizzare sempre la versione corrente del secret.
        2. Fai clic su Fine.
  5. Fai clic su Crea o Aggiorna.

Riga di comando

  • Per montare un secret come volume durante l'aggiornamento di un job:

    gcloud run jobs update JOB_NAME \
    --image IMAGE_URL \
    --update-secrets=PATH=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION
    • JOB_NAME con il nome del job.
    • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, è necessario già creare il repository REPO_NAME. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • 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 del 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 la versione più recente o un numero, ad esempio 2.

YAML

Scarica e visualizza la configurazione esistente dei job utilizzando il comando gcloud run jobs describe --format export, che restituisce risultati puliti in formato YAML. Quindi modifica i campi descritti di seguito e carica il file YAML modificato utilizzando il comando gcloud run jobs replace. Assicurati di modificare i campi solo come documentato.

  1. Per visualizzare e scaricare la configurazione:

    gcloud run jobs describe JOB_NAME --format export > job.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: 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 

    Sostituisci:

    • JOB con il nome del job.
    • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, è necessario già creare il repository REPO_NAME. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • SECRET_NAME con il nome del secret, ad esempio mysecret.
    • VERSION con la versione del secret. Utilizza latest per la versione più recente o un numero, ad esempio 2.
    • PROJECT_NUMBER con il numero del progetto in cui è stato creato il secret.
    • SECRET_LOOKUP_NAME con qualsiasi nome con una sintassi del nome del secret valida (ad es. my-secret), può essere uguale a SECRET_NAME.
  2. Per i secret montati come percorsi di file:

    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

    Sostituisci:

    • JOB_NAME con il nome del job.
    • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, è necessario già creare il repository REPO_NAME. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • 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 del 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 la versione più recente 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 uguale a SECRET_NAME.
    • VOLUME_NAME con qualsiasi nome (ad es. my-volume), può essere uguale a SECRET_NAME.

Visualizza le impostazioni dei secret

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

Console

  1. Nella console Google Cloud, vai alla pagina dei job Cloud Run:

    Vai ai job Cloud Run

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

  3. Fai clic sulla scheda Configuration (Configurazione).

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

Riga di comando

  1. Utilizza il seguente comando:

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

Percorsi e limitazioni non consentiti

Cloud Run non consente di montare i secret in /dev, /proc e /sys o nelle relative sottodirectory.

Se stai montando secret su /tmp e utilizzi l'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 nello stesso percorso perché non è possibile montare due montaggi di volumi nella stessa posizione.

Override di una directory

Se il secret viene 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 diventeranno inaccessibili.

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

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