Краткое руководство. Клиентская библиотека ключей 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. Установите клиентскую библиотеку ключей Azure Key Vault:

    pip install azure-keyvault-keys
    

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

  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_keys.py, который содержит этот код.

import os
from azure.keyvault.keys import KeyClient
from azure.identity import DefaultAzureCredential

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

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

keyName = input("Input a name for your key > ")

print(f"Creating a key in {keyVaultName} called '{keyName}' ...")

rsa_key = client.create_rsa_key(keyName, size=2048)

print(" done.")

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

retrieved_key = client.get_key(keyName)

print(f"Key with name '{retrieved_key.name}' was found.")
print(f"Deleting your key from {keyVaultName} ...")

poller = client.begin_delete_key(keyName)
deleted_key = poller.result()

print(" done.")

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

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

python kv_keys.py

Повторное выполнение кода с тем же именем ключа может привести к ошибке "(Конфликт) Имя> ключа <в настоящее время находится в удаленном, но восстанавливаемом состоянии". Используйте другое имя ключа.

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

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

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

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

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

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

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

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

rsa_key = client.create_rsa_key(keyName, size=2048)

Кроме того, можно использовать метод create_key или create_ec_key.

Вызов метода create создает вызов REST API Azure для хранилища ключей.

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

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

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

retrieved_key = client.get_key(keyName)

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

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

Чтобы удалить ключ, используйте метод begin_delete_key:

poller = client.begin_delete_key(keyName)
deleted_key = poller.result()

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

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

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

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

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

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

az group delete --resource-group myResourceGroup

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