Il tuo job potrebbe 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 sia 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 l'ultima versione. Questo metodo funziona bene anche con la rotazione delle chiavi segrete.
- Passa un segreto 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 il più recente.
Per saperne di più, consulta Secret Manager best practice.
Come vengono controllati i secret in fase di deployment e di 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 segreto è una variabile di ambiente, il relativo valore viene recuperato prima dell'avvio dell'istanza, pertanto se il recupero del segreto non va a buon fine, l'istanza non si avvia.
- Se il secret viene montato come volume, non viene eseguito alcun controllo durante l'avvio dell'istanza. Tuttavia, durante l'esecuzione, se un segreto non è accessibile, i tentativi di lettura del volume montato non andranno a buon fine.
La proprietà del volume varia in base all'ambiente di esecuzione e al tipo di deployment
Quando monta un volume secret utilizzando l'esecuzione di seconda generazione nel caso dei job, il volume è di proprietà dell'utente root.
Prima di iniziare
-
Enable the Secret Manager API.
- 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:
-
Amministratore Cloud Run (
roles/run.admin
) sul job Cloud Run -
Utente account di servizio (
roles/iam.serviceAccountUser
) sull'identità del servizio
Per consentire a Cloud Run di accedere al secret, identità servizio deve avere il ruolo seguente:
- Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor
)
Per istruzioni su come aggiungere l'entità identità del servizio al ruolo Accesso ai secret di Secret Manager, consulta Gestire l'accesso ai secret.
Per un elenco dei ruoli e delle autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il tuo job Cloud Run si interfaccia con le API Google Cloud, come le librerie client Cloud, consulta la guida alla configurazione dell'identità del servizio. Per ulteriori informazioni sulla concessione dei ruoli, consulta le autorizzazioni di deployment e gestisci l'accesso.
Rendere un secret accessibile a Cloud Run
Puoi rendere un segreto accessibile al tuo job utilizzando la console Google Cloud, Google Cloud CLI o YAML:
Console
Nella console Google Cloud, vai alla pagina dei job Cloud Run:
Fai clic su Esegui il deployment del contenitore e seleziona Job per compilare la pagina delle impostazioni iniziali del job. Se stai configurando un job esistente, seleziona il job, quindi fai clic su Modifica.
Fai clic su Contenitore, variabili e secret, connessioni, sicurezza per espandere la pagina delle proprietà del job.
Fai clic sul pulsante Variabili e Scheda Secret.
- Nella sezione Variabili e Scheda Secret:
- In Secret, fai clic su Aggiungi un riferimento secret.
- Seleziona il segreto 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,
- In Percorso di montaggio, specifica il percorso di montaggio che stai utilizzando per i secret.
- Per impostazione predefinita, è selezionata la versione più recente. Se vuoi, puoi selezionare una versione specifica. In Percorsi specificati per le versioni dei secret, specificare il percorso della versione e il relativo numero.
- Fai clic su Fine.
- Se esponi il secret come variabile di ambiente:
- Fornisci il nome della variabile e seleziona la versione del secret o latest per utilizzare sempre la versione corrente del secret.
- Fai clic su Fine.
- Nella sezione Variabili e Scheda Secret:
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 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. Utilizza
latest
per la versione più recente o un numero, ad esempio2
. - Sostituisci IMAGE_URL con un riferimento all'immagine del container, ad esempio
us-docker.pkg.dev/cloudrun/container/job:latest
.
Puoi specificare più coppie di variabili d'ambiente/token 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, per
esempio,
us-docker.pkg.dev/cloudrun/container/job:latest
PATH
con 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, mentrepassword
è il nome file del secret.SECRET_NAME
con il nome del secret nello stesso progetto, ad esempiomysecret
.VERSION
con la versione del secret. Usalatest
per la versione più recente o un numero, ad esempio2
.
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.
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
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, per
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 ha la formaLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
SECRET_NAME
con il nome del secret, ad esempiomysecret
.VERSION
con la versione del secret. Utilizzalatest
per la versione più recente o un numero, ad esempio2
.SECRET_LOOKUP_NAME
con qualsiasi nome che abbia un una sintassi valida per il nome del secret (ad es.my-secret
), può essere uguale aSECRET_NAME
Per i secret montati come percorsi 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 del 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 ha la formaLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
PATH
con il percorso di montaggio del volume e il nome del 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 epassword
è il nome del file del segreto.PROJECT_NUMBER
con il numero di progetto per progetto in cui è stato creato il secret.SECRET_NAME
con il nome del secret, ad esempiomysecret
.VERSION
con la versione del secret. Usalatest
per la versione più recente o un numero, ad esempio2
.SECRET_LOOKUP_NAME
con qualsiasi nome che abbia una sintassi di nome secret valida (ad es.my-secret
), può essere uguale aSECRET_NAME
VOLUME_NAME
con qualsiasi nome (ad es.my-volume
), può essere uguale aSECRET_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
Nella console Google Cloud, vai alla pagina dei job Cloud Run:
Fai clic su Esegui il deployment del container e seleziona Job per compilare il job iniziale. pagina delle impostazioni. Se stai configurando un job esistente, selezionalo e fai clic su Modifica.
Fai clic su Contenitore, variabili e secret, connessioni, sicurezza per espandere la pagina delle proprietà del job.
Fai clic sul pulsante Variabili e Scheda Secret.
- 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:
- 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 in cui vuoi utilizzare il segreto, montato come volume o esposto come variabili di ambiente.
- Se stai montando il secret come volume,
- In Percorso di montaggio, specifica il percorso di montaggio che stai utilizzando per i secret.
- Per impostazione predefinita, è selezionata la versione più recente. Se vuoi, puoi selezionare una versione specifica. In Percorsi specificati per le versioni dei secret, specificare il percorso della versione e il relativo numero.
- Fai clic su Fine.
- Se esponi il secret come variabile di ambiente:
- Fornisci il nome della variabile e seleziona la versione del secret o latest per utilizzare sempre la versione corrente del secret.
- Fai clic su Fine.
- Nella sezione Variabili e Scheda Secret:
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 del container, 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 formaLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
PATH
con il percorso di montaggio del volume e il nome del 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 epassword
è il nome del file del segreto.PROJECT_NUMBER
con il numero del progetto in cui è stato creato il secret.SECRET_NAME
con il nome del secret, ad esempiomysecret
.VERSION
con la versione del secret. Usalatest
per la versione più recente o un numero, ad esempio2
.
YAML
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 di vincoli relativi alla compatibilità con le API, le posizioni degli secret devono essere memorizzate in un'annotazione.
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, 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 formaLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
SECRET_NAME
con il nome del secret, ad esempiomysecret
.VERSION
con la versione del secret. Utilizzalatest
per la versione più recente o un numero, ad esempio2
.PROJECT_NUMBER
con il numero del progetto in cui è stato creato il secret.SECRET_LOOKUP_NAME
con qualsiasi nome che abbia una sintassi di nome secret valida (ad es.my-secret
), può essere uguale aSECRET_NAME
.
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, per
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 ha la formaLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
PATH
con il percorso di montaggio del volume e il nome del 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 epassword
è il nome del file del segreto.PROJECT_NUMBER
con il numero di progetto per progetto in cui è stato creato il secret.SECRET_NAME
con il nome del secret, ad esempiomysecret
.VERSION
con la versione del secret. Usalatest
per la versione più recente o un numero, ad esempio2
.SECRET_LOOKUP_NAME
con qualsiasi nome che abbia un una sintassi valida per il nome del secret (ad es.my-secret
), può essere uguale aSECRET_NAME
.VOLUME_NAME
con qualsiasi nome (ad es.my-volume
), può essere uguale aSECRET_NAME
.
Visualizza le impostazioni dei secret
Per visualizzare le impostazioni attuali dei secret per Job Cloud Run:
Console
Nella console Google Cloud, vai alla pagina dei job Cloud Run:
Fai clic sul lavoro che ti interessa per aprire la pagina Dettagli offerta di lavoro.
Fai clic sulla scheda Configuration (Configurazione).
Individua l'impostazione dei secret nella configurazione i dettagli.
gcloud
Utilizza il seguente comando:
gcloud run jobs describe JOB_NAME
Individua l'impostazione dei secret nella configurazione restituita.
Percorsi non consentiti e limitazioni
Cloud Run non ti consente di montare i secret in /dev
,
/proc
e /sys
o nelle relative sottodirectory.
Se monti i 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 ti consente di montare più segreti nello stesso percorso perché non è possibile montare due mount del volume nella stessa posizione.
Sostituzione 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 segreto 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 il montaggio del secret, ad esempio /etc/app_data/secrets
, in modo che il percorso di montaggio del secret sia /etc/app_data/secrets/my-secret
.