Procedura per leggere un segreto da Azure Key Vault in un'applicazione .NET senza scrivere nessuna password, né nel codice né nella configurazione. Lo stesso programma gira prima sul computer, con la tua utenza, e poi su Container Apps, con l'identità gestita dell'applicazione. Le risorse si creano e si eliminano dal portale di Azure; dal computer si scrive il programma e si costruisce l'immagine.
Occorre: un account Azure con una sottoscrizione attiva e il ruolo Owner su di essa, .NET 10 e l'interfaccia a riga di comando di Azure sul computer. Durata: circa un'ora, quasi tutta di attesa per l'ambiente di Container Apps. Costo: pochi centesimi, se elimini le risorse alla fine. Il registro Basic si paga finché esiste.
Il portale delle schermate è in inglese: i nomi dei comandi sono riportati come appaiono a schermo.
Il segreto
1. Crea il Key Vault
Apri https://portal.azure.com/#create/Microsoft.KeyVault e compila:
- Resource group: Create new,
rg-guide-kv-01, OK - Key vault name: un nome tuo, unico in tutta Azure, qui
kv-guide-extranet-01 - Region: West Europe
- Pricing tier: Standard

Nella scheda Access configuration lascia Azure role-based access control: saranno i ruoli di Azure a decidere gli accessi.

Premi Review + create, poi Create, e aspetta la fine della creazione.

2. Dai il permesso a te stesso
Chi crea il Key Vault non può leggerne i segreti finché non ha un ruolo. Nel Key Vault apri Access control (IAM), premi Add > Add role assignment, cerca Key Vault Secrets Officer, selezionalo e premi Next.

Premi Select members, cerca la tua utenza, selezionala e premi Select. Poi premi due volte Review + assign.

3. Crea il segreto
Attendi un paio di minuti che il ruolo sia attivo. Nel Key Vault apri Objects > Secrets, premi Generate/Import e compila Name con ShopPassword e Secret value con not-a-real-password. Premi Create.


Il programma
4. Crea il progetto
dotnet new web -n vault-demo
cd vault-demo
dotnet add package Azure.Identity --version 1.21.0
dotnet add package Azure.Security.KeyVault.Secrets --version 4.12.05. Scrivi il codice
Sostituisce Program.cs:
using Azure;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
string vaultUrl = builder.Configuration["VAULT_URL"]!;
SecretClient secrets = new(new Uri(vaultUrl), new DefaultAzureCredential());
app.MapGet("/secret", async () =>
{
try
{
KeyVaultSecret secret = await secrets.GetSecretAsync("ShopPassword");
return Results.Ok($"Secret read: {secret.Value.Length} characters.");
}
catch (RequestFailedException e)
{
return Results.Ok($"Refused: HTTP {e.Status}, {e.ErrorCode}");
}
});
app.Run();Il programma mostra solo la lunghezza del segreto: un segreto non si stampa e non si restituisce. DefaultAzureCredential prova da sola le identità disponibili: sul computer trova l'accesso fatto con az login, su Container Apps trova l'identità gestita. Il codice è lo stesso nei due casi.
6. Provalo sul computer
export VAULT_URL=https://kv-guide-extranet-01.vault.azure.net/
dotnet run --urls http://localhost:5077In PowerShell la prima riga è $env:VAULT_URL = "https://kv-guide-extranet-01.vault.azure.net/". Apri http://localhost:5077/secret:
"Secret read: 19 characters."Su Azure, con l'identità gestita
7. Crea il registro
Apri https://portal.azure.com/#create/Microsoft.ContainerRegistry. In Resource group scegli rg-guide-kv-01, in Registry name scrivi un nome tuo, unico in tutta Azure, qui acrguidekv01, e in Pricing plan scegli Basic. Premi Review + create, poi Create.

8. Costruisci l'immagine
Nella cartella del progetto crea il Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY vault-demo.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app
FROM mcr.microsoft.com/dotnet/aspnet:10.0
WORKDIR /app
COPY /app .
EXPOSE 8080
ENTRYPOINT ["dotnet", "vault-demo.dll"]e un .dockerignore con due righe, bin/ e obj/. Poi:
az acr build --registry acrguidekv01 --image vault-demo:1.0 .9. Crea l'applicazione
Apri https://portal.azure.com/#create/Microsoft.ContainerApp. Nella scheda Basics compila Resource group con rg-guide-kv-01, Container app name con ca-vault-01, Deployment source con Container image e Region con West Europe. Il portale propone un nuovo ambiente.

Premi Next : Container >, togli Use quickstart image e scegli il registro, l'immagine vault-demo e il tag 1.0. Con Authentication type su Managed identity, il portale assegna il permesso di scaricare l'immagine.

Più in basso, in Environment variables, scrivi Name VAULT_URL e Value https://kv-guide-extranet-01.vault.azure.net/.

Premi Next : Ingress >, attiva Ingress, scegli Accepting traffic from anywhere e scrivi 8080 in Target port.

Premi Review + create, poi Create. Nella prova la creazione dell'ambiente ha richiesto più di venti minuti. Al termine, in Overview, Application Url riporta l'indirizzo dell'applicazione.

10. Attiva l'identità gestita
Aggiungendo /secret all'indirizzo, l'applicazione risponde 500: non ha ancora nessuna identità con cui presentarsi. Nell'applicazione apri Security > Identity, scheda System assigned, porta Status su On, premi Save e conferma con Yes. Azure gestisce l'identità: nessuna password da conservare.

11. Prova senza ruolo
Riapri l'indirizzo con /secret:
"Refused: HTTP 403, Forbidden"L'identità esiste e Azure sa chi è, ma non ha nessun permesso sul Key Vault. È il comportamento giusto.
12. Dai il ruolo all'applicazione
Nel Key Vault apri Access control (IAM), Add > Add role assignment, cerca Key Vault Secrets User, selezionalo e premi Next. Permette di leggere i segreti e basta.

Scegli Managed identity, premi Select members, in Managed identity scegli Container App, seleziona ca-vault-01 e premi Select. Poi premi due volte Review + assign.

Lo stesso programma, senza nessuna modifica e senza riavvio, nella prova rispondeva già dopo 10 secondi:
"Secret read: 19 characters."13. Controlla il ruolo
In Access control (IAM) > Role assignments, cerca ca-vault-01: una riga sola, con ambito This resource.

Eliminare le risorse
14. Elimina il gruppo
Apri il gruppo rg-guide-kv-01.

Premi Delete resource group, scrivi il nome del gruppo per confermare, premi Delete e, nella finestra che segue, di nuovo Delete.

15. Libera il nome del Key Vault
Un Key Vault eliminato resta recuperabile per 90 giorni e il suo nome resta occupato. Apri https://portal.azure.com/#browse/Microsoft.KeyVault%2Fvaults, premi Manage deleted vaults, scegli la sottoscrizione e seleziona il tuo Key Vault.

Premi Purge e conferma con Delete: non si può più recuperare.

Nomi dei comandi, schermate e risposte rilevati il 9 novembre 2026, regione West Europe, con .NET 10.0.401, Azure.Security.KeyVault.Secrets 4.12.0 e l'interfaccia a riga di comando di Azure 2.91.0.