Configura i secret

Il job potrebbe dover avere dipendenze che richiedono chiavi API, password, certificati 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 disponibile un secret per i tuoi container in due modi:

  • Monta ogni secret come volume, in modo che il secret sia disponibile container come file. La lettura di un volume recupera sempre il valore del secret da Secret Manager, quindi può essere utilizzato con l'ultima versione. Questo funziona bene anche con la rotazione dei secret.
  • Trasmetti un secret utilizzando le variabili di ambiente. Le variabili di ambiente vengono risolte al momento dell'avvio dell'istanza, quindi se usi questo metodo, Google consiglia di fissare il secret a una determinata versione anziché utilizzare più recente.

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

Come vengono controllati i secret in fase di deployment e runtime

Durante la creazione del job, vengono utilizzati tutti i secret, come variabile di ambiente o montati come volume, vengono controllati per garantire 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, viene recuperato il valore del secret prima di avviare l'istanza, quindi se il recupero del secret non riesce, l'istanza non viene avviata.
  • Se il secret viene montato come volume, non viene eseguito alcun controllo durante l'avvio dell'istanza. Tuttavia, se durante il runtime non è possibile accedere a un secret, i tentativi di lettura del volume montato avranno esito negativo.

La proprietà del volume 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 come nel caso dei job, il volume è di proprietà della radice.

Prima di iniziare

Puoi usare un secret di Secret Manager esistente crea un nuovo secret.

Ruoli obbligatori

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

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

Per istruzioni su come aggiungere l'entità di identità del servizio alla per il ruolo della funzione di accesso ai secret di Secret Manager, consulta Gestire l'accesso ai secret.

Per un elenco di ruoli e autorizzazioni IAM associati Cloud Run, consulta Ruoli IAM di Cloud Run e le autorizzazioni IAM di Cloud Run. Se il tuo job Cloud Run si interfaccia con Le API Google Cloud, come le librerie client di Cloud, consultano guida alla configurazione dell'identità dei servizi. Per ulteriori informazioni sulla concessione dei ruoli, consulta autorizzazioni di deployment e gestire l'accesso.

Rendi un secret accessibile a Cloud Run

Puoi rendere un secret accessibile per il tuo 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 il la pagina iniziale delle impostazioni del job, se preferisci. Se stai configurando un'istanza job esistente, fai clic sul job e poi su Modifica.

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

  4. Fai clic sul pulsante Variabili e Scheda Secret.

    immagine

    • Nella sezione Variabili e Scheda Secret:
      • In Secret, fai clic su Aggiungi un riferimento secret.
      • Seleziona il secret che vuoi utilizzare dall'elenco a discesa Secret.
      • Nel Metodo di riferimento menu a discesa, seleziona il modo in cui vuoi utilizzare il secret, montato come o esposti come variabili di ambiente.
      • Se stai montando il secret come volume,
        1. In Percorso di montaggio, specifica il percorso di montaggio che stai utilizzando per i secret.
        2. Per impostazione predefinita, è selezionata la versione più recente. Puoi selezionare un modello se lo desideri. In Percorsi specificati per le versioni dei secret, specificare il percorso della versione e il relativo numero.
        3. Fai clic su Fine.
      • Se esponi il secret come variabile di ambiente:
        1. Specifica il nome della variabile e seleziona la versione del secret o più recente per utilizzare sempre la versione attuale del secret.
        2. Fai clic su Fine.
  5. Fai clic su Crea o Aggiorna.

