Configurare i secret (1ª gen.)

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

  • Montaggio del 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 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 prevedi di implementare la rotazione delle chiavi segrete.

  • 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 già 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 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 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 una account di servizio gestito dall'utente a cui è assegnato l'insieme meno permissivo di ruoli necessari le attività della funzione.

Per utilizzare in Secret Manager con le funzioni Cloud Run, assegna il ruolo roles/secretmanager.secretAccessor all'account di servizio associato a la tua funzione:

  1. Vai alla pagina 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 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:

  • 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 al tuo :

  1. Impostare una variabile di ambiente di runtime 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. Rendi il secret accessibile alla tua 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 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 Cloud Run nella console Google Cloud:
    Vai alla pagina delle funzioni Cloud Run

  2. Fai clic sul nome della funzione che deve poter accedere 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 tua 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 il secret.

        • 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 è concatenato al percorso di montaggio del passaggio precedente formano il percorso di montaggio completo in cui è montato il secret.

      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 ulteriori percorsi e le versioni questo secret da montare.

    • 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 da riferimento.

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

  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 \
    --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, 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 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 secret come variabile di ambiente, inserisci quanto segue :

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

  • 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 \
    --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 secret che risiedono 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 il secret.

      • 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 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 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 \
    --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 tramite 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 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 oppure 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 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 rimuovi:

  • 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. La 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, 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