Snabbstart: Azure Key Vault-nyckelklientbiblioteket för .NET

Kom igång med Azure Key Vault-nyckelklientbiblioteket för .NET. Azue Key Vault är en molntjänst som tillhandahåller en säker lagring för kryptografiska nycklar. Du kan lagra kryptografiska nycklar, lösenord, certifikat och andra hemligheter på ett säkert sätt. Du kan skapa och hantera Azure-nyckelvalv via Azure Portal. I den här snabbstarten får du lära dig hur du skapar, hämtar och tar bort nycklar från ett Azure-nyckelvalv med hjälp av .NET-nyckelklientbiblioteket

Nyckelklientbiblioteksresurser för Key Vault:

API-referensdokumentation | Bibliotekets källkod | Paket (NuGet)

Mer information om Key Vault och nycklar finns i:

  • Översikt över Key Vault
  • Nyckelöversikt.

Förutsättningar

Den här snabbstarten använder dotnet och Azure CLI

Ställ in

Den här snabbstarten använder Azure Identity-biblioteket med Azure CLI för att autentisera användare till Azure Services. Utvecklare kan också använda Visual Studio eller Visual Studio Code för att autentisera sina anrop. För mer information, se Autentisera klienten med Azure Identity-klientbiblioteket.

Logga in på Azure

  1. Kör kommandot login.

    az login
    

    Om CLI kan öppna din standardwebbläsare kommer den att göra det och läsa in en Azure-inloggningssida.

    Annars öppnar du en webbläsarsida på https://aka.ms/devicelogin och anger auktoriseringskoden som visas i terminalen.

  2. Logga in med dina autentiseringsuppgifter för kontot i webbläsaren.

Bevilja åtkomst till ditt nyckelvalv

För att få behörigheter till ditt nyckelvalv via rollbaserad åtkomstkontroll (RBAC) tilldelar du en roll till ditt användarhuvudnamn (UPN) med hjälp av Azure CLI-kommandot az role assignment create.

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

Ersätt <upn>, <subscription-id>och <vault-name> med dina faktiska värden. Om du använde ett annat resursgruppsnamn ersätter du även "myResourceGroup". Ditt UPN är vanligtvis i formatet för en e-postadress (t.ex. username@domain.com).

Skapa ny .NET-konsolapp

  1. I ett kommandoskal kör du följande kommando för att skapa ett projekt med namnet key-vault-console-app:

    dotnet new console --name key-vault-console-app
    
  2. Byt till den nyligen skapade key-vault-console-app-mappen och kör följande kommando för att kompilera projektet:

    dotnet build
    

    Kompileringsutdata får inte innehålla några varningar eller fel.

    Build succeeded.
     0 Warning(s)
     0 Error(s)
    

Installera paketen

Från kommandogränssnittet installerar du Azure Key Vault-nyckelklientbiblioteket för .NET:

dotnet add package Azure.Security.KeyVault.Keys

För den här snabbstarten måste du också installera Azure Identity-klientbiblioteket:

dotnet add package Azure.Identity

Ange miljövariabler

Den här applikationen använder nyckelvalvnamnet som en miljövariabel kallad KEY_VAULT_NAME.

Windows

set KEY_VAULT_NAME=<vault-name>

Windows PowerShell

$Env:KEY_VAULT_NAME="<vault-name>"

macOS eller Linux

export KEY_VAULT_NAME=<vault-name>

Objektmodell

Med Azure Key Vault-nyckelklientbiblioteket för .NET kan du hantera nycklar. I avsnittet Kodexempel visas hur du skapar en klient, anger en nyckel, hämtar en nyckel och tar bort en nyckel.

Kodexempel

Lägga till direktiv

Lägg till följande direktiv överst i Program.cs:

using System;
using Azure.Identity;
using Azure.Security.KeyVault.Keys;

Autentisera och skapa en klient

Programbegäranden till de flesta Azure-tjänster måste auktoriseras. Att använda DefaultAzureCredential-klassen som tillhandahålls av Azure Identity-klientbiblioteket är den rekommenderade metoden för att implementera autentisering utan lösenord till Azure-tjänster i din kod. DefaultAzureCredential stöder flera autentiseringsmetoder och avgör vilken metod som ska användas vid körning. Med den här metoden kan din app använda olika autentiseringsmetoder i olika miljöer (lokalt jämfört med produktion) utan att implementera miljöspecifik kod.

