Краткое руководство. Клиентская библиотека сертификатов Azure Key Vault для .NET
Приступите к работе с клиентской библиотекой сертификатов Azure Key Vault для .NET. Azure Key Vault — это облачная служба, которая предоставляет защищенное хранилище для сертификатов. Вы можете безопасно хранить ключи, пароли, сертификаты и другие секреты. Создать хранилища Azure Key Vault и управлять ими можно на портале Azure. Из этого краткого руководства вы узнаете, как создавать, извлекать и удалять сертификаты из хранилища ключей Azure с помощью клиентской библиотеки .NET.
Ресурсы клиентской библиотеки Key Vault:
Справочная документация по API | Исходный код библиотеки | Пакет (NuGet).
Дополнительные сведения о Key Vault и сертификатах см. в следующих статьях:
- Подписка Azure — создайте бесплатную учетную запись.
- Пакет SDK для .NET 6 или более поздней версии
- Azure CLI
- Хранилище Key Vault можно создать с помощью портала Azure, Azure CLI или Azure PowerShell.
Это краткое руководство используется dotnet
и Azure CLI.
В этом кратком руководстве используется библиотека удостоверений Azure и Azure CLI для проверки подлинности пользователя в службах Azure. Разработчики также могут использовать Visual Studio или Visual Studio Code для проверки подлинности своих вызовов. Дополнительные сведения см. в статье Проверка подлинности клиента с помощью клиентской библиотеки удостоверений Azure.
Выполните команду
login
.az login
Если в CLI можно запустить браузер по умолчанию, откроется браузер со страницей входа.
В противном случае самостоятельно откройте в браузере страницу https://aka.ms/devicelogin и введите код авторизации, отображаемый в терминале.
Выполните вход в браузере с помощью учетных данных.
Чтобы получить разрешения для хранилища ключей с помощью контроль доступа на основе ролей (RBAC), назначьте роль имени участника-пользователя (UPN) с помощью команды Azure CLI az role assignment create.
az role assignment create --role "Key Vault Certificates Officer" --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>> фактическими значениями.< Имя участника-участника обычно будет иметь формат адреса электронной почты (например, username@domain.com).
В командной оболочке выполните следующую команду, чтобы создать проект с именем
key-vault-console-app
.dotnet new console --name key-vault-console-app
Перейдите ко вновь созданному каталогу key-store-console-app и выполните следующую команду, чтобы начать сборку проекта.
dotnet build
Выходные данные сборки не должны содержать предупреждений или ошибок.
Build succeeded. 0 Warning(s) 0 Error(s)
Из командной оболочки установите клиентскую библиотеку сертификатов Azure Key Vault для .NET:
dotnet add package Azure.Security.KeyVault.Certificates
В этом кратком руководстве также необходимо установить клиентскую библиотеку удостоверений Azure:
dotnet add package Azure.Identity
Приложение получает имя хранилища ключей из переменной KEY_VAULT_NAME
среды.
Windows
set KEY_VAULT_NAME=<your-key-vault-name>
Windows PowerShell
$Env:KEY_VAULT_NAME="<your-key-vault-name>"
macOS или Linux
export KEY_VAULT_NAME=<your-key-vault-name>
Клиентская библиотека сертификатов Azure Key Vault для .NET позволяет управлять сертификатами. В разделе Примеры кода показано, как создать клиент, а также как указать, получить и удалить сертификат.
Добавьте следующие директивы в начало Program.cs.
using System;
using Azure.Identity;
using Azure.Security.KeyVault.Certificates;
Запросы приложений к большинству служб Azure должны быть авторизованы. Использование класса DefaultAzureCredential, предоставленного клиентской библиотекой удостоверений Azure, является рекомендуемым подходом для реализации бессерверных подключений к службам Azure в коде. DefaultAzureCredential
поддерживает несколько способов проверки подлинности и определяет, какой из них следует использовать в среде выполнения. Такой подход позволяет приложению использовать различные способы проверки подлинности в разных средах (локальной и рабочей) без реализации кода для конкретной среды.
В этом кратком руководстве DefaultAzureCredential
выполняется проверка подлинности в хранилище ключей с помощью учетных данных локального пользователя разработки, вошедшего в Azure CLI. При развертывании приложения в Azure тот же DefaultAzureCredential
код может автоматически обнаруживать и использовать управляемое удостоверение, назначенное Служба приложений, виртуальной машине или другим службам. Дополнительные сведения см. в статье Что такое управляемые удостоверения для ресурсов Azure?.
В этом примере имя хранилища ключей расширяется в URI хранилища ключей в формате https://<your-key-vault-name>.vault.azure.net
. Дополнительные сведения о проверке подлинности в хранилище ключей см. в руководстве для разработчиков.
string keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = "https://" + keyVaultName + ".vault.azure.net";
var client = new CertificateClient(new Uri(kvUri), new DefaultAzureCredential());
В этом примере для удобства можно использовать самозаверяющий сертификат с политикой выдачи по умолчанию. Для этой задачи используйте метод StartCreateCertificateAsync. Параметры метода принимают имя и политику сертификата.
var operation = await client.StartCreateCertificateAsync("myCertificate", CertificatePolicy.Default);
var certificate = await operation.WaitForCompletionAsync();
Примечание
Если сертификат с таким именем уже существует, выполните приведенный выше код, чтобы создать версию этого сертификата.
Теперь вы можете получить ранее созданный сертификат с помощью метода GetCertificateAsync.
var certificate = await client.GetCertificateAsync("myCertificate");
Теперь удалите сертификат из хранилища ключей и очистите его с помощью методов StartDeleteCertificateAsync и PurgeDeletedCertificateAsync.
var operation = await client.StartDeleteCertificateAsync("myCertificate");
// You only need to wait for completion if you want to purge or recover the certificate.
await operation.WaitForCompletionAsync();
var certificate = operation.Value;
await client.PurgeDeletedCertificateAsync("myCertificate");
Измените консольное приложение .NET для взаимодействия с Key Vault, выполнив следующие действия:
Замените код файла Program.cs на код, приведенный ниже:
using System; using System.Threading.Tasks; using Azure.Identity; using Azure.Security.KeyVault.Certificates; namespace key_vault_console_app { class Program { static async Task Main(string[] args) { const string certificateName = "myCertificate"; var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME"); var kvUri = $"https://{keyVaultName}.vault.azure.net"; var client = new CertificateClient(new Uri(kvUri), new DefaultAzureCredential()); Console.Write($"Creating a certificate in {keyVaultName} called '{certificateName}' ..."); CertificateOperation operation = await client.StartCreateCertificateAsync(certificateName, CertificatePolicy.Default); await operation.WaitForCompletionAsync(); Console.WriteLine(" done."); Console.WriteLine($"Retrieving your certificate from {keyVaultName}."); var certificate = await client.GetCertificateAsync(certificateName); Console.WriteLine($"Your certificate version is '{certificate.Value.Properties.Version}'."); Console.Write($"Deleting your certificate from {keyVaultName} ..."); DeleteCertificateOperation deleteOperation = await client.StartDeleteCertificateAsync(certificateName); // You only need to wait for completion if you want to purge or recover the certificate. await deleteOperation.WaitForCompletionAsync(); Console.WriteLine(" done."); Console.Write($"Purging your certificate from {keyVaultName} ..."); await client.PurgeDeletedCertificateAsync(certificateName); Console.WriteLine(" done."); } } }
Чтобы создать проект, выполните указанную ниже команду.
dotnet build
Отображаются выходные данные, аналогичные следующим:
Creating a certificate in mykeyvault called 'myCertificate' ... done.
Retrieving your certificate from mykeyvault.
Your certificate version is '8532359bced24e4bb2525f2d2050738a'.
Deleting your certificate from mykeyvault ... done
Purging your certificate from mykeyvault ... done
При работе с этим кратким руководством вы создали хранилище ключей, сохранили в нем сертификат и извлекли его.
Дополнительные сведения об Azure Key Vault и о том, как интегрировать его с вашими приложениями, см. в следующих статьях: