Configura 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 Cloud Functions per accedere ai secret archiviati in Secret Manager.

Questo documento illustra entrambi i modi per rendere disponibile un secret per la 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 funzione accede al valore del secret da Secret Manager ogni volta che il file viene letto dal disco. Di conseguenza, 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 anche se prevedi di implementare la rotazione 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 del secret.

Per maggiori informazioni sull'utilizzo di Secret Manager, consulta la panoramica di Secret Manager. Per scoprire come creare e accedere ai secret, consulta Creare un secret.

Prima di iniziare

  1. Attiva l'API Secret Manager.

    Abilita l'API

  2. Se non lo hai già fatto, crea un secret in Secret Manager, come descritto in Creare un secret.

Concessione dell'accesso ai secret

La tua funzione può accedere ai secret che risiedono nello stesso progetto della funzione e ai secret che risiedono 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, Cloud Functions utilizza l'account di servizio predefinito di App Engine per l'autenticazione con Secret Manager. Per l'uso in produzione, Google consiglia di configurare la funzione per l'autenticazione utilizzando un account di servizio gestito dall'utente a cui è assegnato l'insieme di ruoli meno permissivo necessari per svolgere le attività della funzione.

Per utilizzare Secret Manager con Cloud Functions, assegna il ruolo roles/secretmanager.secretAccessor all'account di servizio associato alla tua funzione:

  1. Vai alla pagina Secret Manager nella console Google Cloud:
    Vai alla pagina Secret Manager

  2. Fai clic sulla casella di controllo accanto al secret.

  3. Se non è già aperto, fai clic su Mostra riquadro informazioni per aprirlo.

  4. Nel riquadro delle informazioni, fai clic su Aggiungi entità.

  5. Nel campo Nuove entità, inserisci l'account di servizio utilizzato dalla funzione per l'identità. L'account di servizio della funzione è uno dei seguenti:

  6. Nel menu a discesa Seleziona un ruolo, scegli Secret Manager e quindi Funzione di accesso ai secret di Secret Manager.

Preparazione della funzione per l'accesso ai secret

Esistono due modi per rendere disponibile un secret per la tua funzione:

  • Trasmettere il secret come variabile di ambiente.
  • Montaggio del secret come volume.

Variabili di ambiente

Per utilizzare le variabili di ambiente al fine di rendere disponibili i secret per la funzione:

  1. Imposta una variabile di ambiente di runtime durante il deployment delle funzioni.
  2. Rendi il secret accessibile alla tua funzione in una variabile di ambiente.
  3. Accedi alla variabile di ambiente in modo programmatico in fase di runtime.

Montaggio del secret come volume

Per montare un secret come volume:

  1. Crea un file contenente il tuo secret.

  2. Scegli una directory non utilizzata e non di sistema, come /mnt/secrets, come percorso di montaggio per il secret. Una volta montato il secret, tutti i file o le sottodirectory preesistenti in quella directory diversi dal secret e alle sue versioni diventano inaccessibili.

  3. Rendi il secret accessibile alla funzione come volume montato.

  4. In fase di runtime, leggi in modo programmatico i contenuti del file per accedere al valore del secret.

Ad esempio, se il secret è stato montato in /mnt/secrets/secret1, la funzione deve leggere questo file. Ecco un esempio di come potresti 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 secret accessibile a funzioni nuove o esistenti utilizzando la console Google Cloud o Google Cloud CLI:

Console

