Configurare i secret (1ª generazione.)
Puoi utilizzare Secret Manager per archiviare in modo sicuro chiavi API, password e altre informazioni sensibili. Questa guida ti 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 per la funzione:
Montare il secret come volume. In questo modo, lo secret sarà disponibile per la funzione come file. Se fai riferimento a un secret come volume, la funzione accede al valore del secret da Secret Manager ogni volta che il file viene letto dal disco. Questo rende il montaggio come volume una buona strategia se vuoi fare riferimento alla versione più recente del secret anziché a una versione bloccata del secret. Questo metodo funziona bene anche se prevedi di implementare la rotazione delle chiavi segrete.
Trasmettendo il secret come variabile di ambiente. I valori delle variabili di ambiente vengono risolti al momento dell'avvio dell'istanza, quindi, se utilizzi questo metodo, ti consigliamo di fare riferimento a una versione bloccata del segreto anziché alla versione più recente del segreto.
Per ulteriori informazioni sull'utilizzo di Secret Manager, consulta la panoramica di Secret Manager. Per imparare a creare e accedere ai secret, consulta Creare un secret.
Prima di iniziare
-
Enable the Secret Manager API.
- Se non l'hai ancora fatto, crea un secret in Secret Manager, come descritto in Creare un secret.
Concedere l'accesso ai secret
La funzione può accedere ai secret nello stesso progetto della funzione e a quelli in un altro progetto. Per accedere a un secret, è necessario concedere all'account di servizio di runtime della funzione l'accesso al secret.
Per impostazione predefinita, le funzioni Cloud Run utilizzano l'account di servizio predefinito di App Engine per autenticarsi con Secret Manager. Per l'utilizzo in produzione, Google consiglia di configurare la funzione in modo che si autentichi utilizzando un service account gestito dall'utente a cui è assegnato il set di ruoli meno permissivi necessari per svolgere le attività della funzione.
Per utilizzare Secret Manager con le funzioni Cloud Run, assegna il ruolo roles/secretmanager.secretAccessor
all'account di servizio 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 delle informazioni, fai clic su Aggiungi entità.
Nel campo Nuove entità, inserisci l'account di servizio utilizzato dalla funzione per la sua identità. L'account di servizio della funzione è uno dei seguenti:
L'account di servizio gestito dall'utente assigned to the function at deployment time. Per scoprire come eseguire il deployment di una funzione con un account di servizio gestito dall'utente, consulta Utilizzare singoli account di servizio 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 Accesso ai segreti di Secret Manager.
Preparare la funzione per accedere ai secret
Esistono due modi per rendere disponibile un segreto per la funzione:
- Passare il secret come variabile di ambiente.
- Montare il secret come volume.
Variabili di ambiente
Per utilizzare le variabili di ambiente per rendere disponibili i secret per la funzione:
- Impostare una variabile di ambiente di runtime durante il deployment della funzione.
- Rendi il segreto accessibile alla tua funzione in una variabile di ambiente.
- Accedi alla variabile di ambiente programmaticamente in fase di esecuzione.
Montaggio del secret come volume
Per montare un secret come volume:
Crea un file contenente il tuo secret.
Scegli una directory non di sistema non utilizzata come
/mnt/secrets
come percorso di montaggio per il segreto. Una volta montato il secret, tutti i file o le sottodirectory preesistenti in quella directory, ad eccezione del secret e delle sue versioni, diventano inaccessibili.Rendi il secret accessibile alla tua funzione come volume montato.
In fase di esecuzione, leggi i contenuti del file in modo programmatico per accedere al valore segreto.
Ad esempio, se il segreto è 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 rendere il secret accessibile alla funzione. Puoi rendere un segreto accessibile a funzioni nuove o esistenti utilizzando la console Google Cloud o Google Cloud CLI:
Console
Per rendere un secret accessibile a una funzione:
Vai alla pagina Funzioni Cloud Run nella console Google Cloud:
Vai alla pagina Funzioni Cloud RunFai clic sul nome della funzione che deve poter accedere a un secret.
Fai clic su Modifica.
Fai clic su Runtime, build… per espandere le opzioni di configurazione avanzata.
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 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 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 segreto.
SECRET_NAME: il nome del secret in Secret Manager.
Seleziona il metodo di riferimento per il secret. Puoi montare il secret come un volume o esporlo come variabile di ambiente.
Per montare il secret come volume:
Seleziona Montato come volume.
Nel campo Percorso montaggio, inserisci il percorso di montaggio per questo secret. Si tratta della directory in cui sono collocate 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 è montato il segreto.
Nel menu a discesa Version1, seleziona la versione del secret da 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 al loro interno.
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 da fare riferimento.
Puoi esporre altre versioni di questo secret alla funzione facendo clic su + Aggiungi per definire altre variabili di ambiente e le versioni di questo secret da memorizzare al loro interno.
Fai clic su Fine.
Fai clic su Avanti.
Fai clic su Esegui il deployment.
Ora il codice della funzione può fare riferimento al segreto.
gcloud
Per rendere un secret accessibile a una funzione, inserisci uno dei seguenti comandi.
Per montare il segreto come volume, inserisci il seguente 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 della 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 mantenere i secret esistenti della funzione, utilizza invece il flag--update-secrets
.Per esporre il segreto come variabile di ambiente, inserisci il seguente 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 mantenere i secret esistenti della funzione, utilizza invece il flag--update-secrets
.Puoi fare riferimento a un segreto di un altro progetto se all'account di servizio della funzione è stato concesso l'accesso al segreto. 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 segreto 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 segreto.
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 della 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 segreto con una virgola. Il seguente comando aggiorna un segreto montato come volume e un altro segreto esposto come variabile di ambiente.
Per aggiornare i secret esistenti, inserisci il seguente 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 della 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 Funzioni Cloud Run nella console Google Cloud:
Vai alla pagina Funzioni Cloud RunFai 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 avanzata.
Fai clic su Repository per sicurezza e immagini per aprire la scheda Sicurezza.
Tieni premuto il cursore sopra il segreto che vuoi rimuovere, quindi 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 il seguente 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 secret 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 della 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 Funzioni Cloud Run nella console Google Cloud:
Vai alla pagina Funzioni Cloud RunFai clic sul nome della funzione per visualizzare i relativi secret disponibili.
Fai clic su Modifica.
Fai clic su Impostazioni di runtime, build e connessioni per espandere le opzioni di configurazione avanzata.
Fai clic su Sicurezza per aprire la scheda Sicurezza.
La scheda Sicurezza elenca i secret accessibili alla funzione.
gcloud
Per vedere quali segreti sono disponibili per la tua funzione, utilizza il comando gcloud functions describe
:
gcloud functions describe FUNCTION_NAME
Sostituisci FUNCTION_NAME con il nome della funzione.
Passaggi successivi
- Valuta la possibilità di sviluppare funzioni che utilizzano Secret Manager tramite le librerie client di Secret Manager.