Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le chiavi di accesso alle funzioni sono token di autenticazione usati dal runtime di Funzioni per proteggere gli endpoint attivati tramite HTTP. Quando un chiamante richiama una funzione HTTP, include una chiave come parametro di query ?code= o come intestazione x-functions-key. Il runtime convalida la chiave e autorizza o rifiuta la richiesta.
Le chiavi di accesso non corrispondono ai segreti a livello di app. Le chiavi di accesso proteggono chi può chiamare le funzioni, mentre i segreti a livello di app proteggono le funzioni a cui si connettono.
Quando usare le chiavi di accesso
| Scenario | Perché i tasti di accesso si adattano perfettamente |
|---|---|
| Webhook di terze parti | Provider come GitHub, Stripe o Twilio chiamano la tua funzione tramite un URL e un token segreto. I tasti di accesso si inseriscono direttamente nel ?code= modello previsto. |
| Chiamate da servizio a servizio | Il servizio back-end A chiama la funzione B su HTTP. Una chiave condivisa è più semplice rispetto alla configurazione delle registrazioni delle app di Microsoft Entra per le chiamate esclusivamente interne. |
| Sottoscrizioni di Griglia di eventi | Griglia di eventi convalida e chiama l'endpoint della funzione usando una chiave di sistema gestita automaticamente dalla piattaforma. |
| Autenticazione di sviluppo/test | Durante lo sviluppo è necessaria l'autenticazione di base senza configurare OAuth/OIDC completo. Le chiavi di accesso forniscono un gate di autenticazione a basso attrito senza alcuna configurazione di identità. |
| Compatibilità della migrazione | Le app di Funzioni di Azure esistenti usano già le chiavi di accesso. Quando si esegue la migrazione ad App contenitore, è necessaria la stessa autenticazione basata su chiave per evitare interruzioni dei chiamanti. |
Note
Per le API rivolte agli utenti, carichi di lavoro senza attendibilità o scenari di autorizzazione per utente, usare Microsoft Entra ID/ OAuth 2.0 anziché le chiavi di accesso. Le chiavi di accesso sono segreti condivisi senza tracciabilità a livello di identità.
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Creare un account gratuito.
- interfaccia della riga di comando di Azure versione 2.40.0 o successiva.
- Un'app Funzioni di Azure esistente in Container Apps o autorizzazioni per crearne una.
Tipi di chiave di accesso
Il runtime di Funzioni gestisce quattro tipi di chiavi:
| Tipo di chiave | Ambito | Purpose |
|---|---|---|
Chiave principale (_master) |
Intera app di funzioni | Accesso a livello di amministratore a tutte le funzioni e /admin/* agli endpoint di gestione. Non può essere revocato, solo ruotato. |
Chiavi host (default + personalizzato) |
App per funzioni completa | Autorizzare le chiamate a qualsiasi funzione attivata da HTTP nell'app. |
Tasti funzione (default + personalizzato) |
Singola funzione | Autorizzare le chiamate a una funzione specifica. Fornisce un controllo più granulare rispetto alle chiavi host. |
| Chiavi di sistema | Punti di estensione | Usato dalle estensioni della piattaforma, ad esempio sottoscrizioni webhook Event Grid e Durable Functions. Gestito automaticamente. |
Modelli di nomi dei segreti
La convenzione di denominazione per le chiavi archiviate dipende dal back-end di archiviazione.
Key Vault
Il back-end Key Vault archivia ogni chiave come singolo segreto Key Vault usando una convenzione double-dash (--):
| Tipo di chiave | Modello di nome segreto | Example |
|---|---|---|
| Chiave master | host--masterKey--master |
host--masterKey--master |
| Tasto funzione (impostazione predefinita) | host--functionKey--default |
host--functionKey--default |
| Tasto funzione (personalizzato) | host--functionKey--<name> |
host--functionKey--MyApiClient |
| Chiave di sistema | host--systemKey--<extension> |
host--systemKey--eventgrid_extension |
| Tasto per funzione | function--<functionName>--<keyName> |
function--myhttpfunc--default |
Archiviazione BLOB
Il back-end gestione rete virtuale di Azure archivia le chiavi come file JSON nel contenitore BLOB azure-webjobs-secrets. Tutte le chiavi a livello di host (master, chiavi di funzione e chiavi di sistema) vengono archiviate insieme in un singolo host.json BLOB. Le chiavi per funzione vengono archiviate in BLOB separati denominati dopo ogni funzione.
| Percorso BLOB | Contenuto |
|---|---|
<siteSlotName>/host.json |
File JSON contenente masterKey, functionKeyse systemKeys |
<siteSlotName>/<functionName>.json |
File JSON contenente chiavi per una funzione specifica |
Archivio sicuro delle applicazioni container
L'archivio segreti delle applicazioni container utilizza una convenzione diversa. L'host funzioni legge le chiavi dai file montati sul volume in /run/secrets/functions-keys/. Ogni file usa un nome punteggiato ,ad esempio host.master, ma i nomi dei segreti di App contenitore consentono solo caratteri alfanumerici minuscoli e trattini. Quando si monta un volume segreto, è necessario impostare esplicitamente il campo path sul nome del file punteggiato previsto dall'host delle Funzioni, ad esempio secretRef: host-master → path: host.master. La piattaforma non esegue alcuna traduzione automatica dei nomi.
| Tipo di chiave | Nome segreto delle app per contenitori (trattini) | Montaggio volume path (punti) |
|---|---|---|
| Chiave master | host-master |
host.master |
| Chiave host predefinita | host-function-default |
host.function.default |
| Chiave host personalizzata | host-function-<name> |
host.function.<name> |
| Chiave di funzione predefinita per una funzione specifica | functions-<functionname>-default |
functions.<functionName>.default |
| Chiave di funzione personalizzata per una funzione specifica | functions-<functionname>-<keyname> |
functions.<functionName>.<keyName> |
| Chiave di sistema | host-systemkey-<extension> |
host.systemKey.<extension> |
Tip
Durante la risoluzione dei problemi, cercare questi modelli nell'archivio back-end per verificare che le chiavi siano configurate correttamente.
Scegliere un back-end di archiviazione
Impostare la AzureWebJobsSecretStorageType variabile di ambiente per controllare la posizione in cui il runtime rende persistenti le chiavi di accesso. App contenitore di Azure supporta tre back-end di livello di produzione.
Importante
Per i carichi di lavoro di produzione, preferire i back-end in questo ordine: Archivio di segreti delle app container (containerapp) > Azure Key Vault (keyvault) > Archiviazione BLOB di Azure (blob). Il store delle segreti delle Container Apps non ha dipendenze esterne ed è il più semplice da usare.
| Back-end | Valore dell'impostazione | Genera automaticamente chiavi | Dipendenza esterna | Ideale per |
|---|---|---|---|---|
| Archivio segreto delle applicazioni container | containerapp |
No: si effettua il provisioning delle chiavi come segreti di App contenitore | None | La maggior parte dei carichi di lavoro (Consigliato) |
| Azure Key Vault | keyvault |
No - Creazione manuale del trigger | istanza di Key Vault | Governance centralizzata, controllo della conformità |
| Archiviazione BLOB di Azure | blob |
Sì | Account di archiviazione | Applicazioni legacy o account esistente AzureWebJobsStorage |
Avvertimento
Non impostare AzureWebJobsSecretStorageType su files. In App contenitore di Azure il file system è effimero, quindi le chiavi host archiviate con il backend files vengono perse ogni volta che l'app viene ridimensionata a zero istanze, viene riavviata o viene distribuita una nuova revisione. Usare sempre uno dei tre back-end di produzione elencati in precedenza.
Configurare l'archivio dei segreti delle Container Apps
L'archivio delle credenziali di Container Apps è il back-end consigliato. Le chiavi rimangono all'interno della piattaforma App contenitore e non richiedono spazio di archiviazione esterno o Key Vault. Azure Resource Manager i log delle attività tengono traccia delle modifiche apportate ai segreti e alle variabili di ambiente.
Con questo back-end, l'host di Funzioni legge le chiavi dai file montati in /run/secrets/functions-keys/.
L'host non genera automaticamente le chiavi. È necessario creare ogni chiave come segreto di Container Apps e la piattaforma li monta come file per essere letti dall'host.
Importante
L'archivio delle informazioni sensibili delle app per container è di sola lettura dal punto di vista dell'host. L'host legge i file di chiave montati, ma non li scrive mai. Se manca una chiave obbligatoria, l'host non lo genera automaticamente.
Passaggio 1: Impostare il tipo di archiviazione
Vai all'app di contenitori Function nel portale Azure.
In Impostazioni selezionare Variabili di ambiente.
Selezionare Aggiungi e immettere i valori seguenti:
Proprietà Valore Nome AzureWebJobsSecretStorageTypeValore containerappSelezionare Salva e quindi Applica per confermare le modifiche.
Passaggio 2: Generare e archiviare i segreti delle chiavi di accesso
Generare i valori delle chiavi e archiviarli come segreti delle Container Apps. È necessaria almeno la chiave master e una chiave host predefinita.
Nell'app contenitore funzioni, in Impostazioni selezionare Segreti.
Selezionare Aggiungi e immettere i valori seguenti:
Proprietà Valore Nome host-masterType Segreto App container Valore Valore della chiave generato in modo casuale. Seleziona Aggiungi.
Ripetere per
host-function-defaultcon un altro valore generato in modo casuale.Per aggiungere una chiave per funzione, aggiungere un segreto denominato
functions-<functionname>-default(tutte minuscole).
Note
I nomi dei segreti delle app di container consentono solo caratteri alfanumerici minuscoli e trattini. È necessario impostare esplicitamente il campo path nella configurazione del volume sul nome file punteggiato che l'host delle Funzioni si aspetta, per esempio, secretRef: host-master → path: host.master. Senza un valore esplicito path, il file su disco mantiene il nome tratteggiato e l'host delle funzioni non potrà trovare la chiave.
Passaggio 3: Configurare il montaggio del volume
Montare i segreti come file a /run/secrets/functions-keys/.
Nell'app contenitore funzioni, in Applicazione selezionare Revisioni e repliche.
Selezionare Crea nuova revisione.
Nella scheda Scalabilità e volumi , in Volumi, selezionare Aggiungi.
Immettere i valori seguenti:
Proprietà Valore Tipo di volume Segreto Nome functions-keysPer ogni segreto, impostare il campo Percorso sul nome file punteggiato previsto dall'host di Funzioni, ad esempio impostato sul
host-masterpercorsohost.masterehost-function-defaultsul percorsohost.function.default.Seleziona Aggiungi.
Nella scheda Contenitore selezionare il contenitore e quindi selezionare Modifica.
Selezionare la scheda Montaggi del volume e selezionare Aggiungi.
Immettere i valori seguenti:
Proprietà Valore Nome del volume functions-keysPercorso di montaggio /run/secrets/functions-keysSelezionare Salva e quindi Crea per distribuire la nuova revisione.
Passaggio 4: Verificare
Dopo il riavvio dell'app, verificare che le chiavi funzionino:
az containerapp function keys list \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--key-type hostKey
È anche possibile controllare i log dell'app per il messaggio Resolved secret storage provider ContainerAppsSecretsRepository, che conferma che l'host usa l'archivio segreto di App contenitore.
Ruotare le chiavi
Per ruotare una chiave, aggiornare il segreto dell'app contenitore e riavviare l'app:
NEW_KEY=$(openssl rand -hex 32)
az containerapp secret set \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--secrets "host-function-default=$NEW_KEY"
az containerapp revision restart \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--revision "<REVISION_NAME>"
Note
Tutte le repliche condividono gli stessi segreti segretati. Dopo un riavvio, ogni replica preleva i valori di chiave aggiornati.
Configurare l'archiviazione BLOB
Il back-end gestione rete virtuale di Azure consente al runtime di generare e gestire automaticamente le chiavi di accesso. Usare questa opzione quando si ha già un account di archiviazione per AzureWebJobsStorage e non è necessaria la governance centralizzata.
Abilitare l'identità gestita nell'app contenitore (se non è già abilitata):
az containerapp identity assign \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --system-assignedConcedere il ruolo Collaboratore dei dati BLOB di archiviazione all'account di archiviazione all'identità gestita:
PRINCIPAL_ID=$(az containerapp show \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --query identity.principalId \ --output tsv) STORAGE_ID=$(az storage account show \ --name "<STORAGE_ACCOUNT_NAME>" \ --resource-group "<RESOURCE_GROUP>" \ --query id \ --output tsv) az role assignment create \ --role "Storage Blob Data Contributor" \ --assignee "$PRINCIPAL_ID" \ --scope "$STORAGE_ID"Impostare il tipo di archiviazione:
az containerapp update \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --set-env-vars "AzureWebJobsSecretStorageType=blob"Il runtime genera automaticamente le chiavi all'avvio a freddo successivo. Verificare:
az containerapp function keys list \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --key-type hostKey
Configurare Key Vault
Il back-end di Key Vault archivia le chiavi di accesso come segreti Key Vault, fornendo audit e controllo di accesso di livello aziendale.
Creare un Key Vault (se non ne è disponibile uno):
az keyvault create \ --name "<KEYVAULT_NAME>" \ --resource-group "<RESOURCE_GROUP>" \ --location "<LOCATION>"Abilitare l'identità gestita nell'app contenitore (se non è già abilitata):
az containerapp identity assign \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --system-assignedConcedere il ruolo Key Vault Secrets Officer all'identità gestita. Il runtime richiede l'accesso in lettura e scrittura per creare e gestire chiavi:
PRINCIPAL_ID=$(az containerapp show \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --query identity.principalId \ --output tsv) KEYVAULT_ID=$(az keyvault show \ --name "<KEYVAULT_NAME>" \ --query id \ --output tsv) az role assignment create \ --role "Key Vault Secrets Officer" \ --assignee "$PRINCIPAL_ID" \ --scope "$KEYVAULT_ID"Impostare il tipo di archiviazione e Key Vault URI:
Per l'identità assegnata dal sistema:
az containerapp update \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --set-env-vars \ "AzureWebJobsSecretStorageType=keyvault" \ "AzureWebJobsSecretStorageKeyVaultUri=https://<KEYVAULT_NAME>.vault.azure.net"Per l'identità assegnata dall'utente, impostare anche l'ID client:
az containerapp update \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --set-env-vars \ "AzureWebJobsSecretStorageType=keyvault" \ "AzureWebJobsSecretStorageKeyVaultUri=https://<KEYVAULT_NAME>.vault.azure.net" \ "AzureWebJobsSecretStorageKeyVaultClientId=<USER_ASSIGNED_IDENTITY_CLIENT_ID>"Attivare la creazione della chiave elencando le chiavi:
az containerapp function keys list \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --key-type hostKey
Gestire le chiavi di accesso
Indipendentemente dal back-end, usare i comandi seguenti per elencare, creare ed eliminare chiavi di accesso:
# List all host keys
az containerapp function keys list \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--key-type hostKey
# List the master key
az containerapp function keys list \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--key-type masterKey
# Create or overwrite a custom host key
az containerapp function keys set \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--key-name "MyCustomKey" \
--key-value "<YOUR_KEY_VALUE>" \
--key-type hostKey
# Show a specific key
az containerapp function keys show \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--key-name "<KEY_NAME>" \
--key-type hostKey
# Delete a host key
az containerapp function keys delete \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--key-name "MyCustomKey" \
--key-type hostKey
Chiamare una funzione con una chiave di accesso
Passare la chiave come parametro di query o intestazione della richiesta.
# Query parameter
curl "https://<FUNCTIONS_APP_URL>/api/<FUNCTION_NAME>?code=<HOST_KEY>"
# Header
curl "https://<FUNCTIONS_APP_URL>/api/<FUNCTION_NAME>" \
-H "x-functions-key: <HOST_KEY>"