Samouczek: używanie Azure Key Vault z maszyną wirtualną w .NET

Azure Key Vault pomaga chronić tajemnice, takie jak klucze interfejsu API, ciągi połączeń do bazy danych potrzebne do uzyskiwania dostępu do aplikacji, usług i zasobów IT.

Z tego samouczka dowiesz się, jak uzyskać aplikację konsolową, aby odczytywać informacje z Azure Key Vault. Aplikacja będzie używać tożsamości zarządzanej maszyną wirtualną do uwierzytelniania w usłudze Key Vault.

Ten samouczek przedstawia sposób wykonania następujących czynności:

  • Utwórz grupę zasobów.
  • Utwórz skrytkę kluczy.
  • Dodaj sekret do magazynu kluczy.
  • Pobieranie wpisu tajnego z magazynu kluczy.
  • Utwórz maszynę wirtualną Azure.
  • Włączanie tożsamości zarządzanej dla maszyny wirtualnej.
  • Przypisz uprawnienia do tożsamości maszyny wirtualnej.

Przed rozpoczęciem przeczytaj Key Vault podstawowe pojęcia.

Jeśli nie masz subskrypcji Azure, utwórz konto free.

Wymagania wstępne

W przypadku systemów Windows, Mac i Linux:

Tworzenie zasobów i przypisywanie uprawnień

Przed rozpoczęciem kodowania musisz utworzyć niektóre zasoby, umieścić wpis tajny w magazynie kluczy i przypisać uprawnienia.

Zaloguj się do Azure

Aby zalogować się do Azure przy użyciu następującego polecenia:

az login

Utwórz grupę zasobów i magazyn kluczy

Ten przewodnik szybkiego startu korzysta z wcześniej utworzonego Azure Key Vault. Można utworzyć magazyn kluczy, wykonując kroki opisane w tych szybkich przewodnikach startowych:

Alternatywnie możesz uruchomić te polecenia Azure CLI lub Azure PowerShell.

Ważne

Każdy magazyn kluczy musi mieć unikalną nazwę. Zastąp <vault-name> nazwą magazynu kluczy w poniższych przykładach.

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

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

Wypełnij swój magazyn kluczy tajemnicą

Utwórzmy wpis tajny o nazwie mySecret z wartością Success!. Tajna informacja może być hasłem, ciągiem połączeniowym SQL lub innymi informacjami, które muszą być zarówno zabezpieczone, jak i dostępne dla Twojej aplikacji.

Aby dodać sekret do nowo utworzonego magazynu kluczy, użyj następującego polecenia:

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

Tworzenie maszyny wirtualnej

Utwórz maszynę wirtualną Windows lub Linux przy użyciu jednej z następujących metod:

Windows Linux
Azure CLI Azure CLI
PowerShell PowerShell
Portal Azure Portal Azure

Przypisywanie tożsamości do maszyny wirtualnej

Utwórz tożsamość przypisaną przez system dla maszyny wirtualnej przy użyciu następującego przykładu:

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

Zanotuj tożsamość przypisaną przez system, która jest wyświetlana w poniższym kodzie. Dane wyjściowe poprzedniego polecenia to:

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

Przypisywanie uprawnień do tożsamości maszyny wirtualnej

Aby uzyskać uprawnienia do magazynu kluczy za pomocą Role-Based Access Control (RBAC), przypisz rolę do głównej nazwy użytkownika (UPN) przy użyciu polecenia Azure CLI 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>"

Zastąp <upn>, <subscription-id> i <vault-name> rzeczywistymi wartościami. Jeśli użyto innej nazwy grupy zasobów, zastąp "myResourceGroup" również. Twój UPN zazwyczaj będzie w formacie adresu e-mail (np. username@domain.com).

Zaloguj się do maszyny wirtualnej

Aby zalogować się do maszyny wirtualnej, postępuj zgodnie z instrukcjami w Łączenie i logowanie się do maszyny wirtualnej Azure Windows lub Łączenie i logowanie się do maszyny wirtualnej z systemem Azure Linux.

Konfigurowanie aplikacji konsolowej

Utwórz aplikację konsolową i zainstaluj wymagane pakiety przy użyciu dotnet polecenia .

Instalowanie .NET Core

Aby zainstalować .NET Core, przejdź do strony .NET pobierania.

Tworzenie i uruchamianie przykładowej aplikacji .NET

Otwórz wiersz polecenia.

Można wyświetlić "Hello world" w konsoli, uruchamiając następujące komendy:

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

Instalowanie pakietu

W oknie konsoli zainstaluj bibliotekę klienta Azure Key Vault Secrets dla .NET:

dotnet add package Azure.Security.KeyVault.Secrets

W tym samouczku typu Szybki start musisz zainstalować następujący pakiet tożsamości, aby uwierzytelnić się w Azure Key Vault.

dotnet add package Azure.Identity

Edytowanie aplikacji konsolowej

Otwórz plik Program.cs i dodaj następujące pakiety:

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

Dodaj te wiersze, aktualizując identyfikator URI w celu odzwierciedlenia vaultUri magazynu kluczy. Poniższy kod używa "DefaultAzureCredential()" do uwierzytelniania w usłudze kluczy, wykorzystując token z tożsamości zarządzanej aplikacji do uwierzytelniania. Również stosuje strategię wykładniczego opóźniania przed ponownymi próbami, gdy magazyn kluczy jest ograniczany.

  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.");

        }
    }

Uprzątnij zasoby

Gdy maszyna wirtualna i magazyn kluczy nie będą już potrzebne, usuń je.

Dalsze kroki

REST API Azure Key Vault