Il servizio 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 il deployment del servizio, 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, il deployment del servizio 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 installi un volume, l'identità a cui appartengono i file e le directory è diversa a seconda dell'ambiente di esecuzione del carico di lavoro e del fatto che il deployment è costituito da uno o più container.
Nell'ambiente di esecuzione di prima generazione, in cui esegui il deployment container, il volume appartiene all'identità utilizzata per il container. In tutto in altri casi, il volume è di proprietà della directory principale. tra cui:
- Ambiente di esecuzione di prima generazione in cui esegui il deployment container
- L'ambiente di seconda generazione
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:
-
Amministratore Cloud Run (
roles/run.admin
) sul servizio 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:
- Funzione di accesso ai secret di Secret Manager (
roles/secretmanager.secretAccessor
)
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 servizio 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
Qualsiasi modifica alla configurazione porta la creazione di una nuova revisione. Anche le revisioni successive ricevono automaticamente di questa configurazione, a meno che non apporti aggiornamenti espliciti per modificarla.
Puoi rendere accessibile un secret al tuo servizio utilizzando la console Google Cloud, Google Cloud CLI o un file YAML eseguire il deployment di un nuovo servizio o aggiornare una ed eseguire il deployment di una revisione:
Console
Nella console Google Cloud, vai a Cloud Run:
Fai clic su Crea servizio se stai configurando un nuovo servizio in cui stai eseguendo il deployment. Se stai configurando un'istanza 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 il servizio iniziale pagina delle impostazioni come preferisci, poi fai clic su Container, volumi, networking, sicurezza per espandere pagina di configurazione del servizio.
Fai clic sulla scheda Contenitore.
- In Secret:
- Fai clic su Fai riferimento a un 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:
- In Percorso di montaggio, specifica il percorso di montaggio che stai utilizzando per i secret.
- 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.
- Fai clic su Fine.
- Se esponi il secret come variabile di ambiente:
- Specifica il nome della variabile e seleziona la versione del secret o più recente per utilizzare sempre la versione attuale del secret.
- Fai clic su Fine.
- In Secret:
Fai clic su Crea o Esegui il deployment.
gcloud
Per rendere un secret accessibile al tuo servizio, inserisci uno dei seguenti valori: tramite comandi SQL.
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
con il nome del tuo servizio.- 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
PATH
con 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, 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 servizio:
gcloud run deploy SERVICE \ --image IMAGE_URL \ --update-secrets=ENV_VAR_NAME=SECRET_NAME:VERSION
Sostituisci:
SERVICE
con il nome del tuo servizio.- 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
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. Per farlo, separa le opzioni di configurazione per ogni secret con una virgola. Il comando seguente aggiorna un secret montato come volume e un altro secret esposto come un 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 renderlo accessibile a usa il flag
--set-secrets
:gcloud run services update SERVICE \ --set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION"
YAML
Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe SERVICE --format export > service.yaml
Per i secret esposti come variabili di ambiente, in
env
, aggiorna il valore ENV_VAR, VERSION e/o SECRET_NAME in base alle tue esigenze. Se hai più secret montate come variabili di ambiente, avrai multipli 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 la MOUNT_PATH, VOLUME_NAME, VERSION FILENAME e/o SECRET_NAME in base alle tue esigenze. Se più secret montati come percorsi di file, ne saranno creati 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 per
VOLUME_NAME
può essere impostato qualsiasi nome.Sostituisci
- SERVICE con il nome del tuo servizio Cloud Run
- 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
- REVISION con un nuovo nome di revisione o eliminala (se presente). Se fornisci un nuovo nome per la revisione, deve soddisfare i seguenti criteri:
- Inizia con
SERVICE-
- Contiene solo lettere minuscole, numeri e
-
- Non termina con
-
- Non deve superare i 63 caratteri
- Inizia con
Sostituisci il servizio con la nuova configurazione utilizzando quanto segue :
gcloud run services replace service.yaml
Terraform
Crea un secret e una versione del secret.
Crea un account di servizio e concedigli l'accesso al secret:
È possibile accedere ai secret di Secret Manager da Cloud Run come percorsi di file montati o come variabili di ambiente.
Per i secret montati come percorsi file, fai riferimento alla risorsa Secret Manager nel parametro
volumes
.name
corrisponde a una voce nel parametrovolume_mounts
:Per i secret esposti come variabili di ambiente, fai riferimento alla risorsa Secret Manager nel parametro
env
:
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 a Cloud Run:
Fai clic su Crea servizio se stai configurando un nuovo servizio in cui stai eseguendo il deployment. Se stai configurando un'istanza 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 il servizio iniziale pagina delle impostazioni come preferisci, poi fai clic su Container, volumi, networking, sicurezza per espandere pagina di configurazione del servizio.
Fai clic sulla scheda Contenitore.
- In Secret:
- Fai clic su Fai riferimento a un secret.
- Seleziona Non vedi il tuo segreto? Inserisci l'ID risorsa del secret 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 utilizza il tuo 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. Puoi selezionare un modello se lo desideri. 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:
- Specifica il nome della variabile e seleziona la versione del secret o più recente per utilizzare sempre la versione attuale del secret.
- Fai clic su Fine.
- In Secret:
Fai clic su Crea o Esegui il deployment.
gcloud
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
con il nome del tuo servizio.- 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
PATH
con 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, mentrepassword
è 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 esempiomysecret
.VERSION
con la versione del secret. Usalatest
per la versione più recente o un numero, ad esempio2
.
YAML
Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe SERVICE --format export > service.yaml
A causa dei vincoli relativi 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
con il nome del tuo servizio.- 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
ENV_VAR
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
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
con il nome del tuo servizio.- 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
PATH
con 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, mentrepassword
è 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 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 Servizio Cloud Run:
Console
Nella console Google Cloud, vai a Cloud Run:
Fai clic sul servizio che ti interessa per aprire la pagina Dettagli servizio.
Fai clic sulla scheda Revisioni.
Nel riquadro dei dettagli a destra, l'impostazione dei secret è elencato nella scheda Contenitore.
gcloud
Utilizza questo comando:
gcloud run services describe SERVICE
Individua l'impostazione dei secret nel configurazione.
Usa i secret nel codice
Per esempi su come accedere ai secret nel tuo codice come variabili di ambiente, fai riferimento al tutorial sull'autenticazione dell'utente finale, in particolare la sezione Gestione della configurazione sensibile con Secret Manager.
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
.