Configura i secret (1ª gen.)

Puoi utilizzare Secret Manager per archiviare in modo sicuro chiavi API, password e altre informazioni sensibili. Questa guida illustra come configurare Cloud Run Functions per accedere ai secret archiviati in Secret Manager.

Il documento mostra entrambi i modi per rendere un secret disponibile per una 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 è quindi una buona strategia se vuoi fare riferimento all'ultima versione del secret anziché a una versione bloccata. Questo metodo è indicato anche se prevedi di implementare la rotazione dei secret.

  • Passaggio del 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 saperne di più 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

  1. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  2. 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 sia nello stesso progetto della funzione sia in un altro progetto. Per accedere a un secret, è necessario concedere l'accesso al service account di runtime della funzione.

Per impostazione predefinita, Cloud Run Functions utilizza il service account predefinito di App Engine per l'autenticazione con Secret Manager. Per l'utilizzo in produzione, Google consiglia di configurare la funzione per l'autenticazione mediante 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 Cloud Run Functions, assegna il ruolo roles/secretmanager.secretAccessor al service account associato alla tua funzione:

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

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

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

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

  5. Nel campo Nuove entità, inserisci il service account utilizzato dalla funzione per la sua identità. Il service account della funzione è uno dei seguenti:

  6. Nel menu a discesa Seleziona un ruolo, scegli Secret Manager e poi Secret Manager Secret Accessor.

Preparazione della funzione per l'accesso ai secret

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

  • Passaggio del 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 della funzione.
  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 secret.

  2. Scegli una directory non di sistema e inutilizzata, ad esempio /mnt/secrets, come percorso di montaggio del secret. Una volta montato il secret, tutti i file o le sottodirectory preesistenti in questa directory, ad eccezione del secret e delle relative versioni, diventano inaccessibili.

  3. Rendi il secret accessibile alla tua 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 su /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')

Come 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 un secret accessibile a una funzione:

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

  2. Fai clic sul nome della funzione a cui vuoi rendere accessibile un secret.

  3. Fai clic su Modifica.

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

  5. Fai clic su Repository 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 che si trova nello stesso progetto della tua funzione:

      1. Seleziona il secret dall'elenco a discesa.
    • Per fare riferimento a un secret che si trova in un altro progetto:

      1. Verifica che al service account del tuo 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 montaggio, inserisci il percorso di montaggio per questo secret. Questa è la directory in cui vengono inserite tutte le versioni del secret.

      3. Nel campo Percorso 1, 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.

      4. Nel menu a discesa Versione 1, seleziona la versione del secret a cui fare riferimento.

      5. Puoi montare versioni aggiuntive di questo secret facendo clic su +Aggiungi per definire altri percorsi e le versioni del secret da montare in questi percorsi.

    • Per esporre il secret come variabile di ambiente:

      1. Seleziona Esposto come variabile di ambiente.

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

      3. Nel menu a discesa Versione 1, seleziona la versione del secret a cui fare riferimento.

      4. Puoi esporre altre versioni di questo secret alla tua funzione facendo clic su +Aggiungi per definire altre variabili di ambiente e le versioni del secret da archiviare in queste variabili.

  9. Fai clic su Fine.

  10. Fai clic su 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 \
    --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 e latest è il percorso del secret. Puoi anche specificare i percorsi di montaggio e del 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 sostituisce gli eventuali secret esistenti. Se vuoi conservare i secret esistenti della funzione, utilizza 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 o latest.

    Il flag --set-secrets sostituisce gli eventuali secret esistenti. Se vuoi conservare i secret esistenti della funzione, utilizza il flag --update-secrets.

  • Puoi fare riferimento a un secret di un altro progetto se al service account della funzione è stato concesso l'accesso al secret. Per fare riferimento a un secret che si trova in 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 del 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 e latest è il percorso del secret. Puoi anche specificare i percorsi di montaggio e del 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 di 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 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 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 i percorsi di montaggio e del 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 Run Functions nella console Google Cloud :
    Vai alla pagina Cloud Run Functions

  2. Fai clic sul nome della funzione di cui vuoi rimuovere uno dei 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 Repository per sicurezza e immagini per aprire la scheda Sicurezza.

  6. Tieni il puntatore sul secret che vuoi rimuovere e 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 \
    --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 e latest è il percorso del secret. Puoi anche specificare i percorsi di montaggio e del secret separatamente:

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

    I secret specificati vengono rimossi dalla funzione.

Visualizzazione dei 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 Run Functions nella console Google Cloud :
    Vai alla pagina Cloud Run Functions

  2. Fai clic sul nome della funzione per visualizzarne 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 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 funzione.

Passaggi successivi