Configurare i secret (1ª generazione.)
Puoi utilizzare Secret Manager per archiviare in modo sicuro chiavi API, password e altre informazioni sensibili. Questa guida mostra come configurare le funzioni Cloud Run per accedere ai secret archiviati in Secret Manager.
Questo documento illustra entrambi i modi per rendere disponibile un secret alla tua funzione:
Montaggio del secret come volume. In questo modo il secret è disponibile per la funzione come file. Se fai riferimento a un secret come volume, la tua funzione accede al valore del secret da Secret Manager ogni volta che il file viene letto dal disco. Il montaggio come volume è una buona strategia se vuoi fare riferimento all'ultima versione del secret anziché a una versione bloccata del secret. Questo metodo funziona bene anche se prevedi di implementare la rotazione dei secret.
Passare il secret come variabile di ambiente. I valori delle variabili di ambiente vengono risolti all'avvio dell'istanza, quindi se utilizzi questo metodo, ti consigliamo di fare riferimento a una versione bloccata del secret anziché all'ultima versione.
Per ulteriori informazioni sull'utilizzo di Secret Manager, consulta la panoramica di Secret Manager. Per scoprire come creare e accedere ai secret, consulta Crea un secret.
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. - Se non l'hai ancora fatto, crea un secret in Secret Manager, come descritto in Crea un secret.
Concessione dell'accesso ai secret
La tua funzione può accedere ai secret che si trovano nello stesso progetto della funzione, nonché ai secret che si trovano in un altro progetto. Per accedere a un secret, è necessario concedere l'accesso al secret all'account di servizio di runtime della funzione.
Per impostazione predefinita, le funzioni Cloud Run utilizzano l'account di servizio predefinito App Engine per l'autenticazione con Secret Manager. Per l'utilizzo in produzione, Google consiglia di configurare la funzione per l'autenticazione utilizzando un service account gestito dall'utente a cui è assegnato il set di ruoli meno permissivo necessario per svolgere le attività della funzione.
Per utilizzare
Secret Manager con le funzioni Cloud Run, assegna il ruolo
roles/secretmanager.secretAccessor
aaccount di serviziont associato
alla tua funzione:
Vai alla pagina Secret Manager nella console Google Cloud :
Vai alla pagina Secret ManagerFai clic sulla casella di controllo accanto al segreto.
Se non è già aperto, fai clic su Mostra riquadro informazioni per aprirlo.
Nel riquadro informazioni, fai clic su Aggiungi entità.
Nel campo Nuove entità, inserisci il account di servizio utilizzato dalla tua funzione per la sua identità. Il account di servizio della funzione è uno dei seguenti:
L'account di servizio gestito dall'utente assegnato alla funzione al momento del deployment. Per scoprire come eseguire il deployment di una funzione con un account di servizio gestito dall'utente, vedi Utilizzare service account individuali per la funzione.
L'account di servizio predefinito di App Engine (non consigliato per l'utilizzo in produzione).
Nel menu a discesa Seleziona un ruolo, scegli Secret Manager e poi Secret Manager Secret Accessor.
Preparazione della funzione per accedere ai secret
Esistono due modi per rendere disponibile un secret alla tua funzione:
- Passare il secret come variabile di ambiente.
- Montaggio del secret come volume.
Variabili di ambiente
Per utilizzare le variabili di ambiente per rendere disponibili i secret alla tua funzione:
- Imposta una variabile di ambiente di runtime durante il deployment della funzione.
- Rendi il secret accessibile alla tua funzione in una variabile di ambiente.
- Accedi alla variabile di ambiente in modo programmatico in fase di runtime.
Montaggio del secret come volume
Per montare un secret come volume:
Crea un file contenente il secret.
Scegli una directory non di sistema inutilizzata, ad esempio
/mnt/secrets
, come percorso di montaggio per il secret. Tutti i file o le sottodirectory preesistenti in questa directory, ad eccezione del secret e delle relative versioni, diventano inaccessibili una volta montato il secret.Rendi il secret accessibile alla tua funzione come volume montato.
In fase di runtime, leggi programmaticamente i contenuti del file per accedere al valore del secret.
Ad esempio, se il secret è stato montato su /mnt/secrets/secret1
, la
funzione deve leggere questo file. Ecco un esempio di come leggere
il file in modo sincrono utilizzando Node.js:
fs.readFileSync('/mnt/secrets/secret1')
Rendere un secret accessibile a una funzione
Per fare riferimento a un secret da una funzione, devi prima renderlo accessibile alla funzione. Puoi rendere un secret accessibile a funzioni nuove o esistenti utilizzando la console Google Cloud o Google Cloud CLI:
Console
Per rendere accessibile un secret a una funzione:
Vai alla pagina Cloud Run Functions nella console Google Cloud :
Vai alla pagina Cloud Run FunctionsFai clic sul nome della funzione che vuoi autorizzare ad accedere a un secret.
Fai clic su Modifica.
Fai clic su Runtime, build… per espandere le opzioni di configurazione avanzate.
Fai clic su Repository per sicurezza e immagini per aprire la scheda.
Fai clic su Aggiungi un riferimento secret per impostare un secret per la funzione.
Seleziona il secret da rendere accessibile. Se necessario, crea un secret.
Per fare riferimento a un secret nello stesso progetto della tua funzione:
- Seleziona il segreto dall'elenco a discesa.
Per fare riferimento a un secret di un altro progetto:
Verifica che all'account di servizio del tuo progetto sia stato concesso l'accesso al secret.
Seleziona Inserisci il secret manualmente.
Inserisci l'ID risorsa del secret nel seguente formato:
projects/PROJECT_ID/secrets/SECRET_NAME
Sostituisci quanto segue:
PROJECT_ID: l'ID del progetto in cui si trova il secret.
SECRET_NAME: il nome del secret in Secret Manager.
Seleziona il metodo di riferimento per il secret. Puoi montare il secret come volume o esporlo come variabile di ambiente.
Per montare il secret come volume:
Seleziona Montato come volume.
Nel campo Percorso di montaggio, inserisci il percorso di montaggio per questo secret. Questa è la directory in cui vengono inserite tutte le versioni del secret.
Nel campo Path1, inserisci il nome del file da montare. Questo nome viene concatenato al percorso di montaggio del passaggio precedente per formare il percorso di montaggio completo in cui viene montato il secret.
Nel menu a discesa Version1, seleziona la versione del secret a cui fare riferimento.
Puoi montare versioni aggiuntive di questo secret facendo clic su +Aggiungi per definire percorsi aggiuntivi e le versioni di questo secret da montare.
Per esporre il secret come variabile di ambiente:
Seleziona Esposto come variabile di ambiente.
Nel campo Name1, inserisci il nome della variabile di ambiente.
Nel menu a discesa Version1, seleziona la versione del secret a cui fare riferimento.
Puoi esporre altre versioni di questo secret alla tua funzione facendo clic su +Aggiungi per definire altre variabili di ambiente e le versioni di questo secret da archiviare.
Fai clic su Fine.
Fai clic su Avanti.
Fai clic su Esegui il deployment.
Il codice della funzione ora può fare riferimento al secret.
gcloud
Per rendere accessibile un secret a una funzione, inserisci uno dei seguenti comandi.
Per montare il secret come volume, inserisci questo comando:
gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --runtime RUNTIME \ --set-secrets 'SECRET_FILE_PATH=SECRET:VERSION'
Sostituisci quanto segue:
FUNCTION_NAME: il nome della funzione.
RUNTIME: il runtime in cui eseguire la funzione.
SECRET_FILE_PATH: il percorso completo del secret. Ad esempio,
/mnt/secrets/primary/latest
, dove/mnt/secrets/primary/
è il percorso di montaggio elatest
è il percorso del secret. Puoi anche specificare i percorsi di montaggio e dei secret separatamente:--set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'
SECRET: il nome del secret in Secret Manager.
VERSION: la versione del secret da utilizzare. Ad esempio,
1
olatest
.
Il flag
--set-secrets
sostituisce tutti i secret esistenti. Per conservare i secret esistenti della funzione, utilizza invece il flag--update-secrets
.Per esporre il secret come variabile di ambiente, inserisci questo comando:
gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --runtime RUNTIME \ --set-secrets 'ENV_VAR_NAME=SECRET:VERSION'
Sostituisci quanto segue:
FUNCTION_NAME: il nome della funzione.
RUNTIME: il runtime in cui eseguire la funzione.
ENV_VAR_NAME: il nome della variabile di ambiente.
SECRET: il nome del secret in Secret Manager.
VERSION: la versione del secret da utilizzare. Ad esempio,
1
olatest
.
Il flag
--set-secrets
sostituisce tutti i secret esistenti. Per conservare i secret esistenti della funzione, utilizza invece il flag--update-secrets
.Puoi fare riferimento a un secret di un altro progetto se all'account di servizio della funzione è stato concesso l'accesso al secret. Per fare riferimento a un secret di un altro progetto, utilizza il percorso della risorsa del secret:
gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --runtime RUNTIME \ --update-secrets 'SECRET_FILE_PATH=SECRET_RESOURCE_PATH:VERSION'
Sostituisci quanto segue:
FUNCTION_NAME: il nome della funzione.
SECRET_RESOURCE_PATH: il percorso della risorsa per il secret che si trova in un altro progetto. Il percorso della risorsa utilizza il seguente formato:
projects/PROJECT_ID/secrets/SECRET_NAME
Sostituisci quanto segue:
PROJECT_ID: l'ID del progetto in cui si trova il secret.
SECRET_NAME: il nome del secret in Secret Manager.
RUNTIME: il runtime in cui eseguire la funzione.
SECRET_FILE_PATH: il percorso completo del secret. Ad esempio,
/mnt/secrets/primary/latest
, dove/mnt/secrets/primary/
è il percorso di montaggio elatest
è il percorso del secret. Puoi anche specificare i percorsi di montaggio e dei secret separatamente:--set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'
SECRET: il nome del secret in Secret Manager.
VERSION: la versione del secret da utilizzare. Ad esempio,
1
olatest
.
Puoi aggiornare più secret contemporaneamente. Separa le opzioni di configurazione per ogni 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 questo comando:
gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --runtime RUNTIME \ --update-secrets 'ENV_VAR_NAME=SECRET:VERSION, \ SECRET_FILE_PATH=SECRET:VERSION'
Sostituisci quanto segue:
FUNCTION_NAME: il nome della funzione.
RUNTIME: il runtime in cui eseguire la funzione.
ENV_VAR_NAME: il nome della variabile di ambiente.
SECRET: il nome del secret in Secret Manager.
VERSION: la versione del secret da utilizzare. Ad esempio,
1
olatest
.SECRET_FILE_PATH: il percorso completo del secret. Ad esempio,
/mnt/secrets/primary/latest
, dove/mnt/secrets/primary/
è il percorso di montaggio elatest
è il percorso del secret. Puoi anche specificare i percorsi di montaggio e dei secret separatamente:--set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'
Rimozione di secret da una funzione
Puoi rimuovere i secret da una funzione utilizzando la console Google Cloud o gcloud CLI:
Console
Vai alla pagina Cloud Run Functions nella console Google Cloud :
Vai alla pagina Cloud Run FunctionsFai clic sul nome della funzione per rimuovere uno dei relativi secret.
Fai clic su Modifica.
Fai clic su Impostazioni di runtime, build e connessioni per espandere le opzioni di configurazione avanzate.
Fai clic su Repository per sicurezza e immagini per aprire la scheda Sicurezza.
Tieni il puntatore sopra il segreto che vuoi rimuovere, poi fai clic su
Elimina.Fai clic su Avanti.
Fai clic su Esegui il deployment.
gcloud
Puoi rimuovere tutti i secret da una funzione o specificare uno o più secret da rimuovere:
Per rimuovere tutti i secret, esegui questo comando:
gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --runtime RUNTIME \ --clear-secrets
Sostituisci quanto segue:
FUNCTION_NAME: il nome della funzione.
RUNTIME: il runtime in cui eseguire la funzione.
Tutti i segreti vengono cancellati dalla funzione.
Per specificare un elenco di secret da rimuovere, utilizza il flag
--remove-secrets
. Il seguente comando rimuove un secret montato come volume e un altro secret esposto come variabile di ambiente:gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --runtime RUNTIME \ --remove-secrets='ENV_VAR_NAME,SECRET_FILE_PATH, ...'
Sostituisci quanto segue:
FUNCTION_NAME: il nome della funzione.
RUNTIME: il runtime in cui eseguire la funzione.
ENV_VAR_NAME: il nome della variabile di ambiente.
SECRET_FILE_PATH: il percorso completo del secret. Ad esempio,
/mnt/secrets/primary/latest
, dove/mnt/secrets/primary/
è il percorso di montaggio elatest
è il percorso del secret. Puoi anche specificare i percorsi di montaggio e dei secret separatamente:--set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'
I secret specificati vengono rimossi dalla funzione.
Visualizzare i secret accessibili della funzione
Puoi vedere a quali secret può accedere la tua funzione utilizzando la console Google Cloud o gcloud CLI:
Console
Vai alla pagina Cloud Run Functions nella console Google Cloud :
Vai alla pagina Cloud Run FunctionsFai clic sul nome della funzione per visualizzarne i secret disponibili.
Fai clic su Modifica.
Fai clic su Impostazioni di runtime, build e connessioni per espandere le opzioni di configurazione avanzate.
Fai clic su Sicurezza per aprire la scheda Sicurezza.
La scheda Sicurezza elenca i secret accessibili alla tua funzione.
gcloud
Per vedere quali secret sono disponibili per la tua funzione, utilizza il
comando gcloud functions describe
:
gcloud functions describe FUNCTION_NAME
Sostituisci FUNCTION_NAME con il nome della tua funzione.
Passaggi successivi
- Valuta la possibilità di sviluppare funzioni che utilizzano Secret Manager utilizzando le librerie client di Secret Manager.