Configura i secret

Puoi usare Secret Manager per usufruire di un servizio sicuro e archiviare chiavi API, password e altre informazioni sensibili. Questa guida mostra configurare le funzioni di Cloud Run per accedere ai secret tramite 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 diventa disponibile 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 una versione bloccata del secret. Questo metodo funziona bene anche se di implementare la rotazione dei secret.

  • Trasmettere il segreto 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 saperne di più sull'utilizzo di Secret Manager, consulta Panoramica di Secret Manager. A creare e accedere ai secret, consulta Crea un secret.

Prima di iniziare

  1. Enable the Secret Manager API.

    Enable the 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 tua funzione può accedere ai secret che si trovano nello stesso progetto della e i secret che risiedono in un altro progetto. Per accedere a un secret, l'account di servizio di runtime della funzione deve essere è stato concesso l'accesso al secret.

Per impostazione predefinita, le funzioni di Cloud Run utilizzano account di servizio Compute predefinito, per l'autenticazione con Secret Manager. Se il servizio predefinito dispone già del ruolo Editor, ti consigliamo di sostituirlo con ruoli meno permissivi.

Per utilizzare Secret Manager con le funzioni Cloud Run, 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 segreto.

  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 la sua 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 per rendere i secret disponibili al tuo :

  1. Imposta un runtime variabile di ambiente durante il deployment della funzione.
  2. Svela il segreto accessibile alla tua funzione in una variabile di ambiente.
  3. Accedi alla variabile di ambiente in modo programmatico durante il 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 il montaggio per il tuo secret. Eventuali file o sottodirectory esistenti al suo interno una directory diversa dal tuo secret e le sue versioni diventano inaccessibili il secret è stato montato.

  3. Svela il segreto accessibile alla funzione come volume montato.

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

Ad esempio, se il secret è stato montato in /mnt/secrets/secret1, 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 creare il secret accessibile alla funzione. Puoi rendere un secret accessibile a utenti nuovi o esistenti utilizzando la console Google Cloud o Google Cloud CLI:

Console

Per rendere un secret accessibile a una funzione:

  1. Vai alla pagina delle funzioni di Cloud Run nella console Google Cloud:
    Vai alla pagina delle funzioni di Cloud Run

  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 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 funzione:

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

      1. Verifica che l'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 segreto.

        • SECRET_NAME: il nome del secret in tramite Secret Manager.

  8. Seleziona il metodo di riferimento per il secret. Puoi montare il secret un volume o esponi 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 il secret. Questa è la directory in cui vengono visualizzate tutte le versioni del secret inserito.

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

      4. Dal menu a discesa Version1, seleziona la versione del secret da 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 da riferimento.

      4. Puoi esporre versioni aggiuntive di questo secret facendo clic su +Aggiungi per definire un ambiente aggiuntivo e le versioni del 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 valori: tramite comandi SQL.

  • 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, mentre latest è il percorso secret. Puoi anche specificare percorsi secret e di montaggio separatamente:

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

    • SECRET: il nome del secret in tramite 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, usa invece il flag --update-secrets.

  • Per esporre il segreto 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 esegue l'override di qualsiasi secret esistente. Per mantenere i secret esistenti della funzione, utilizza il flag --update-secrets.

  • Puoi fare riferimento a un secret di un altro progetto se la funzione all'account di servizio sia stato concesso l'accesso al secret. A fai 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 segreto che si trova in un altro progetto. Il percorso della risorsa utilizza quanto segue: 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 tramite 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, mentre latest è il percorso secret. Puoi anche specificare percorsi secret e di montaggio separatamente:

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

    • SECRET: il nome del secret in tramite 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 segreto con una virgola. Il seguente comando aggiorna uno secret montato come volume e un altro secret esposto come 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, mentre latest è il percorso secret. Puoi anche specificare percorsi secret e di montaggio 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 delle funzioni di Cloud Run nella console Google Cloud:
    Vai alla pagina delle funzioni di Cloud Run

  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 opzioni di configurazione avanzate.

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

  6. Tieni premuto il cursore sopra il segreto che vuoi 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 il seguente 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, mentre latest è il percorso secret. Puoi anche specificare percorsi secret e di montaggio 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 funzione utilizzando la console Google Cloud o gcloud CLI:

Console

  1. Vai alla pagina delle funzioni di Cloud Run nella console Google Cloud:
    Vai alla pagina delle funzioni di Cloud Run

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