Le App contenitore di Azure consentono all'applicazione di archiviare in modo sicuro i valori di configurazione sensibili. Dopo aver definito i segreti a livello di applicazione, i valori protetti sono disponibili per le revisioni nelle app contenitore. Inoltre, è possibile fare riferimento a valori protetti all'interno delle regole di scalabilità. Per informazioni sull'uso dei segreti con Dapr, vedere Integrazione di Dapr.
L'ambito dei segreti è un'applicazione, all'esterno di una revisione specifica di un'applicazione.
Le nuove revisioni non vengono generate tramite l'aggiunta, la rimozione o la modifica dei segreti.
Ogni revisione dell'applicazione può fare riferimento a uno o più segreti.
Più revisioni possono fare riferimento agli stessi segreti.
Un segreto aggiornato o eliminato non influisce automaticamente sulle revisioni esistenti nella tua app. Quando un segreto viene aggiornato o eliminato, è possibile rispondere alle modifiche in uno dei due modi seguenti:
Distribuire una nuova revisione.
Riavviare una revisione esistente.
Prima di eliminare un segreto, distribuire una nuova revisione che non fa più riferimento al segreto precedente. Disattivare quindi tutte le revisioni che fanno riferimento al segreto.
Definizione dei segreti
I segreti vengono definiti come un set di coppie nome/valore. Il valore di ogni segreto viene specificato direttamente o come riferimento a un segreto archiviato in Azure Key Vault.
Nota
Evitare di specificare il valore di un segreto direttamente in un ambiente di produzione. Usare invece un riferimento a un segreto archiviato in Azure Key Vault, come descritto nella sezione Store secret value in Container Apps (App contenitore).
Archiviare il valore del segreto in App contenitore
Quando si definiscono segreti tramite il portale o tramite diverse opzioni della riga di comando.
In questo caso, un stringa di connessione a un account di archiviazione code secrets viene dichiarato nella matrice. In questo esempio si sostituirà <MY-CONNECTION-STRING-VALUE> con il valore del stringa di connessione.
Quando crei un'app contenitore, i segreti vengono definiti utilizzando il --secrets parametro.
Il parametro accetta un set delimitato da spazi di coppie nome/valore.
In questo caso, un stringa di connessione a un account di archiviazione code viene dichiarato nel --secrets parametro . Sostituire <CONNECTION_STRING> con il valore del stringa di connessione.
Quando si crea un'app contenitore, i segreti vengono definiti come uno o più oggetti Secret passati tramite il ConfigurationSecrets parametro .
In questo caso viene dichiarata una stringa di connessione a un account di archiviazione code. Il valore per queue-connection-string proviene da una variabile di ambiente denominata $QueueConnectionString.
Segreto di riferimento da Key Vault
Quando si definisce un segreto, si crea un riferimento a un segreto archiviato in Azure Key Vault. App contenitore recupera automaticamente il valore del segreto da Key Vault e lo rende disponibile come segreto nell'app contenitore.
Per fare riferimento a un segreto da Key Vault, è prima necessario abilitare l'identità gestita nell'app contenitore e concedere all'identità l'accesso ai segreti di Key Vault.
Per abilitare l'identità gestita nell'app contenitore, vedere Identità gestite.
Per concedere l'accesso ai segreti di Key Vault, creare un criterio di accesso in Key Vault per l'identità gestita creata. Abilitare l'autorizzazione per il segreto "Get" in questi criteri.
In questo caso, un stringa di connessione a un account di archiviazione code secrets viene dichiarato nella matrice. Il valore viene recuperato automaticamente da Key Vault usando l'identità specificata. Per usare un'identità gestita dall'utente, sostituire system con l'ID risorsa dell'identità.
Sostituire <KEY-VAULT-SECRET-URI> con l'URI del segreto in Key Vault.
Quando crei un'app contenitore, i segreti vengono definiti utilizzando il --secrets parametro.
Il parametro accetta un set delimitato da spazi di coppie nome/valore.
Un segno di uguale (=) delimita ogni coppia.
Per specificare un riferimento a Key Vault, usare il formato <SECRET_NAME>=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<MANAGED_IDENTITY_ID>. Ad esempio: queue-connection-string=keyvaultref:https://mykeyvault.vault.azure.net/secrets/queuereader,identityref:/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity.
In questo caso, un stringa di connessione a un account di archiviazione code viene dichiarato nel --secrets parametro . Sostituire <KEY_VAULT_SECRET_URI> con l'URI del segreto in Key Vault. Sostituire <USER_ASSIGNED_IDENTITY_ID> con l'ID risorsa dell'identità assegnata dall'utente.
Nota
L'identità assegnata dall'utente deve avere accesso per leggere il segreto in Key Vault. L'identità assegnata dal sistema non può essere usata con il comando create perché non è disponibile fino alla creazione dell'app contenitore.
I riferimenti all'insieme di credenziali delle chiavi dei segreti non sono supportati in PowerShell.
L'URI del segreto dell'insieme di credenziali delle chiavi deve essere in uno dei formati seguenti:
https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931: fare riferimento a una versione specifica di un segreto.
https://myvault.vault.azure.net/secrets/mysecret: fare riferimento alla versione più recente di un segreto.
Se nell'URI non è specificata una versione, l'app usa la versione più recente presente nell'insieme di credenziali delle chiavi. Quando le versioni più recenti diventano disponibili, l'app recupera automaticamente la versione più recente entro 30 minuti. Tutte le revisioni attive che fanno riferimento al segreto in una variabile di ambiente vengono riavviate automaticamente per recuperare il nuovo valore.
Per il controllo completo della versione di un segreto, specificare la versione nell'URI.
Riferimento ai segreti nelle variabili di ambiente
Dopo aver dichiarato segreti a livello di applicazione come descritto nella sezione definizione dei segreti , è possibile farvi riferimento nelle variabili di ambiente quando si crea una nuova revisione nell'app contenitore. Quando una variabile di ambiente fa riferimento a un segreto, il suo valore viene popolato con il valore definito nel segreto.
Esempio
L'esempio seguente mostra un'applicazione che dichiara una stringa di connessione a livello di applicazione. A questa connessione viene fatto riferimento in una variabile di ambiente contenitore e in una regola di scalabilità.
Nella pagina Crea e distribuisci nuova revisione selezionare un contenitore.
Nella sezione Variabili di ambiente selezionare Aggiungi.
Immettere le informazioni seguenti:
Nome: nome della variabile di ambiente.
Origine: selezionare Riferimenti a un segreto.
Valore: selezionare il segreto a cui si desidera fare riferimento.
Seleziona Salva.
Selezionare Crea per creare la nuova revisione.
In questo esempio l'applicazione stringa di connessione viene dichiarata come queue-connection-string e diventa disponibile altrove nelle sezioni di configurazione.
In questo caso, la variabile di ambiente denominata connection-string ottiene il relativo valore dal segreto a livello queue-connection-string di applicazione. Inoltre, la configurazione di autenticazione della regola di scalabilità di Archiviazione code di Azure usa il queue-connection-string segreto per definire la connessione.
Per evitare di eseguire il commit dei valori dei segreti nel controllo del codice sorgente con il modello di Resource Manager, passare i valori dei segreti come parametri del modello di Resource Manager.
In questo esempio si crea un'app contenitore usando l'interfaccia della riga di comando di Azure con un segreto a cui viene fatto riferimento in una variabile di ambiente. Per fare riferimento a un segreto in una variabile di ambiente nell'interfaccia della riga di comando di Azure, impostarne il valore su secretref:, seguito dal nome del segreto.
In questo caso, la variabile di ambiente denominata connection-string ottiene il relativo valore dal segreto a livello queue-connection-string di applicazione.
I riferimenti all'insieme di credenziali delle chiavi dei segreti non sono supportati in PowerShell.
In questo esempio viene creato un contenitore usando Azure PowerShell con un segreto a cui si fa riferimento in una variabile di ambiente. Per fare riferimento al segreto in una variabile di ambiente in PowerShell, impostarne il valore secretref:su , seguito dal nome del segreto.
In questo caso, la variabile di ambiente denominata ConnectionString ottiene il relativo valore dal segreto a livello $QueueConnectionString di applicazione.
Montaggio di segreti in un volume
Dopo aver dichiarato segreti a livello di applicazione come descritto nella sezione definizione dei segreti , è possibile farvi riferimento nei montaggi di volumi quando si crea una nuova revisione nell'app contenitore. Quando si montano segreti in un volume, ogni segreto viene montato come file nel volume. Il nome del file è il nome del segreto e il contenuto del file è il valore del segreto. È possibile caricare tutti i segreti in un montaggio del volume oppure caricare segreti specifici.
Nella pagina Crea e distribuisci nuova revisione .
Selezionare un contenitore e selezionare Modifica.
Nella sezione Montaggi di volumi espandere la sezione Segreti.
Selezionare Crea nuovo volume.
Immettere le informazioni seguenti:
Nome: mysecrets
Montare tutti i segreti: abilitato
Nota
Se si desidera caricare segreti specifici, disabilitare Montare tutti i segreti e selezionare i segreti da caricare.
Selezionare Aggiungi.
In Nome volume selezionare mysecrets.
In Percorso di montaggio immettere /mnt/secrets.
Seleziona Salva.
Selezionare Crea per creare la nuova revisione con il montaggio del volume.
In questo esempio due segreti vengono dichiarati a livello di applicazione. Questi segreti vengono montati in un volume denominato mysecrets di tipo Secret. Il volume viene montato nel percorso /mnt/secrets. L'applicazione può quindi fare riferimento ai segreti nel montaggio del volume.
Per caricare segreti specifici e specificare i relativi percorsi all'interno del volume montato, definire i segreti nella secrets matrice dell'oggetto volume. Nell'esempio seguente viene illustrato come caricare solo il queue-connection-string segreto nel montaggio del mysecrets volume con un nome di file .connection-string.txt
Nell'app è possibile leggere il segreto da un file che si trova in /mnt/secrets/connection-string.txt.
In questo esempio due segreti vengono dichiarati a livello di applicazione. Questi segreti vengono montati in un volume denominato mysecrets di tipo Secret. Il volume viene montato nel percorso /mnt/secrets. L'applicazione può quindi leggere i segreti come file nel montaggio del volume.