Szybki start: Azure Key Vault tajnej biblioteki klienta dla platformy .NET (ZESTAW SDK 4)

Wprowadzenie do biblioteki klienta Azure Key Vault tajnego dla programu .NET. Azure Key Vault to usługa w chmurze, która zapewnia bezpieczny magazyn wpisów tajnych. Możesz bezpiecznie przechowywać klucze, hasła, certyfikaty oraz inne wpisy tajne. Magazyny kluczy platformy Azure można tworzyć oraz nimi zarządzać za pośrednictwem witryny Azure Portal. Z tego przewodnika Szybki start dowiesz się, jak tworzyć, pobierać i usuwać wpisy tajne z usługi Azure Key Vault przy użyciu biblioteki klienta platformy .NET

Key Vault zasobów biblioteki klienta:

Dokumentacja referencyjna interfejsu API | Kod źródłowy biblioteki | Pakiet (NuGet)

Aby uzyskać więcej informacji na Key Vault i wpisów tajnych, zobacz:

Wymagania wstępne

Ten przewodnik Szybki start korzysta z interfejsu dotnet wiersza polecenia platformy Azure

Konfiguracja

Ten przewodnik Szybki start używa biblioteki tożsamości platformy Azure z interfejsem wiersza polecenia platformy Azure do uwierzytelniania użytkownika w usługach platformy Azure. Deweloperzy mogą również używać Visual Studio lub Visual Studio Code do uwierzytelniania swoich wywołań. Aby uzyskać więcej informacji, zobacz Authenticate the client with Azure Identity client library (Uwierzytelnianie klienta za pomocą biblioteki klienta tożsamości platformy Azure).

Logowanie do platformy Azure

  1. Uruchom polecenie login.

    az login
    

    Jeśli interfejs wiersza polecenia może otworzyć domyślną przeglądarkę, zrobi to i załaduje stronę logowania platformy Azure.

    W przeciwnym razie otwórz stronę przeglądarki pod https://aka.ms/devicelogin adresem i wprowadź kod autoryzacji wyświetlany w terminalu.

  2. Zaloguj się w przeglądarce przy użyciu poświadczeń swojego konta.

Udzielanie dostępu do magazynu kluczy

Tworzenie zasad dostępu dla magazynu kluczy, które przyznaje uprawnienia do kluczy tajnych do konta użytkownika

az keyvault set-policy --name <YourKeyVaultName> --upn user@domain.com --secret-permissions delete get list set purge

Tworzenie nowej aplikacji konsolowej .NET

  1. W powłoki poleceń uruchom następujące polecenie, aby utworzyć projekt o nazwie key-vault-console-app :

    dotnet new console --name key-vault-console-app
    
  2. Zmień katalog na nowo utworzony katalog key-vault-console-app i uruchom następujące polecenie, aby skompilować projekt:

    dotnet build
    

    Dane wyjściowe kompilacji nie powinny zawierać ostrzeżeń ani błędów.

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

Instalowanie pakietów

Z powłoki poleceń zainstaluj Azure Key Vault klienta tajnego dla programu .NET:

dotnet add package Azure.Security.KeyVault.Secrets

W tym przewodniku Szybki start musisz również zainstalować bibliotekę klienta zestawu Azure SDK dla tożsamości platformy Azure:

dotnet add package Azure.Identity

Ustawianie zmiennych środowiskowych

Ta aplikacja używa nazwy magazynu kluczy jako zmiennej środowiskowej o nazwie KEY_VAULT_NAME .

Windows

set KEY_VAULT_NAME=<your-key-vault-name>

Windows PowerShell

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

macOS lub Linux

export KEY_VAULT_NAME=<your-key-vault-name>

Model obiektów

Biblioteka Azure Key Vault klienta dla programu .NET umożliwia zarządzanie wpisami tajnymi. W sekcji Przykłady kodu pokazano, jak utworzyć klienta, ustawić klucz tajny, pobrać klucz tajny i usunąć klucz tajny.

Przykłady kodu

Dodawanie dyrektyw

Dodaj następujące dyrektywy na początku programu Program.cs:

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

Uwierzytelnianie i tworzenie klienta

W tym przewodniku Szybki start zalogowany użytkownik jest używany do uwierzytelniania w magazynie kluczy, co jest preferowaną metodą tworzenia aplikacji lokalnych. W przypadku aplikacji wdrożonych na platformie Azure tożsamość zarządzana powinna być przypisana do usługi App Service lub maszyny wirtualnej. Aby uzyskać więcej informacji, zobacz Omówienie tożsamości zarządzanej.

