Il tuo job 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 disponibile un secret ai tuoi contenitori in uno dei seguenti modi:
- Quando monti ogni secret come volume, Cloud Run lo rende disponibile per il container come file. Quando legge un volume, Cloud Run recupera sempre il valore del secret da Secret Manager per utilizzare il valore 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 all'avvio dell'istanza, quindi se utilizzi
questo metodo, Google consiglia di bloccare il secret su 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 l'esecuzione
Durante la creazione del job, Cloud Run controlla tutti i secret che utilizzi. Il controllo garantisce che il account di servizio che esegue il container abbia l'autorizzazione per accedere a questi secret.
Durante l'esecuzione, all'avvio delle istanze:
- 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 viene avviata.
- Se monti il secret come volume, Cloud Run non esegue controlli durante l'avvio dell'istanza. Tuttavia, durante l'esecuzione, se un secret è inaccessibile, i tentativi di lettura del volume montato non vanno a buon fine.
Proprietà del volume
La proprietà di un volume secret Cloud Run varia in base all'ambiente di esecuzione e al tipo di deployment.
Quando monti un volume secret utilizzando l'ambiente di esecuzione di seconda generazione, che è sempre il caso per il job, la radice è proprietaria del volume.
Prima di iniziare
-
Enable the Secret Manager API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Utilizza un secret esistente o creane uno in Secret Manager, come descritto in Creare un secret.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per configurare i secret, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Amministratore di Cloud Run (
roles/run.admin
) sul job Cloud Run -
Utente service account (
roles/iam.serviceAccountUser
) sull'identità del servizio
Per consentire a Cloud Run di accedere al secret, l'identità del servizio deve disporre del seguente ruolo:
- Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor
)
Per istruzioni su come aggiungere l'entità dell'identità del servizio al ruolo Funzione di accesso di Secret Manager, vedi 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 tuo job Cloud Run interagisce con le APIGoogle Cloud , come le librerie client Cloud, consulta la guida alla configurazione dell'identità del servizio. Per ulteriori informazioni sulla concessione dei ruoli, consulta Autorizzazioni di deployment e Gestire l'accesso.
Rendere accessibile un secret a Cloud Run
Puoi rendere accessibile un secret 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:
Seleziona Job dal menu e fai clic su Deploy container per compilare la pagina iniziale delle impostazioni del job. Se stai configurando un job esistente, seleziona il job, poi fai clic su Modifica.
Fai clic su Container, volumi, connessioni, sicurezza per espandere la pagina delle proprietà del job.
Fai clic sulla scheda Variabili e secret.
- Nella scheda Variabili e secret:
Per esporre il secret come variabile di ambiente:
- Fai clic sulla scheda Container.
- Nella scheda Variabili e secret, fai clic su Fai riferimento a un secret.
- Nel campo Nome 1, inserisci il nome della variabile di ambiente.
- Dall'elenco Secret, seleziona il segreto che vuoi utilizzare.
- Nell'elenco Versione 1, seleziona la versione del secret a cui fare riferimento.
- Fai clic su Fine.
- Fai clic su Crea o Esegui il deployment.
Per montare il secret come volume:
- Fai clic sulla scheda Volumi e seleziona Aggiungi volume.
- Nell'elenco Tipo di volume, seleziona Secret.
- Nel campo Nome volume, inserisci un nome o accetta il nome predefinito.
- Dall'elenco Secret, seleziona il segreto che vuoi utilizzare.
- Nel campo Percorso 1, inserisci il nome del file da montare.
- 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.
- Fai clic su Fine.
- Vai alla scheda Container per montare il secret nel container.
- Nella scheda Montaggi volumi, fai clic su Monta volume.
- Nell'elenco Nome 1, seleziona il nome del volume.
- Nel campo Percorso di montaggio 1, inserisci il percorso di montaggio per questo secret. Questa è la directory in cui vengono inserite tutte le versioni del secret.
- Fai clic su Fine.
- Fai clic su Crea o Esegui il deployment.
- Nella scheda Variabili e 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 quanto segue:
- JOB_NAME: il nome del job.
- ENV_VAR_NAME: il nome della variabile di ambiente da utilizzare per il secret.
- SECRET_NAME: il nome del secret nello stesso progetto, ad esempio
mysecret
. - VERSION: la versione secret. Utilizza
latest
per la versione più recente o un numero, ad esempio2
. - IMAGE_URL: un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/job:latest
.
Puoi specificare diverse coppie variabile di ambiente/secret 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 quanto segue:
- JOB_NAME: il nome del job.
- IMAGE_URL: un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/job:latest
. - 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 epassword
è il nome file del secret. - SECRET_NAME: il nome del secret nello stesso progetto, ad esempio
mysecret
. - VERSION: la versione secret. Utilizza
latest
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 posizioni 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 quanto segue:
- JOB: il nome del job.
- IMAGE_URL: un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/job:latest
. - SECRET_NAME: il nome del secret, ad esempio
mysecret
. - VERSION: la versione secret. Utilizza
latest
per la versione più recente o un numero, ad esempio2
. - SECRET_LOOKUP_NAME: qualsiasi nome con una
sintassi valida per il nome secret, ad esempio
my-secret
. Può essere uguale a SECRET_NAME.
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 quanto segue:
- JOB_NAME: il nome del job.
- IMAGE_URL: un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/job:latest
. - 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 epassword
è 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 secret. Utilizza
latest
per la versione più recente o un numero, ad esempio2
. - SECRET_LOOKUP_NAME: qualsiasi nome con una
sintassi valida per il nome secret, ad esempio
my-secret
. Può essere uguale a SECRET_NAME. - VOLUME_NAME: un nome qualsiasi, 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 risorsagoogle_cloud_run_v2_job
nella configurazione Terraform:Per i secret esposti come variabili di ambiente:
resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
template {
containers {
image = "IMAGE_URL"
env {
name = "SECRET_NAME"
value_source {
secret_key_ref {
secret = "SECRET_NAME"
version = "VERSION"
}
}
}
}
}
}
}
Sostituisci quanto segue:
- JOB_NAME: il nome del job Cloud Run.
- REGION: la Google Cloud regione. Ad esempio
europe-west1
. - IMAGE_URL: un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/job:latest
. - SECRET_NAME: il nome del secret, ad esempio
mysecret
. - VERSION: la versione secret. Utilizza
latest
per la versione più recente o un numero, ad esempio2
.
Per i secret montati come percorsi di file:
resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
secret {
secret = "SECRET_NAME"
}
}
}
}
}
Sostituisci quanto segue:
- JOB_NAME: il nome del job Cloud Run.
- REGION: la Google Cloud regione. Ad esempio
europe-west1
. - IMAGE_URL: un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/job:latest
. - VOLUME_NAME: un nome qualsiasi, ad esempio
my-volume
. Può essere uguale aSECRET_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 epassword
è il nome file del secret. - SECRET_NAME: il nome del secret, ad esempio
mysecret
.
Fare riferimento ai secret di altri progetti
Puoi fare riferimento a un secret di un altro progetto se l'account di servizio del tuo progetto è stato autorizzato ad accedere al secret.
Console
Nella console Google Cloud , vai alla pagina dei job Cloud Run:
Seleziona Job dal menu e fai clic su Deploy container per compilare la pagina iniziale delle impostazioni del job. Se stai configurando un job esistente, seleziona il job, poi fai clic su Modifica.
Fai clic su Container, volumi, connessioni, sicurezza per espandere la pagina delle proprietà del job.
Fai clic sulla scheda Variabili e secret.
- Nella scheda Variabili e secret:
Per esporre il secret come variabile di ambiente:
- Fai clic sulla scheda Container.
- Nella scheda Variabili e secret, fai clic su Fai riferimento a un secret.
- Nel campo Nome 1, inserisci il nome della variabile di ambiente.
- Nell'elenco Secret, fai clic su Inserisci il secret manualmente.
Inserisci l'ID risorsa del secret nel seguente formato:
projects/PROJECT_NUMBER/secrets/SECRET_NAME
Sostituisci quanto segue:
PROJECT_NUMBER con il numero del tuo progetto Google Cloud . Per istruzioni dettagliate su come trovare il numero del progetto, vedi Creazione e gestione dei progetti.
SECRET_NAME: il nome del secret in Secret Manager.
Nell'elenco Versione 1, seleziona la versione del secret a cui fare riferimento.
Fai clic su Fine.
Fai clic su Crea o Esegui il deployment.
Per montare il secret come volume:
- Fai clic sulla scheda Volumi e seleziona Aggiungi volume.
- Nell'elenco Tipo di volume, seleziona Secret.
- Nel campo Nome volume, inserisci un nome o accetta il nome predefinito.
- Nell'elenco Secret, fai clic su Inserisci il secret manualmente.
Inserisci l'ID risorsa del secret nel seguente formato:
projects/PROJECT_NUMBER/secrets/SECRET_NAME
Sostituisci quanto segue:
PROJECT_NUMBER con il numero del tuo progetto Google Cloud . Per istruzioni dettagliate su come trovare il numero del progetto, vedi Creazione e gestione dei progetti.
SECRET_NAME: il nome del secret in Secret Manager.
Nel campo Percorso 1, inserisci il nome del file da montare.
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.
Fai clic su Fine.
Vai alla scheda Container per montare il secret nel container.
Nella scheda Montaggi volumi, fai clic su Monta volume.
Nell'elenco Nome 1, seleziona il nome del volume.
Nel campo Percorso di montaggio 1, inserisci il percorso di montaggio per questo secret. Questa è la directory in cui vengono inserite tutte le versioni del secret.
Fai clic su Fine.
Fai clic su Crea o Esegui il deployment.
- Nella scheda Variabili e 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: il nome del job.
- IMAGE_URL: un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/job:latest
. - 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 epassword
è 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 secret. Utilizza
latest
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 dei vincoli relativi alla compatibilità delle API, le posizioni dei secret devono essere archiviate 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 quanto segue:
- JOB: il nome del job.
- IMAGE_URL: un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/job:latest
. - SECRET_NAME: il nome del secret, ad esempio
mysecret
. - VERSION: la versione secret. Utilizza
latest
per la versione più recente o un numero, ad esempio2
. - PROJECT_NUMBER: il numero del progetto in cui è stato creato il secret.
- SECRET_LOOKUP_NAME: qualsiasi nome con una
sintassi valida per il nome secret, ad esempio
my-secret
. Può essere uguale a SECRET_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 quanto segue:
- JOB_NAME: il nome del job.
- IMAGE_URL: un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/job:latest
. - 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 epassword
è 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 secret. Utilizza
latest
per la versione più recente o un numero, ad esempio2
. - SECRET_LOOKUP_NAME: qualsiasi nome con una
sintassi valida per il nome secret, ad esempio
my-secret
, che 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 risorsagoogle_cloud_run_v2_job
nella configurazione Terraform:Per i secret esposti come variabili di ambiente:
resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
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:
- JOB_NAME: il nome del job Cloud Run.
- REGION: la Google Cloud regione. Ad esempio
europe-west1
. - IMAGE_URL: un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/job:latest
. - SECRET_NAME: il nome del secret, ad esempio
mysecret
. - PROJECT_ID: l'ID del progetto in cui è stato creato il secret.
- VERSION: la versione secret. Utilizza
latest
per la versione più recente o un numero, ad esempio2
.
Per i secret montati come percorsi di file:
resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
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:
- JOB_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/job:latest
. - VOLUME_NAME: un nome qualsiasi, ad esempio
my-volume
, può essere lo stesso diSECRET_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 epassword
è il nome file del secret. - PROJECT_ID: l'ID del 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 dei secret attuali per il tuo job Cloud Run:
Console
Nella console Google Cloud , vai alla pagina dei job Cloud Run:
Fai clic sull'offerta di lavoro che ti interessa per aprire la pagina Dettagli offerta di lavoro.
Fai clic su Visualizza e modifica la configurazione del job.
Individua l'impostazione dei secret nei dettagli di configurazione.
gcloud
Utilizza questo comando:
gcloud run jobs describe JOB_NAME
Individua l'impostazione dei secret nella configurazione restituita.
Percorsi non consentiti e limitazioni
Si applicano le seguenti limitazioni al montaggio dei secret:
- Cloud Run non consente di montare secret in
/dev
,/proc
e/sys
o nelle relative sottodirectory. - Cloud Run non consente di montare più secret nello stesso percorso perché non è possibile montare due volumi nella stessa posizione.
Eseguire l'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à, tutti i file o le cartelle nella directory esistente diventano inaccessibili.
Ad esempio, se un secret denominato my-secret
viene montato sul 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
del secret sia /etc/app_data/secrets/my-secret
.