Краткое руководство. Клиентская библиотека ключей Azure Key Vault для Python
Приступите к работе с клиентской библиотекой Azure Key Vault для Python. Выполните приведенные здесь действия, чтобы установить пакет и протестировать пример кода для выполнения базовых задач. Используя Key Vault для хранения криптографических ключей, вам не надо сохранять их в коде. Это повышает безопасность приложения.
Справочная документация по API | Исходный код библиотеки | Пакет (Python Package Index)
Необходимые компоненты
- Подписка Azure — создайте бесплатную учетную запись.
- Python 3.7+
- Azure CLI
В этом кратком руководстве предполагается, что вы используете Azure CLI или Azure PowerShell в окне терминала Linux.
Настройка локальной среды
В этом кратком руководстве используется библиотека удостоверений Azure с Azure CLI или Azure PowerShell для проверки подлинности пользователя в службах Azure. Разработчики также могут использовать Visual Studio или Visual Studio Code для проверки подлинности своих вызовов. Дополнительные сведения см. в статье Проверка подлинности клиента с использованием клиентской библиотеки удостоверений Azure.
Вход в Azure
Выполните команду
login
.az login
Если в CLI можно запустить браузер по умолчанию, откроется браузер со страницей входа.
В противном случае самостоятельно откройте в браузере страницу https://aka.ms/devicelogin и введите код авторизации, отображаемый в терминале.
Выполните вход в браузере с помощью учетных данных.
Установка пакетов
В терминале или в командной строке создайте подходящую папку проекта, а затем создайте и активируйте виртуальную среду Python, как описано в разделе Использование виртуальных окружений Python.
Установите библиотеку удостоверений Microsoft Entra:
pip install azure-identity
Установите клиентскую библиотеку ключей Azure Key Vault:
pip install azure-keyvault-keys
Создание группы ресурсов и хранилища ключей
Для создания группы ресурсов используйте команду
az group create
:az group create --name myResourceGroup --location eastus
При необходимости вы можете изменить расположение eastus на ближайшее к вам.
Для создания хранилища ключей используйте
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), назначьте роль имени участника-пользователя (UPN) с помощью команды Azure CLI az role assignment create.
az role assignment create --role "Key Vault Crypto 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>> фактическими значениями.< Имя участника-участника обычно будет иметь формат адреса электронной почты (например, [email protected]).
Создание примера кода
Клиентская библиотека ключей 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