Быстрый старт: Клиентская библиотека для ключей Azure Key Vault для .NET

Начало работы с клиентской библиотекой ключей Azure Key Vault для .NET. Azure Key Vault — это облачная служба, которая предоставляет защищенное хранилище для ключей шифрования. Вы можете безопасно хранить ключи шифрования, пароли, сертификаты и другие секреты. Создать хранилища Azure Key Vault и управлять ими можно на портале Azure. Из этого краткого руководства вы узнаете, как создавать, извлекать и удалять ключи в Azure Key Vault с помощью клиентской библиотеки ключей .NET.

Ресурсы клиентской библиотеки ключей Key Vault:

Справочная документация по API | Исходный код библиотеки | Пакет (NuGet).

Дополнительные сведения о Key Vault и ключах см. в следующих статьях:

Требования

В этом кратком руководстве используется dotnet и Azure CLI

Настройка

В этом кратком руководстве используется библиотека Azure Identity вместе с Azure CLI для аутентификации пользователя в сервисах Azure. Разработчики также могут использовать Visual Studio или Visual Studio Code для аутентификации своих вызовов. Для получения дополнительной информации см. статью Аутентификация клиента с помощью клиентской библиотеки Azure Identity.

Вход в Azure

  1. Запустите команду login.

    az login
    

    Если CLI может открыть ваш браузер по умолчанию, он откроет его и загрузит страницу входа в Azure.

    В противном случае откройте страницу в браузере по адресу https://aka.ms/devicelogin и введите код авторизации, отображаемый в вашем терминале.

  2. Выполните вход в браузере с помощью учетных данных.

Предоставление доступа к хранилищу ключей

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

az role assignment create --role "Key Vault Crypto Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"

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

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

  1. В командной оболочке выполните следующую команду, чтобы создать проект с именем key-vault-console-app.

    dotnet new console --name key-vault-console-app
    
  2. Перейдите в недавно созданный каталог key-vault-console-app и выполните следующую команду, чтобы собрать проект.

    dotnet build
    

    Выходные данные сборки не должны содержать предупреждений или ошибок.

    Build succeeded.
     0 Warning(s)
     0 Error(s)
    

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

Из командной оболочки установите клиентскую библиотеку ключей Azure Key Vault для .NET:

dotnet add package Azure.Security.KeyVault.Keys

Для этого краткого старта вам также необходимо установить клиентскую библиотеку удостоверений Azure.

dotnet add package Azure.Identity

Настройка переменных среды

Это приложение использует имя хранилища ключей в качестве переменной окружения с именем KEY_VAULT_NAME.

Windows

set KEY_VAULT_NAME=<vault-name>

Windows PowerShell

$Env:KEY_VAULT_NAME="<vault-name>"

macOS или Linux

export KEY_VAULT_NAME=<vault-name>

Объектная модель

Клиентская библиотека ключей Azure Key Vault для .NET позволяет управлять ключами. В разделе Примеры кода показано, как создать клиент, а также установить, получить и удалить ключ.

Примеры кода

Добавление директив

Добавьте следующие директивы в начало Program.cs.

using System;
using Azure.Identity;
using Azure.Security.KeyVault.Keys;

Аутентификация и создание клиента

Запросы приложений к большинству служб Azure должны быть авторизованы. Использование класса DefaultAzureCredential, предоставленного клиентской библиотекой Azure Identity, является рекомендуемым подходом для реализации подключений без паролей к службам Azure в вашем коде. DefaultAzureCredential поддерживает несколько способов проверки подлинности и определяет, какой из них следует использовать в среде выполнения. Такой подход позволяет приложению использовать различные способы проверки подлинности в разных средах (локальной и рабочей) без реализации кода для конкретной среды.

