Руководство. Использование Azure Key Vault с виртуальной машиной в .NET

Azure Key Vault помогает защитить такие секреты, как ключи API, строки подключения к базе данных, необходимые для доступа к приложениям, службам и ИТ-ресурсам.

Из этого руководства вы узнаете, как получить консольное приложение для чтения сведений из Azure Key Vault. Приложение будет использовать управляемое удостоверение виртуальной машины для проверки подлинности Key Vault.

В этом руководстве описаны следующие процедуры.

  • Создайте группу ресурсов.
  • Создайте хранилище ключей.
  • Добавьте секрет в хранилище ключей.
  • получение секрета из хранилища ключей;
  • Создайте виртуальную машину Azure.
  • Включить управляемое удостоверение для виртуальной машины.
  • Назначение разрешений для идентификатора виртуальной машины.

Прежде чем начать, прочитайте Key Vault основные понятия.

Если у вас нет подписки Azure, создайте учетную запись free.

Предпосылки

Для Windows, Mac и Linux:

Создание ресурсов и назначение разрешений

Перед началом программирования необходимо создать некоторые ресурсы, поместить секрет в хранилище ключей и назначить разрешения.

Вход в Azure

Чтобы войти в Azure, выполните следующую команду:

az login

Создание группы ресурсов и хранилища ключей

В этом кратком руководстве используется предварительно созданное хранилище ключей Azure. Вы можете создать хранилище ключей, выполнив действия, описанные в следующих кратких руководствах.

В качестве альтернативы, можно выполнить команды Azure CLI или Azure PowerShell.

Это важно

Каждое хранилище ключей должно иметь уникальное имя. Замените <vault-name> именем хранилища ключей в следующих примерах.

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

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

Заполните ваше хранилище ключей секретом

Мы создадим секрет с именем mySecret и значением Success!. Секрет может быть паролем, SQL строка подключения или любой другой информацией, необходимой для обеспечения безопасности и доступности приложения.

Чтобы добавить секрет в новое созданное хранилище ключей, используйте следующую команду:

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

Создание виртуальной машины

Создайте виртуальную машину Windows или Linux с помощью одного из следующих методов:

Windows Линукс
Azure CLI Azure CLI
PowerShell PowerShell
портал Azure портал Azure

Назначьте удостоверение виртуальной машине

Создайте назначаемое системой удостоверение для виртуальной машины с помощью следующего примера:

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

Обратите внимание на присвоенный системой идентификатор, который отображается в следующем коде. Выходные данные приведенной выше команды выглядят следующим образом.

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

Назначение разрешения для идентификатора виртуальной машины

Чтобы получить разрешения для хранилища ключей через Role-Based контроль доступа (RBAC), назначьте роль вашему "User Principal Name" (UPN) с помощью команды 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>"

Замените <upn>, <subscription-id>а <vault-name> также фактическими значениями. Если вы использовали другое имя группы ресурсов, замените myResourceGroup. Ваше Уникальное Имя Пользователя (UPN) обычно имеет формат адреса электронной почты (например, username@domain.com).

Вход в виртуальную машину

Чтобы войти в виртуальную машину, следуйте инструкциям в Connect и войдите в виртуальную машину Azure Windows или Connect и войдите на виртуальную машину Azure Linux.

Настройка консольного приложения

Создайте консольное приложение и установите необходимые пакеты с помощью команды dotnet.

Установка .NET Core

Чтобы установить .NET Core, перейдите на страницу загрузки .NET.

Создание и запуск примера приложения .NET

Откройте командную строку.

Вы можете распечатать "Hello World" в консоли, выполнив следующие команды:

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

Установите пакет

В окне консоли установите клиентскую библиотеку Azure Key Vault Secrets для .NET:

dotnet add package Azure.Security.KeyVault.Secrets

Для этого краткого руководства необходимо установить следующий пакет удостоверений, чтобы аутентифицироваться в Azure Key Vault.

dotnet add package Azure.Identity

Изменение консольного приложения

Откройте файл Program.cs и добавьте следующие пакеты.

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

Добавьте эти строки, обновите URI для отражения vaultUri хранилища ключей. Для проверки подлинности в хранилище ключей в следующем примере кода используется функция DefaultAzureCredential(), которая использует токен из управляемого удостоверения приложения. В ней также реализована экспоненциальная задержка для повторных попыток на случай регулирования запросов к хранилищу ключей.

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

        }
    }

Очистите ресурсы

Удалите виртуальную машину и хранилище ключей, если они больше не нужны.

Дальнейшие шаги