Поделиться через


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

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

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

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

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

Перед началом работы ознакомьтесь c основными понятиями службы Key Vault.

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

Предпосылки

Для Windows, Mac и Linux:

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

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

Вход в Azure

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

az login

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

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

Кроме того, можно выполнять эти команды Azure CLI или Azure PowerShell.

Это важно

Каждое хранилище ключей должно иметь уникальное имя. В следующих примерах замените <your-unique-keyvault-name> именем своего хранилища ключей.

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

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

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

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

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

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

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

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

Виндоус Линукс
Azure CLI Azure CLI
PowerShell PowerShell
Портал Azure Портал Azure

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

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

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

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

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

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

Чтобы получить доступ к хранилищу ключей через контроль доступа на основе ролей (RBAC), сначала назначьте роль для учетной записи пользователя (UPN) с помощью команды Azure CLI az role assignment create.

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

Замените <upn>, <subscription-id>, <resource-group-name> и <your-unique-keyvault-name> на ваши фактические значения. Ваше Уникальное Имя Пользователя (UPN) обычно имеет формат адреса электронной почты (например, [email protected]).

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

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

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

Создайте консольное приложение и установите необходимые пакеты с помощью команды 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 для .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 = "<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.");

        }
    }

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

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

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