Per rendere un secret accessibile a una funzione:

  1. Vai alla pagina Cloud Functions nella console Google Cloud:
    Vai alla pagina Cloud Functions

  2. Fai clic sul nome della funzione per cui vuoi consentire l'accesso a un secret.

  3. Fai clic su Modifica.

  4. Fai clic su Runtime, build... (Runtime, build...) per espandere le opzioni di configurazione avanzate.

  5. Fai clic su Security and Image Repo per aprire la scheda.

  6. Fai clic su Aggiungi un riferimento secret per impostare un secret per la funzione.

  7. Seleziona il secret da rendere accessibile. Se necessario, crea un secret.

    • Per fare riferimento a un secret nello stesso progetto della tua funzione:

      1. Seleziona il secret dall'elenco a discesa.
    • Per fare riferimento a un secret di un altro progetto:

      1. Verifica che all'account di servizio del progetto sia stato concesso l'accesso al secret.

      2. Seleziona Inserisci il secret manualmente.

      3. 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.

  8. Seleziona il metodo di riferimento per il secret. Puoi montare il secret come volume o esporre il secret come variabile di ambiente.

    • Per montare il secret come volume:

      1. Seleziona Montato come volume.

      2. 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.

      3. Nel campo Path1, inserisci il nome del file da montare. Questo nome è concatenato al percorso di montaggio del passaggio precedente per formare il percorso di montaggio completo in cui è montato il secret.

      4. Dal menu a discesa Version1, seleziona la versione del secret a cui fare riferimento.

      5. 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:

      1. Seleziona Esposta come variabile di ambiente.

      2. Nel campo Name1, inserisci il nome della variabile di ambiente.

      3. Dal menu a discesa Version1, seleziona la versione del secret a cui fare riferimento.

      4. Puoi esporre versioni aggiuntive di questo secret per la funzione facendo clic su +Aggiungi per definire altre variabili di ambiente e le versioni di questo secret da archiviare.

  9. Fai clic su Fine.

  10. Fai clic su Avanti.

  11. Fai clic su Esegui il deployment.

Il codice della funzione può ora fare riferimento al secret.

gcloud

Per rendere un secret accessibile a una funzione, inserisci uno dei seguenti comandi.

  • Per montare il secret come volume, inserisci il comando seguente:

    gcloud functions deploy FUNCTION_NAME \
    --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 e latest è il percorso secret. Puoi anche specificare i percorsi di montaggio e 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 o latest.

    Il flag --set-secrets esegue l'override di qualsiasi secret esistente. Per mantenere 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 \
    --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 o latest.

    Il flag --set-secrets esegue l'override di qualsiasi secret esistente. Per mantenere 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 delle risorse del secret:

    gcloud functions deploy FUNCTION_NAME \
    --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 risiede 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 e latest è il percorso secret. Puoi anche specificare i percorsi di montaggio e 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 o latest.

  • 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 il comando seguente:

    gcloud functions deploy FUNCTION_NAME \
    --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 o latest.

    • SECRET_FILE_PATH: il percorso completo del secret. Ad esempio, /mnt/secrets/primary/latest, dove /mnt/secrets/primary/ è il percorso di montaggio e latest è il percorso secret. Puoi anche specificare i percorsi di montaggio e 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

  1. Vai alla pagina Cloud Functions nella console Google Cloud:
    Vai alla pagina Cloud Functions

  2. Fai clic sul nome della funzione per rimuovere uno dei suoi secret.

  3. Fai clic su Modifica.

  4. Fai clic su Impostazioni runtime, build e connessioni per espandere le opzioni di configurazione avanzate.

  5. Fai clic su Security and Image Repo per aprire la scheda Sicurezza.

  6. Tieni il puntatore sopra il secret da rimuovere, quindi fai clic su Elimina.

  7. Fai clic su Avanti.

  8. 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 \
    --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 \
    --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 e latest è il percorso secret. Puoi anche specificare i percorsi di montaggio e secret separatamente:

      --set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'

    I secret specificati vengono rimossi dalla funzione.

visualizza i secret accessibili della funzione

Puoi vedere a quali secret può accedere la tua funzione utilizzando la console Google Cloud o gcloud CLI:

Console

  1. Vai alla pagina Cloud Functions nella console Google Cloud:
    Vai alla pagina Cloud Functions

  2. Fai clic sul nome della funzione per visualizzarne i secret disponibili.

  3. Fai clic su Modifica.

  4. Fai clic su Impostazioni runtime, build e connessioni per espandere le opzioni di configurazione avanzate.

  5. Fai clic su Sicurezza per aprire la scheda Sicurezza.

La scheda Sicurezza elenca i secret accessibili alla funzione.

gcloud

Per visualizzare quali secret sono disponibili per la funzione, utilizza il comando gcloud functions describe:

gcloud functions describe FUNCTION_NAME

Sostituisci FUNCTION_NAME con il nome della funzione.

Passaggi successivi