Configura i secret

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 un secret disponibile per la tua funzione:

  • Montaggio del secret come volume. In questo modo il secret diventa disponibile per la funzione sotto forma di 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. Per questo, 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 al tempo di 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 ulteriori informazioni sull'utilizzo di Secret Manager, consulta la panoramica di Secret Manager. Per scoprire come creare e accedere ai secret, vedi Creare un secret.

Prima di iniziare

  1. Attiva l'API Secret Manager.

    Abilita l'API

  2. Se non l'hai ancora fatto, crea un secret in Secret Manager, come descritto in Creare un secret.

Concessione dell'accesso ai secret

La 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 in modo da eseguire l'autenticazione utilizzando un account di servizio gestito dall'utente a cui sia assegnato l'insieme di ruoli meno permissivo necessario 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 funzione:

  1. Vai alla pagina di Secret Manager nella console Google Cloud:
    Vai alla pagina di 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 informazioni, fai clic su Aggiungi entità.

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

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

Preparazione della funzione per l'accesso ai secret

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

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

Variabili di ambiente

Per utilizzare le variabili di ambiente per rendere i secret disponibili per la tua 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 di sistema inutilizzata, come /mnt/secrets, come percorso di montaggio per il secret. Tutti i file o le sottodirectory preesistenti in tale directory diverse dal tuo secret e le relative versioni diventano inaccessibili una volta montato il secret.

  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 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 di 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 a cui vuoi consentire l'accesso a un secret.

  3. Fai clic su Modifica.

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

  5. Fai clic su Repo per sicurezza e immagini 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 esporlo 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 con il 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 Esposto 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 alla funzione facendo clic su +Aggiungi per definire altre variabili di ambiente e le versioni di questo secret da archiviare al loro interno.

  9. Fai clic su Fine.

  10. Tocca Avanti.

  11. Fai clic su Esegui il deployment.

Il codice della funzione ora può 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 seguente comando:

    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 del secret. Puoi anche specificare separatamente i percorsi di montaggio e secret:

      --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 sostituisce 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 il seguente 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 sostituisce 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 risorsa 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 del secret. Puoi anche specificare separatamente i percorsi di montaggio e secret:

      --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 ciascun secret con una virgola. Il comando seguente 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 del secret. Puoi anche specificare separatamente i percorsi di montaggio e secret:

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

Rimozione dei 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 di runtime, build e connessioni per espandere le opzioni di configurazione avanzate.

  5. Fai clic su Repo per sicurezza e immagini per aprire la scheda Sicurezza.

  6. Tieni il puntatore sul secret che vuoi rimuovere, quindi fai clic su Elimina.

  7. Tocca 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 sono stati 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 del secret. Puoi anche specificare separatamente i percorsi di montaggio e secret:

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

    I secret specificati vengono rimossi dalla funzione.

Visualizzazione dei secret accessibili della funzione

Puoi visualizzare i secret a cui la funzione può accedere 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 visualizzare i secret disponibili.

  3. Fai clic su Modifica.

  4. Fai clic su Impostazioni di 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 vedere 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