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 volume, in modo che il secret sia disponibile come container sotto forma di file. La lettura di un volume recupera sempre il valore del secret da Secret Manager, pertanto può essere utilizzato con la versione più recente. Questo metodo funziona bene anche con la rotazione dei secret.
- Trasmettere un secret utilizzando 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 versione specifica, anziché utilizzare la versione più recente.
Per ulteriori informazioni, consulta il documento sulle best practice di Secret Manager.
Come vengono controllati i secret a livello di deployment e runtime
Durante il deployment del servizio o la creazione del job, tutti i secret utilizzati, come variabile di ambiente o montati come volume, vengono controllati per garantire che l'account di servizio utilizzato per eseguire il container abbia accesso a essi. Se un controllo non va a buon fine, il deployment o la creazione del job non vanno a buon fine.
Durante l'esecuzione, quando le istanze si avviano:
- Se il secret è una variabile di ambiente, il valore del secret viene recuperato prima di avviare l'istanza, quindi se il recupero del secret non riesce, l'istanza non si avvia.
- Se il secret viene montato come volume, non vengono eseguiti controlli durante l'avvio dell'istanza. Tuttavia, durante il runtime, se un secret è inaccessibile, l'operazione di lettura del volume montato non andrà a buon fine.
La proprietà del volume varia in base all'ambiente di esecuzione e al tipo di deployment
Quando installi un volume, l'identità proprietaria dei file e delle directory cambia a seconda dell'ambiente di esecuzione del carico di lavoro e del fatto che il deployment sia costituito da uno o più container.
Nell'ambiente di esecuzione di prima generazione in cui esegui il deployment di un singolo container, il volume è di proprietà dell'identità utilizzata per il container. In tutti gli altri casi, il volume appartiene alla radice. tra cui:
- Ambiente di esecuzione di prima generazione in cui esegui il deployment di più container
- L'ambiente di seconda generazione
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 Funzione di accesso ai secret di Secret Manager all'account di servizio Cloud Run:
Vai alla pagina di Secret Manager nella console Google Cloud
Seleziona il secret e, nella parte destra della scheda delle autorizzazioni, fai clic su Aggiungi entità.
Nella casella di testo Nuove entità, inserisci l'indirizzo email dell'account di servizio per il servizio Cloud Run.
Concedi il ruolo Accessore secret a Secret Manager.
Rendi un secret accessibile a Cloud Run
Puoi rendere i secret disponibili per i servizi e i job.
Per i servizi Cloud Run
Qualsiasi modifica alla configurazione porta alla creazione di una nuova revisione. 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
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 e poi su Modifica ed esegui il deployment di una nuova revisione.
Se stai configurando un nuovo servizio, compila la pagina delle impostazioni del servizio iniziale come preferisci, quindi fai clic su Container, Networking, Security per espandere la pagina di configurazione del servizio.
Fai clic sulla scheda Contenitore.
- In Secret:
- Fai clic su 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:
- In Percorso di montaggio, specifica il percorso di montaggio utilizzato 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, specifica il percorso alla versione e il numero di versione.
- Fai clic su Fine.
- Se esponi il secret come variabile di ambiente:
- Fornisci il nome della variabile e seleziona la versione del secret oppure più recente per utilizzare sempre la versione del secret attuale.
- Fai clic su Fine.
- In Secret:
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
il nome del tuo servizio.- IMAGE_URL con un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/hello:latest
. Quando utilizzi Artifact Registry, l'URL ha il formato:REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. PATH
con il percorso di montaggio del volume e del 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, 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 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
il nome del tuo servizio.- IMAGE_URL con un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/hello:latest
. Quando utilizzi Artifact Registry, l'URL ha il formato:REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. 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 esempiomysecret
.VERSION
con la versione del secret. Usalatest
per la versione più recente o un numero, ad esempio2
.
Puoi aggiornare più secret contemporaneamente. A questo scopo, separa le opzioni di configurazione di ciascun secret con una virgola. Il seguente comando aggiorna un secret montato come volume e un altro secret esposto come variabile di ambiente.
Per aggiornare i secret esistenti, inserisci il comando seguente:
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 le configurazioni di servizio esistenti utilizzando il comando
gcloud run services describe --format export
, che genera
risultati puliti in formato YAML.
Successivamente, potrai modificare i campi descritti di seguito e caricare il file YAML modificato utilizzando il comando gcloud run services replace
.
Assicurati di modificare solo i campi come documentato.
Per visualizzare e scaricare la configurazione:
gcloud run services describe SERVICE --format export > service.yaml
Per i secret esposti come variabili di ambiente, in
env
, aggiorna ENV_VAR, VERSION e/o SECRET_NAME in base alle esigenze. 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
Per i secret montati come percorsi di file, aggiorna MOUNT_PATH, VOLUME_NAME, VERSION, FILENAME e/o SECRET_NAME in base alle esigenze. Se disponi di più secret montati come percorsi di 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 è possibile impostare i nomi di
VOLUME_NAME
.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
. Quando utilizzi Artifact Registry, l'URL ha il formato:REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - REVISION con un nuovo nome di revisione o eliminalo (se presente). Se fornisci un nuovo nome della revisione, deve soddisfare i seguenti criteri:
- Inizia con
SERVICE-
- Contiene solo lettere minuscole, numeri e
-
- Non termina con
-
- Non superare i 63 caratteri.
- Inizia con
Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:
gcloud run services replace service.yaml
Fare riferimento a 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
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 e poi su Modifica ed esegui il deployment di una nuova revisione.
Se stai configurando un nuovo servizio, compila la pagina delle impostazioni del servizio iniziale come preferisci, quindi fai clic su Container, Networking, Security per espandere la pagina di configurazione del servizio.
Fai clic sulla scheda Contenitore.
- In Secret:
- Fai clic su 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:
- 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 hai accesso a quest'ultimo, 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:
- In Percorso di montaggio, specifica il percorso di montaggio utilizzato 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, specifica il percorso alla versione e il numero di versione.
- Fai clic su Fine.
- Se esponi il secret come variabile di ambiente:
- Fornisci il nome della variabile e seleziona la versione del secret oppure più recente per utilizzare sempre la versione del secret attuale.
- Fai clic su Fine.
- In Secret:
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
il nome del tuo servizio.- IMAGE_URL con un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/hello:latest
. Quando utilizzi Artifact Registry, l'URL ha il formato:REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. PATH
con il percorso di montaggio del volume e del 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, mentrepassword
è 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 esempiomysecret
.VERSION
con la versione del secret. Usalatest
per la versione più recente o un numero, ad esempio2
.
YAML
Puoi scaricare e visualizzare le configurazioni di servizio esistenti utilizzando il comando
gcloud run services describe --format export
, che genera
risultati puliti in formato YAML.
Successivamente, potrai modificare i campi descritti di seguito e caricare il file YAML modificato utilizzando il comando gcloud run services replace
.
Assicurati di modificare solo i campi come documentato.
Per visualizzare e scaricare la configurazione:
gcloud run services describe SERVICE --format export > service.yaml
A causa di vincoli intorno alla compatibilità delle API, le località dei secret devono essere archiviate in un'annotazione.
Per i secret esposti come variabili di ambiente:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: 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
il nome del tuo servizio.- IMAGE_URL con un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/hello:latest
. Quando utilizzi Artifact Registry, l'URL ha il formato:REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. ENV_VAR
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
.SECRET_LOOKUP_NAME
con un nome e con una sintassi valida per il nome del secret (ad esempiomy-secret
), può essere uguale aSECRET_NAME
Per i secret montati come percorsi di file:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: 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
il nome del tuo servizio.- IMAGE_URL con un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/hello:latest
. Quando utilizzi Artifact Registry, l'URL ha il formato:REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. PATH
con il percorso di montaggio del volume e del 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, mentrepassword
è 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 esempiomysecret
.VERSION
con la versione del secret. Usalatest
per la versione più recente o un numero, ad esempio2
.SECRET_LOOKUP_NAME
con un nome e con una sintassi valida per il nome del secret (ad esempiomy-secret
), può essere uguale aSECRET_NAME
VOLUME_NAME
con qualsiasi nome (ad esempiomy-volume
), può essere uguale aSECRET_NAME
Per job Cloud Run
Puoi rendere un secret accessibile per il tuo job utilizzando la console Google Cloud, Google Cloud CLI o YAML:
Console
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.
Fai clic su Container, variabili e secret, connessioni, sicurezza per espandere la pagina delle proprietà del job.
Fai clic sulla scheda Variabili e secret.
- Nella scheda Variabili e secret:
- In Secret, fai clic su Reference a 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,
- In Percorso di montaggio, specifica il percorso di montaggio utilizzato 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, specifica il percorso alla versione e il numero di versione.
- Fai clic su Fine.
- Se esponi il secret come variabile di ambiente:
- Fornisci il nome della variabile e seleziona la versione del secret oppure più recente per utilizzare sempre la versione del secret attuale.
- Fai clic su Fine.
- Nella scheda Variabili e secret:
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 la versione più recente o un numero, ad esempio2
. - Sostituisci IMAGE_URL con un riferimento all'immagine container, ad esempio
us-docker.pkg.dev/cloudrun/container/job:latest
.
Puoi specificare diverse coppie variabile/secret di ambiente, utilizzando un elenco delimitato da virgole.
Per specificare il secret in una variabile di ambiente quando aggiorni 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
PATH
con il percorso di montaggio del volume e del 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, 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 di vincoli intorno alla compatibilità delle API, le località dei secret devono essere archiviate in un'annotazione.
Scarica e visualizza la configurazione del job esistente utilizzando il comando gcloud run jobs describe --format export
, che genera risultati puliti in formato YAML. Successivamente, modifica i campi descritti di seguito e carica il file YAML modificato utilizzando il comando gcloud run jobs replace
.
Assicurati di modificare solo i campi come documentato.
Per visualizzare e scaricare la configurazione:
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, ad esempio
us-docker.pkg.dev/cloudrun/container/hello:latest
. Quando utilizzi Artifact Registry, l'URL ha il formato:REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. 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 un nome e con una sintassi valida per il nome del secret (ad esempiomy-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: 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
. Quando utilizzi Artifact Registry, l'URL ha il formato:REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. PATH
con il percorso di montaggio del volume e del 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, mentrepassword
è 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 esempiomysecret
.VERSION
con la versione del secret. Usalatest
per la versione più recente o un numero, ad esempio2
.SECRET_LOOKUP_NAME
con un nome e con una sintassi valida per il nome del secret (ad esempiomy-secret
), può essere uguale aSECRET_NAME
VOLUME_NAME
con qualsiasi nome (ad esempiomy-volume
), può essere uguale aSECRET_NAME
Visualizza le impostazioni dei secret
Per visualizzare le impostazioni dei secret attuali per il tuo servizio Cloud Run:
Console
Fai clic sul servizio che ti interessa per aprire la pagina Dettagli del servizio.
Fai clic sulla scheda Revisioni.
Nel riquadro dei dettagli a destra, l'impostazione dei secret è elencata nella scheda Variabili e secret.
Riga di comando
Utilizza il comando seguente:
gcloud run services describe SERVICE
Individua l'impostazione dei secret nella configurazione restituita.
Per visualizzare le impostazioni dei secret attuali per il tuo job Cloud Run:
Console
Fai clic sul job che ti interessa per aprire la pagina Dettagli job.
Fai clic sulla scheda Configuration (Configurazione).
Individua l'impostazione dei secret nei dettagli di configurazione.
Riga di comando
Utilizza il comando seguente:
gcloud run jobs describe JOB_NAME
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, fare riferimento al tutorial sull'autenticazione dell'utente finale, in particolare la sezione Gestire la configurazione sensibile con Secret Manager.
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 un ambiente di esecuzione di prima generazione, fai riferimento al problema noto relativo al montaggio dei secret su /tmp
.
Cloud Run non consente di montare più secret nello stesso percorso, perché due montaggi di volume non possono essere montati nella stessa posizione.