Учебник. Использование 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 или порталу 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 одним из следующих способов.
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), назначьте роль с помощью команды Azure CLI 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>"
Замените <app-id>
, <resource-group-name>
<subscription-id>
а <your-unique-keyvault-name>
также фактическими значениями. <app-id>
— это идентификатор приложения (клиента) зарегистрированного приложения в Microsoft Entra.
Вход в виртуальную машину
Чтобы войти в виртуальную машину, следуйте инструкциям по подключению или входу в виртуальную машину на платформе Windows или 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 для .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.");
}
}
Очистка ресурсов
Удалите виртуальную машину и хранилище ключей, если они больше не нужны.