Samouczek: używanie usługi Azure Key Vault z maszyną wirtualną na platformie .NET

Usługa Azure Key Vault pomaga chronić wpisy tajne, takie jak klucze interfejsu API, baza danych parametry połączenia, które są 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 usługi Azure Key Vault. Aplikacja będzie używać tożsamości zarządzanej maszyny wirtualnej do uwierzytelniania w usłudze Key Vault.

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

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

Przed rozpoczęciem zapoznaj się z podstawowymi pojęciami dotyczącymi usługi Key Vault.

Jeśli nie masz subskrypcji platformy Azure, utwórz bezpłatne konto.

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.

Logowanie się do platformy Azure

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

Tworzenie grupy zasobów i magazynu kluczy

W tym przewodniku Szybki start jest używany wstępnie utworzony magazyn kluczy platformy Azure. Magazyn kluczy można utworzyć, wykonując kroki opisane w przewodniku Szybki start interfejsu wiersza polecenia platformy Azure, przewodniku Szybki start dla programu Azure PowerShell lub przewodniku Szybki start w witrynie Azure Portal.

Alternatywnie możesz uruchomić te polecenia interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell.

Ważne

Każdy magazyn kluczy musi mieć unikatową nazwę. Zastąp <ciąg your-unique-keyvault-name> nazwą magazynu kluczy w poniższych przykładach.

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

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

Wypełnianie magazynu kluczy wpisem tajnym

Utwórzmy wpis tajny o nazwie mySecret z wartością Success!. Wpis tajny może być hasłem, parametry połączenia SQL lub innymi informacjami, które należy zapewnić bezpieczeństwo i dostęp do aplikacji.

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

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

Tworzenie maszyny wirtualnej

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

Windows Linux
Interfejs wiersza polecenia platformy Azure Interfejs wiersza polecenia platformy Azure
Program PowerShell Program PowerShell
Witryna Azure Portal Witryna Azure Portal

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 <NameOfYourVirtualMachine> --resource-group <YourResourceGroupName>

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 udzielić aplikacji uprawnień do magazynu kluczy za pomocą kontroli dostępu opartej na rolach (RBAC), przypisz rolę przy użyciu polecenia interfejsu wiersza polecenia platformy Azure az role assignment create.

az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"

Zastąp <app-id>wartości , <subscription-id>i <resource-group-name> <your-unique-keyvault-name> wartościami rzeczywistymi. <app-id> to identyfikator aplikacji (klienta) zarejestrowanej aplikacji w firmie Microsoft Entra.

Zaloguj się do maszyny wirtualnej

Aby zalogować się do maszyny wirtualnej, postępuj zgodnie z instrukcjami w temacie Connect and sign in an Azure Windows virtual machine (Nawiązywanie połączenia z maszyną wirtualną z systemem Windows platformy Azure) lub Connect and sign in an Azure Linux virtual machine (Nawiązywanie połączenia i logowanie się do maszyny wirtualnej z systemem Linux platformy Azure).

Konfigurowanie aplikacji konsolowej

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

Zainstaluj program .NET Core

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

Tworzenie i uruchamianie przykładowej aplikacji .NET

Otwórz wiersz polecenia.

Polecenie "Hello World" można wydrukować w konsoli, uruchamiając następujące polecenia:

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

Instalowanie pakietu

W oknie konsoli zainstaluj bibliotekę klienta Wpisy tajne usługi Azure Key Vault dla platformy .NET:

dotnet add package Azure.Security.KeyVault.Secrets

W tym przewodniku Szybki start należy zainstalować następujący pakiet tożsamości w celu uwierzytelnienia w usłudze 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 wartości "DefaultAzureCredential()" do uwierzytelniania w magazynie kluczy, który używa tokenu z tożsamości zarządzanej aplikacji do uwierzytelniania. Używa również wycofywania wykładniczego w przypadku ponawiania prób w przypadku ograniczania magazynu kluczy.

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

        }
    }

Czyszczenie zasobów

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

Następne kroki