gcloud

  • 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 tuo 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 la versione più recente versione o un numero, ad esempio 2.
    • Sostituisci IMAGE_URL con un riferimento all'immagine container, per ad esempio us-docker.pkg.dev/cloudrun/container/job:latest.

    Puoi specificare diverse coppie di variabile di ambiente/secret, utilizzando una virgola delimitato da un elenco.

  • 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 tuo job.
    • IMAGE_URL con un riferimento all'immagine container, per esempio, us-docker.pkg.dev/cloudrun/container/job:latest
    • PATHcon il percorso di montaggio del volume 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, mentre 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. Usa 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 dei vincoli relativi alla compatibilità delle API, le località dei secret devono essere archiviate in un'annotazione.

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

    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 tuo job.
    • IMAGE_URL con un riferimento all'immagine container, per ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già creati. 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. Usa latest per la versione più recente o un numero, ad esempio 2.
    • SECRET_LOOKUP_NAME con qualsiasi nome che abbia un una sintassi valida per il nome del secret (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 tuo job.
    • IMAGE_URL con un riferimento all'immagine container, per ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già creati. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATHcon il percorso di montaggio del volume 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, mentre password è il nome file del secret.
    • PROJECT_NUMBER con il numero di progetto per progetto in cui è stato creato il secret.
    • SECRET_NAME con il nome del secret, ad esempio mysecret.
    • VERSION con la versione del secret. Usa latest per la versione più recente o un numero, ad esempio 2.
    • SECRET_LOOKUP_NAME con qualsiasi nome che abbia un una sintassi valida per il nome del secret (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

Fare riferimento ai secret di altri progetti

Puoi fare riferimento a un secret di un altro progetto, se il servizio del tuo progetto account è stato autorizzato ad accedere 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 il la pagina iniziale delle impostazioni del job, se preferisci. Se stai configurando un'istanza job esistente, fai clic sul job e poi su Modifica.

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

  4. Fai clic sul pulsante Variabili e Scheda Secret.

    immagine

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

        I segreti tra progetti

      • Nel modulo Aggiungi un secret tramite ID risorsa, inserisci il secret di dell'altro progetto nel formato projects/PROJECT_NUMBER/secrets/SECRET_NAME. In alternativa, puoi copiare e incollare l'ID risorsa dall'altro progetto se a cui puoi accedere selezionando il secret, facendo clic I puntini di sospensione delle azioni a destra del secret e selezionano Copia ID risorsa dal menu a discesa.
      • Fai clic su Aggiungi secret.
      • Nel menu a discesa Metodo di riferimento, seleziona il modo utilizza il tuo 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 stai utilizzando per i secret.
        2. Per impostazione predefinita, è selezionata la versione più recente. Puoi selezionare un modello se lo desideri. In Percorsi specificati per le versioni dei secret, specificare il percorso della versione e il relativo numero.
        3. Fai clic su Fine.
      • Se esponi il secret come variabile di ambiente:
        1. Specifica il nome della variabile e seleziona la versione del secret o più recente per utilizzare sempre la versione attuale del secret.
        2. Fai clic su Fine.
  5. Fai clic su Crea o Aggiorna.

gcloud

  • 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 tuo job.
    • IMAGE_URL con un riferimento all'immagine container, per ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già creati. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATHcon il percorso di montaggio del volume 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, mentre password è il nome file del secret.
    • PROJECT_NUMBER con il numero di progetto per progetto in cui è stato creato il secret.
    • SECRET_NAME con il nome del secret, ad esempio mysecret.
    • VERSION con la versione del secret. Usa latest per la versione più recente o un numero, ad esempio 2.

YAML

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

    gcloud run jobs describe JOB_NAME --format export > job.yaml

A causa dei 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 tuo job.
    • IMAGE_URL con un riferimento all'immagine container, per ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già creati. 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. Usa latest per la versione più recente o un numero, ad esempio 2.
    • PROJECT_NUMBER con il numero di progetto per progetto in cui è stato creato il secret.
    • SECRET_LOOKUP_NAME con qualsiasi nome che abbia un una sintassi valida per il nome del secret (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 tuo job.
    • IMAGE_URL con un riferimento all'immagine container, per ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già creati. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATHcon il percorso di montaggio del volume 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, mentre password è il nome file del secret.
    • PROJECT_NUMBER con il numero di progetto per progetto in cui è stato creato il secret.
    • SECRET_NAME con il nome del secret, ad esempio mysecret.
    • VERSION con la versione del secret. Usa latest per la versione più recente o un numero, ad esempio 2.
    • SECRET_LOOKUP_NAME con qualsiasi nome che abbia un una sintassi valida per il nome del secret (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 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 lavoro che ti interessa per aprire la pagina Dettagli offerta di lavoro.

  3. Fai clic sulla scheda Configuration (Configurazione).

  4. Individua l'impostazione dei secret nella configurazione i dettagli.

gcloud

  1. Utilizza questo comando:

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

Percorsi non consentiti e limitazioni

Cloud Run non consente di montare secret all'indirizzo /dev, /proc e /sys o nelle relative sottodirectory.

Se installi i secret su /tmp e utilizzi nell'ambiente di esecuzione di prima generazione, fai riferimento al problema noto montaggio di secret su /tmp.

Cloud Run non consente di montare più secret nello stesso percorso perché non è possibile montare due volumi nella stessa posizione.

Override di una directory

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

Ad esempio, se un secret denominato my-secret è montato nel percorso /etc/app_data, tutti i contenuti della directory app_data saranno e l'unico file visibile è /etc/app_data/my-secret.

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