I den här snabbstarten DefaultAzureCredential autentiserar till nyckelvalvet med autentiseringsuppgifterna för den lokala utvecklingsanvändaren som är inloggad i Azure CLI. När applikationen distribueras till Azure kan samma DefaultAzureCredential kod automatiskt identifiera och använda en hanterad identitet tilldelad till en App Service, virtuell dator eller andra tjänster. Mer information finns i Översikt över hanterad identitet.

I det här exemplet expanderas namnet på ditt nyckelvalv till nyckelvalvets URI i formatet https://<vault-name>.vault.azure.net. Mer information om autentisering till Key Vault finns i "Utvecklarguide".

var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = $"https://{keyVaultName}.vault.azure.net";

var client = new KeyClient(new Uri(kvUri), new DefaultAzureCredential());

Spara en nyckel

Använd metoden CreateKeyAsync för den här uppgiften. Metodens parametrar accepterar ett nyckelnamn och nyckeltypen (länk till nyckeltypen).

var key = await client.CreateKeyAsync("myKey", KeyType.Rsa);

Kommentar

Om nyckelnamnet finns skapar den här koden en ny version av nyckeln.

Hämta en nyckel

Nu kan du hämta den tidigare skapade nyckeln med metoden GetKeyAsync.

var key = await client.GetKeyAsync("myKey");

Ta bort en nyckel

Slutligen tar vi bort och rensar nyckeln från nyckelvalvet med metoderna `StartDeleteKeyAsync` och `PurgeDeletedKeyAsync`.

var operation = await client.StartDeleteKeyAsync("myKey");

// You only need to wait for completion if you want to purge or recover the key.
await operation.WaitForCompletionAsync();

var key = operation.Value;
await client.PurgeDeletedKeyAsync("myKey");

Exempelkod

Ändra .NET-konsolappen så att den interagerar med Key Vault genom att utföra följande steg:

  • Ersätt koden i Program.cs med följande kod:

    using System;
    using System.Threading.Tasks;
    using Azure.Identity;
    using Azure.Security.KeyVault.Keys;
    
    namespace key_vault_console_app
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                const string keyName = "myKey";
                var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
                var kvUri = $"https://{keyVaultName}.vault.azure.net";
    
                var client = new KeyClient(new Uri(kvUri), new DefaultAzureCredential());
    
                Console.Write($"Creating a key in {keyVaultName} called '{keyName}' ...");
                var createdKey = await client.CreateKeyAsync(keyName, KeyType.Rsa);
                Console.WriteLine("done.");
    
                Console.WriteLine($"Retrieving your key from {keyVaultName}.");
                var key = await client.GetKeyAsync(keyName);
                Console.WriteLine($"Your key version is '{key.Value.Properties.Version}'.");
    
                Console.Write($"Deleting your key from {keyVaultName} ...");
                var deleteOperation = await client.StartDeleteKeyAsync(keyName);
                // You only need to wait for completion if you want to purge or recover the key.
                await deleteOperation.WaitForCompletionAsync();
                Console.WriteLine("done.");
    
                Console.Write($"Purging your key from {keyVaultName} ...");
                await client.PurgeDeletedKeyAsync(keyName);
                Console.WriteLine(" done.");
            }
        }
    }
    

Testa och verifiera

  1. Kör följande kommando för att skapa projektet

    dotnet build
    
  2. Kör följande kommando för att köra appen.

    dotnet run
    
  3. När du uppmanas till det anger du ett hemligt värde. Till exempel mySecretPassword.

    En variant av följande utdata visas:

    Creating a key in mykeyvault called 'myKey' ... done.
    Retrieving your key from mykeyvault.
    Your key version is '8532359bced24e4bb2525f2d2050738a'.
    Deleting your key from jl-kv ... done
    Purging your key from <vault-name> ... done.   
    

Nästa steg

I den här snabbstarten skapade du ett nyckelvalv, lagrade en nyckel och hämtade nyckeln.

Mer information om Key Vault och hur du integrerar det med dina appar finns i följande artiklar: