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 po prostu uruchomić poniższe 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"

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

Przypisz wcześniej utworzone uprawnienia tożsamości do magazynu kluczy za pomocą polecenia az keyvault set-policy :

az keyvault set-policy --name '<your-unique-key-vault-name>' --object-id <VMSystemAssignedIdentity> --secret-permissions  get list set delete

Zaloguj się do maszyny wirtualnej

Aby zalogować się do maszyny wirtualnej, postępuj zgodnie z instrukcjami w Połączenie i zaloguj się do maszyny wirtualnej z systemem Windows platformy Azure lub Połączenie i zaloguj 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