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:
- Usługa Git
- Zestaw SDK platformy .NET Core 3.1 lub nowszy.
- Interfejs wiersza polecenia platformy Azure lub program Azure PowerShell
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.