Esercitazione: Usare Azure Key Vault con una macchina virtuale in .NET

Azure Key Vault facilita la protezione di segreti come le chiavi API, le stringhe di connessione di database necessarie per accedere alle applicazioni, i servizi e le risorse IT.

In questa esercitazione viene descritto come configurare un'applicazione console per leggere un segreto da Azure Key Vault. L'applicazione userà l'identità gestita della macchina virtuale per l'autenticazione con Key Vault.

L'esercitazione illustra come:

  • Crea un gruppo di risorse.
  • Creare un insieme di credenziali delle chiavi.
  • Aggiungere un segreto all'insieme di credenziali delle chiavi.
  • Recuperare un segreto dall'insieme di credenziali delle chiavi.
  • Creare una macchina virtuale di Azure.
  • Abilitare un'identità gestita per la macchina virtuale.
  • Assegnare autorizzazioni per l'identità della macchina virtuale.

Prima di iniziare, leggere i concetti di base di Key Vault.

Se non hai una sottoscrizione di Azure, crea un account gratuito.

Prerequisiti

Per Windows, Mac e Linux:

Creare le risorse e assegnare le autorizzazioni

Prima di iniziare a scrivere il codice, è necessario creare alcune risorse, inserire un segreto nell'insieme di credenziali delle chiavi e assegnare le autorizzazioni.

Accedere ad Azure

Per accedere ad Azure usando il comando seguente:

Creare un gruppo di risorse e un insieme di credenziali delle chiavi

In questo argomento di avvio rapido si usa un'istanza creata in precedenza di Azure Key Vault. È possibile creare un insieme di credenziali delle chiavi seguendo la procedura descritta negli argomenti di avvio rapido per l'interfaccia della riga di comando di Azure, Azure PowerShell o il portale di Azure.

In alternativa, è possibile eseguire semplicemente i seguenti comandi dell'interfaccia della riga di comando di Azure o di Azure PowerShell.

Importante

Ogni insieme di credenziali delle chiavi deve avere un nome univoco. Negli esempi seguenti sostituire <your-unique-keyvault-name> con il nome dell'insieme di credenziali delle chiavi in uso.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup"

Popolare l'insieme di credenziali delle chiavi con un segreto

Creare un segreto denominato mySecret, con un valore Success!. Un segreto può essere una password, una stringa di connessione SQL o qualsiasi altra informazione che è necessario conservare in modo sicuro e rendere allo stesso tempo disponibile per l'applicazione.

Per aggiungere un segreto all'insieme di credenziali delle chiavi appena creato, usare il seguente comando:

az keyvault secret set --vault-name "<your-unique-keyvault-name>" --name "mySecret" --value "Success!"

Creare una macchina virtuale

Creare una macchina virtuale Windows o Linux con uno dei metodi seguenti:

Windows Linux
Interfaccia della riga di comando di Azure Interfaccia della riga di comando di Azure
PowerShell PowerShell
Azure portal Azure portal

Assegnare un'identità alla macchina virtuale

Creare un'identità assegnata dal sistema per la macchina virtuale con il seguente esempio:

az vm identity assign --name <NameOfYourVirtualMachine> --resource-group <YourResourceGroupName>

Annotare l'identità assegnata dal sistema che viene visualizzata nel codice seguente. L'output del comando precedente sarà:

{
  "systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "userAssignedIdentities": {}
}

Assegnare autorizzazioni per l'identità della macchina virtuale

Assegnare le autorizzazioni dell'identità creata in precedenza all'insieme di credenziali delle chiavi con il comando az keyvault set-policy:

az keyvault set-policy --name '<your-unique-key-vault-name>' --object-id <VMSystemAssignedIdentity> --secret-permissions  get list set delete

Accedere alla macchina virtuale

Per accedere alla macchina virtuale, seguire le istruzioni riportate in Connettersi e accedere a una macchina virtuale Windows di Azure oppure Connettersi e accedere a una macchina virtuale Linux di Azure.

Impostare l'app console

Creare un'app console e installare i pacchetti necessari usando il comando dotnet.

Installare .NET Core

Per installare .NET Core, visitare la pagina dei download di .NET.

Creare ed eseguire un'app .NET di esempio

Apri un prompt dei comandi.

È possibile stampare sulla console "Hello World" eseguendo i comandi seguenti:

dotnet new console -n keyvault-console-app
cd keyvault-console-app
dotnet run

Installare il pacchetto

Nella finestra della console installare la libreria client dei segreti di Azure Key Vault per .NET:

dotnet add package Azure.Security.KeyVault.Secrets

Per questo argomento di avvio rapido, è necessario installare il pacchetto di identità seguente per eseguire l'autenticazione con Azure Key Vault:

dotnet add package Azure.Identity

Modificare l'app console

Aprire il file Program.cs e aggiungere questi pacchetti:

using System;
using Azure.Core;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

Aggiungere queste righe per aggiornare l'URI in modo che rispecchi il valore vaultUri dell'insieme di credenziali delle chiavi. Il codice seguente usa 'DefaultAzureCredential()' per l'autenticazione all'insieme di credenziali delle chiavi, che usa il token dell'identità gestita dell'applicazione per l'autenticazione. Viene anche usato il backoff esponenziale per la ripetizione dei tentativi in caso di limitazione dell'insieme di credenziali delle chiavi.

  class Program
    {
        static void Main(string[] args)
        {
            string secretName = "mySecret";
            string keyVaultName = "<your-key-vault-name>";
            var kvUri = "https://<your-key-vault-name>.vault.azure.net";
            SecretClientOptions options = new SecretClientOptions()
            {
                Retry =
                {
                    Delay= TimeSpan.FromSeconds(2),
                    MaxDelay = TimeSpan.FromSeconds(16),
                    MaxRetries = 5,
                    Mode = RetryMode.Exponential
                 }
            };

            var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential(),options);

            Console.Write("Input the value of your secret > ");
            string secretValue = Console.ReadLine();

            Console.Write("Creating a secret in " + keyVaultName + " called '" + secretName + "' with the value '" + secretValue + "' ...");

            client.SetSecret(secretName, secretValue);

            Console.WriteLine(" done.");

            Console.WriteLine("Forgetting your secret.");
            secretValue = "";
            Console.WriteLine("Your secret is '" + secretValue + "'.");

            Console.WriteLine("Retrieving your secret from " + keyVaultName + ".");

            KeyVaultSecret secret = client.GetSecret(secretName);

            Console.WriteLine("Your secret is '" + secret.Value + "'.");

            Console.Write("Deleting your secret from " + keyVaultName + " ...");

            client.StartDeleteSecret(secretName);

            System.Threading.Thread.Sleep(5000);
            Console.WriteLine(" done.");

        }
    }

Pulire le risorse

Quando non servono più, è possibile eliminare la macchina virtuale e l'insieme di credenziali delle chiavi.

Passaggi successivi