Condividi tramite


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

Azure Key Vault consente di proteggere segreti come le chiavi API, le stringhe di connessione del database necessarie per accedere alle applicazioni, ai servizi e alle risorse IT.

In questa esercitazione si apprenderà come ottenere un'applicazione console per leggere informazioni da Azure Key Vault. L'applicazione usa l'identità gestita della macchina virtuale per eseguire l'autenticazione per Key Vault.

Il tutorial ti illustra come:

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

Prima di iniziare, leggere Key Vault concetti di base.

Se non si ha una sottoscrizione Azure, creare un account free.

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 a Azure

Per accedere a Azure usando il comando seguente:

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

Questa guida introduttiva usa un insieme di credenziali chiave di Azure precreato. È possibile creare un insieme di credenziali delle chiavi seguendo i passaggi di queste guide introduttive:

In alternativa, è possibile eseguire questi comandi interfaccia della riga di comando di Azure o Azure PowerShell.

Importante

Ogni insieme di credenziali delle chiavi deve avere un nome univoco. Sostituire <vault-name> con il nome del Key Vault negli esempi seguenti.

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

az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true

Popolare l'insieme di credenziali delle chiavi con un segreto

Creare un segreto denominato mySecret, con un valore Success!. Un segreto potrebbe essere una password, un stringa di connessione SQL o qualsiasi altra informazione che è necessario mantenere sia sicura che disponibile per l'applicazione.

Per aggiungere un segreto al tuo Key Vault appena creato, usa il seguente comando:

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

Creare una macchina virtuale

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

Windows Linux
interfaccia della riga di comando di Azure interfaccia della riga di comando di Azure
PowerShell PowerShell
portale Azure portale Azure

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 <vm-name> --resource-group <resource-group>

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

Per ottenere le autorizzazioni per l'archivio chiavi tramite Role-Based Controllo di accesso (RBAC), è necessario assegnare un ruolo al "User Principal Name" (UPN) usando il comando interfaccia della riga di comando di Azure az role assignment create.

az role assignment create --role "Key Vault Secrets User" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"

Sostituire <upn>, <subscription-id>e <vault-name> con i valori effettivi. Se è stato usato un nome di gruppo di risorse diverso, sostituire anche "myResourceGroup". L'UPN in genere sarà nel formato di un indirizzo e-mail (ad esempio, username@domain.com).

Accedere alla macchina virtuale

Per accedere alla macchina virtuale, seguire le istruzioni riportate in Connect e accedere a una macchina virtuale Azure Windows o Connect e accedere a una macchina virtuale Linux 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, passare alla pagina .NET downloads.

Creare ed eseguire un'app di esempio .NET

Aprire un prompt dei comandi.

È possibile stampare "Hello World" nella console 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 Azure Key Vault Secrets per .NET:

dotnet add package Azure.Security.KeyVault.Secrets

Per questa guida introduttiva, è necessario installare il pacchetto di identità seguente per eseguire l'autenticazione in 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 a Key Vault, utilizzando il token dell'identità gestita dell'applicazione. 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 = "<vault-name>";
            var kvUri = "https://<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

API REST Azure Key Vault