В этом кратком руководстве DefaultAzureCredential аутентифицируется в хранилище ключей с помощью учетных данных локального пользователя разработки, вошедшего в Azure CLI. При развертывании приложения в Azure один и тот же DefaultAzureCredential может автоматически обнаруживать и использовать управляемое удостоверение, назначенное Службе приложений, виртуальной машине или другим службам. Дополнительные сведения см. в статье Что такое управляемые удостоверения для ресурсов Azure?.

В этом примере имя вашего хранилища ключей расширяется до URI хранилища ключей в формате https://<vault-name>.vault.azure.net. Дополнительные сведения об аутентификации в хранилище ключей см. в руководстве для разработчиков.

var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = $"https://{keyVaultName}.vault.azure.net";

var client = new KeyClient(new Uri(kvUri), new DefaultAzureCredential());

Сохранение ключа

Для этой задачи используйте метод CreateKeyAsync. Параметры метода принимают имя ключа и тип ключа.

var key = await client.CreateKeyAsync("myKey", KeyType.Rsa);

Примечание.

Если имя ключа существует, этот код создаст новую версию этого ключа.

Получение ключа

Теперь вы можете получить ранее созданный ключ с помощью метода GetKeyAsync.

var key = await client.GetKeyAsync("myKey");

Удаление ключа

Наконец, давайте удалим ключ и очистим его из вашего хранилища ключей, с помощью методов StartDeleteKeyAsync и PurgeDeletedKeyAsync.

var operation = await client.StartDeleteKeyAsync("myKey");

// You only need to wait for completion if you want to purge or recover the key.
await operation.WaitForCompletionAsync();

var key = operation.Value;
await client.PurgeDeletedKeyAsync("myKey");

Пример кода

Измените консольное приложение .NET для взаимодействия с Key Vault, выполнив следующие действия:

  • Замените код файла Program.cs на код, приведенный ниже:

    using System;
    using System.Threading.Tasks;
    using Azure.Identity;
    using Azure.Security.KeyVault.Keys;
    
    namespace key_vault_console_app
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                const string keyName = "myKey";
                var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
                var kvUri = $"https://{keyVaultName}.vault.azure.net";
    
                var client = new KeyClient(new Uri(kvUri), new DefaultAzureCredential());
    
                Console.Write($"Creating a key in {keyVaultName} called '{keyName}' ...");
                var createdKey = await client.CreateKeyAsync(keyName, KeyType.Rsa);
                Console.WriteLine("done.");
    
                Console.WriteLine($"Retrieving your key from {keyVaultName}.");
                var key = await client.GetKeyAsync(keyName);
                Console.WriteLine($"Your key version is '{key.Value.Properties.Version}'.");
    
                Console.Write($"Deleting your key from {keyVaultName} ...");
                var deleteOperation = await client.StartDeleteKeyAsync(keyName);
                // You only need to wait for completion if you want to purge or recover the key.
                await deleteOperation.WaitForCompletionAsync();
                Console.WriteLine("done.");
    
                Console.Write($"Purging your key from {keyVaultName} ...");
                await client.PurgeDeletedKeyAsync(keyName);
                Console.WriteLine(" done.");
            }
        }
    }
    

Тестирование и проверка

  1. Чтобы создать проект, выполните указанную ниже команду.

    dotnet build
    
  2. Выполните следующую команду для запуска этого приложения.

    dotnet run
    
  3. При появлении запроса введите значение секрета. Например, mySecretPassword.

    Отображаются выходные данные, аналогичные следующим:

    Creating a key in mykeyvault called 'myKey' ... done.
    Retrieving your key from mykeyvault.
    Your key version is '8532359bced24e4bb2525f2d2050738a'.
    Deleting your key from jl-kv ... done
    Purging your key from <vault-name> ... done.   
    

Следующие шаги

Из этого краткого руководства вы узнали, как создать хранилище ключей, сохранить в нем ключ и извлечь его.

Дополнительные сведения об Azure Key Vault и о том, как интегрировать его с вашими приложениями, см. в следующих статьях: