Краткое руководство по использованию клиентской библиотеки сертификатов Azure Key Vault для Python

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

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

Необходимые компоненты

В этом кратком руководстве предполагается, что вы используете Azure CLI или Azure PowerShell в окне терминала Linux.

Настройка локальной среды

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

Вход в Azure

  1. Выполните команду login.

    az login
    

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

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

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

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

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

  2. Установите библиотеку удостоверений Microsoft Entra:

    pip install azure.identity
    
  3. Установите клиентскую библиотеку сертификатов Key Vault:

    pip install azure-keyvault-certificates
    

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

  1. Для создания группы ресурсов используйте команду az group create:

    az group create --name myResourceGroup --location eastus
    

    При необходимости вы можете изменить расположение eastus на ближайшее к вам.

  2. Для создания хранилища ключей используйте az keyvault create:

    az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
    

    Замените <your-unique-keyvault-name> именем, уникальным в пределах Azure. Обычно используется личное имя или название организации, а также числа и идентификаторы.

Задание переменной среды KEY_VAULT_NAME

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

export KEY_VAULT_NAME=<your-unique-keyvault-name>

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

Чтобы предоставить приложению разрешения для хранилища ключей с помощью контроль доступа на основе ролей (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>, subscription-id>, <<resource-group-name и <your-unique-keyvault-name>> фактическими значениями.< <Идентификатор приложения — это идентификатор> приложения (клиента) зарегистрированного приложения в Azure AD.

Создание примера кода

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

Создайте файл с именем kv_certificates.py, который содержит этот код.

import os
from azure.keyvault.certificates import CertificateClient, CertificatePolicy
from azure.identity import DefaultAzureCredential

keyVaultName = os.environ["KEY_VAULT_NAME"]
KVUri = "https://" + keyVaultName + ".vault.azure.net"

credential = DefaultAzureCredential()
client = CertificateClient(vault_url=KVUri, credential=credential)

certificateName = input("Input a name for your certificate > ")

print(f"Creating a certificate in {keyVaultName} called '{certificateName}' ...")

policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate(certificate_name=certificateName, policy=policy)
certificate = poller.result()

print(" done.")

print(f"Retrieving your certificate from {keyVaultName}.")

retrieved_certificate = client.get_certificate(certificateName)

print(f"Certificate with name '{retrieved_certificate.name}' was found'.")
print(f"Deleting your certificate from {keyVaultName} ...")

poller = client.begin_delete_certificate(certificateName)
deleted_certificate = poller.result()

print(" done.")

Выполнение кода

Убедитесь, что код из предыдущего раздела находится в файле с именем kv_certificates.py. Затем выполните следующую команду, чтобы запустить код:

python kv_certificates.py
  • При возникновении ошибок разрешений убедитесь, что вы выполнили команду az keyvault set-policy или Set-AzKeyVaultAccessPolicy.
  • Повторное выполнение кода с тем же именем ключа может привести к ошибке "(Конфликт) Имя> сертификата <в настоящее время находится в удаленном, но восстанавливаемом состоянии". Используйте другое имя ключа.

Сведения о коде

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

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

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

В примере кода имя хранилища ключей расширяется в URI хранилища ключей в формате https://\<your-key-vault-name>.vault.azure.net.

credential = DefaultAzureCredential()
client = CertificateClient(vault_url=KVUri, credential=credential)

Сохранение сертификата

После получения клиентского объекта для хранилища ключей можно создать сертификат с помощью метода begin_create_certificate:

policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate(certificate_name=certificateName, policy=policy)
certificate = poller.result()

В этом случае для сертификата требуется политика, которая получена с помощью метода CertificatePolicy.get_default.

Вызов метода begin_create_certificate создает асинхронный вызов REST API Azure для хранилища ключей. Асинхронный вызов возвращает объект модуля опроса. Чтобы дождаться результата операции, вызовите метод result модуля опроса.

Когда Azure обрабатывает запрос, он проверяет подлинность удостоверения вызывающего объекта (субъекта-службы) с помощью объекта учетных данных, предоставленного клиенту.

Получение сертификата

Чтобы прочитать сертификат из Key Vault, используйте метод get_certificate:

retrieved_certificate = client.get_certificate(certificateName)

Вы также можете проверить, задан ли сертификат с помощью команды Azure CLI az keyvault certificate show или командлета Azure PowerShell Get-AzKeyVaultCertificate

Удаление сертификата

Чтобы удалить сертификат, используйте метод begin_delete_certificate:

poller = client.begin_delete_certificate(certificateName)
deleted_certificate = poller.result()

Метод begin_delete_certificate является асинхронным и возвращает объект модуля опроса. При вызове result модуля опроса метод ожидает его завершения.

Вы можете убедиться, что сертификат удален с помощью команды Azure CLI az keyvault certificate show или командлета Azure PowerShell Get-AzKeyVaultCertificate.

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

Очистка ресурсов

Если вы хотите также поэкспериментировать с секретами и ключами, можно повторно использовать Key Vault, созданный в этой статье.

В противном случае после завершения работы с созданными в этой статье ресурсами используйте следующую команду, чтобы удалить группу ресурсов и все содержащиеся в ней ресурсы:

az group delete --resource-group myResourceGroup

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