W poniższym przykładzie nazwa magazynu kluczy jest rozszerzana do wartości URI magazynu kluczy w formacie "https:// <your-key-vault-name> .vault.azure.net". W tym przykładzie używamy klasy "DefaultAzureCredential()" z biblioteki tożsamości platformy Azure,która umożliwia używanie tego samego kodu w różnych środowiskach z różnymi opcjami w celu zapewnienia tożsamości. Aby uzyskać więcej informacji na temat uwierzytelniania w magazynie kluczy, zobacz Developer's Guide (Przewodnik dewelopera).

string keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = "https://" + keyVaultName + ".vault.azure.net";

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

Zapisywanie tajnego

Teraz, po uwierzytelnieniu aplikacji konsolowej, dodaj klucz tajny do magazynu kluczy. W tym zadaniu użyj metody SetSecretAsync. Pierwszy parametr metody akceptuje nazwę dla tajnego — "mySecret" w tym przykładzie.

await client.SetSecretAsync(secretName, secretValue);

Uwaga

Jeśli istnieje nazwa tajnego, powyższy kod utworzy nową wersję tego tajnego.

Pobieranie tajnego

Możesz teraz pobrać wcześniej ustawioną wartość za pomocą metody GetSecretAsync.

var secret = await client.GetSecretAsync(secretName);

Twój klucz tajny jest teraz zapisany jako secret.Value .

Usuń klucz tajny

Na koniec usuńmy klucz tajny z magazynu kluczy przy użyciu metod StartDeleteSecretAsync i PurgeDeletedSecretAsync.

var operation = await client.StartDeleteSecretAsync("mySecret");
// You only need to wait for completion if you want to purge or recover the key.
await operation.WaitForCompletionAsync();

await client.PurgeDeletedKeyAsync("mySecret");

Przykładowy kod

Zmodyfikuj aplikację konsolą .NET Core, aby wchodzić w Key Vault, wykonując następujące czynności:

  1. Zastąp kod w pliku Program.cs następującym kodem:

    using System;
    using System.Threading.Tasks;
    using Azure.Identity;
    using Azure.Security.KeyVault.Secrets;
    
    namespace key_vault_console_app
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                const string secretName = "mySecret";
                var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
                var kvUri = $"https://{keyVaultName}.vault.azure.net";
    
                var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
    
                Console.Write("Input the value of your secret > ");
                var secretValue = Console.ReadLine();
    
                Console.Write($"Creating a secret in {keyVaultName} called '{secretName}' with the value '{secretValue}' ...");
                await client.SetSecretAsync(secretName, secretValue);
                Console.WriteLine(" done.");
    
                Console.WriteLine("Forgetting your secret.");
                secretValue = string.Empty;
                Console.WriteLine($"Your secret is '{secretValue}'.");
    
                Console.WriteLine($"Retrieving your secret from {keyVaultName}.");
                var secret = await client.GetSecretAsync(secretName);
                Console.WriteLine($"Your secret is '{secret.Value.Value}'.");
    
                Console.Write($"Deleting your secret from {keyVaultName} ...");
                DeleteSecretOperation operation = await client.StartDeleteSecretAsync(secretName);
                // You only need to wait for completion if you want to purge or recover the secret.
                await operation.WaitForCompletionAsync();
                Console.WriteLine(" done.");
    
                Console.Write($"Purging your secret from {keyVaultName} ...");
                await client.PurgeDeletedSecretAsync(secretName);
                Console.WriteLine(" done.");
            }
        }
    }
    

Testowanie i weryfikowanie

  1. Wykonaj następujące polecenie, aby uruchomić aplikację.

    dotnet run
    
  2. Po wyświetleniu monitu wprowadź wartość wpisów tajnych. Na przykład mySecretPassword.

Zostanie wyświetlona odmiana następujących danych wyjściowych:

Input the value of your secret > mySecretPassword
Creating a secret in <your-unique-keyvault-name> called 'mySecret' with the value 'mySecretPassword' ... done.
Forgetting your secret.
Your secret is ''.
Retrieving your secret from <your-unique-keyvault-name>.
Your secret is 'mySecretPassword'.
Deleting your secret from <your-unique-keyvault-name> ... done.    
Purging your secret from <your-unique-keyvault-name> ... done.

Następne kroki

Aby dowiedzieć się więcej Key Vault o tym, jak zintegrować ją z aplikacjami, zobacz następujące artykuły: