Краткое руководство по использованию клиентской библиотеки секретов Azure Key Vault для Python
Начало работы с клиентской библиотекой секретов Azure Key Vault для Python. Выполните приведенные здесь действия, чтобы установить пакет и протестировать пример кода для выполнения базовых задач. Используя Key Vault для хранения секретов, вам не надо сохранять их в коде. Это повышает безопасность приложения.
Справочная документация по API | Исходный код библиотеки | Пакет (Python Package Index)
Необходимые компоненты
- Подписка Azure — создайте бесплатную учетную запись.
- Python версии 3.7 и выше.
- Azure CLI или Azure PowerShell.
В этом кратком руководстве предполагается, что вы используете Azure CLI или Azure PowerShell в окне терминала Linux.
Настройка локальной среды
В этом кратком руководстве используется библиотека удостоверений Azure с Azure CLI или Azure PowerShell для аутентификации пользователя в службах Azure. Разработчики также могут использовать Visual Studio или Visual Studio Code для проверки подлинности своих вызовов. Дополнительные сведения см. в статье Проверка подлинности клиента с помощью клиентской библиотеки удостоверений Azure.
Вход в Azure
Выполните команду
az login
.az login
Если в CLI можно запустить браузер по умолчанию, откроется браузер со страницей входа.
В противном случае самостоятельно откройте в браузере страницу https://aka.ms/devicelogin и введите код авторизации, отображаемый в терминале.
Выполните вход в браузере с помощью учетных данных.
Установка пакетов
В терминале или в командной строке создайте подходящую папку проекта, а затем создайте и активируйте виртуальную среду Python, как описано в разделе Использование виртуальных окружений Python.
Установите библиотеку удостоверений Microsoft Entra:
pip install azure-identity
Установите библиотеку секретов Azure Key Vault:
pip install azure-keyvault-secrets
Создание группы ресурсов и хранилища ключей
Для создания группы ресурсов используйте команду
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 Secrets 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).
Создание примера кода
Клиентская библиотека секретов Azure Key Vault для Python позволяет управлять секретами. В приведенном примере кода показано, как создать клиент, а также как задать, извлечь и удалить секрет.
Создайте файл с именем kv_secrets.py, который содержит этот код.
import os
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential
keyVaultName = os.environ["KEY_VAULT_NAME"]
KVUri = f"https://{keyVaultName}.vault.azure.net"
credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)
secretName = input("Input a name for your secret > ")
secretValue = input("Input a value for your secret > ")
print(f"Creating a secret in {keyVaultName} called '{secretName}' with the value '{secretValue}' ...")
client.set_secret(secretName, secretValue)
print(" done.")
print(f"Retrieving your secret from {keyVaultName}.")
retrieved_secret = client.get_secret(secretName)
print(f"Your secret is '{retrieved_secret.value}'.")
print(f"Deleting your secret from {keyVaultName} ...")
poller = client.begin_delete_secret(secretName)
deleted_secret = poller.result()
print(" done.")
Выполнение кода
Убедитесь, что код из предыдущего раздела находится в файле с именем kv_secrets.py. Затем выполните следующую команду, чтобы запустить код:
python kv_secrets.py
- При возникновении ошибок разрешений убедитесь, что вы выполнили команду
az keyvault set-policy
илиSet-AzKeyVaultAccessPolicy
. - Повторное выполнение кода с тем же именем секрета может привести к ошибке "(Конфликт) Секретное <имя> в настоящее время находится в удаленном, но восстанавливаемом состоянии". Используйте другое имя секрета.
Сведения о коде
Аутентификация и создание клиента
Запросы приложений к большинству служб Azure должны быть авторизованы. Использование класса DefaultAzureCredential, предоставленного клиентской библиотекой удостоверений Azure, является рекомендуемым подходом для реализации бессерверных подключений к службам Azure в коде. DefaultAzureCredential
поддерживает несколько способов проверки подлинности и определяет, какой из них следует использовать в среде выполнения. Такой подход позволяет приложению использовать различные способы проверки подлинности в разных средах (локальной и рабочей) без реализации кода для конкретной среды.
В этом кратком руководстве DefaultAzureCredential
выполняется проверка подлинности в хранилище ключей с помощью учетных данных локального пользователя разработки, вошедшего в Azure CLI. При развертывании приложения в Azure тот же DefaultAzureCredential
код может автоматически обнаруживать и использовать управляемое удостоверение, назначенное Служба приложений, виртуальной машине или другим службам. Дополнительные сведения см. в статье Что такое управляемые удостоверения для ресурсов Azure?.
В примере кода имя хранилища ключей расширяется с помощью значения KVUri
переменной в формате "https://< your-key-vault-name.vault.azure.net>".
credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)
Сохранение секрета
После получения клиентского объекта для хранилища ключей можно сохранить секрет с помощью метода set_secret:
client.set_secret(secretName, secretValue)
Вызов set_secret
создает вызов REST API Azure для хранилища ключей.
Когда Azure обрабатывает запрос, он проверяет подлинность удостоверения вызывающего объекта (субъекта-службы) с помощью объекта учетных данных, предоставленного клиенту.
Получение секрета
Чтобы считать секрет из Key Vault, используйте метод get_secret:
retrieved_secret = client.get_secret(secretName)
Значение секрета содержится в retrieved_secret.value
.
Вы также можете получить секрет с помощью команды Azure CLI az keyvault secret show или командлета Azure PowerShell Get-AzKeyVaultSecret.
Удаление секрета.
Чтобы удалить секрет, используйте метод begin_delete_secret:
poller = client.begin_delete_secret(secretName)
deleted_secret = poller.result()
Метод begin_delete_secret
является асинхронным и возвращает объект модуля опроса. При вызове result
модуля опроса метод ожидает его завершения.
Вы можете убедиться, что секрет был удален с помощью команды Azure CLI az keyvault secret show или командлета Azure PowerShell Get-AzKeyVaultSecret.
После удаления секрет остается в удаленном, но восстанавливаемом состоянии в течение некоторого времени. При повторном выполнении кода используйте другое имя секрета.
Очистка ресурсов
Если вы хотите также поэкспериментировать с сертификатами и ключами, можно повторно использовать Key Vault, созданный в этой статье.
В противном случае после завершения работы с созданными в этой статье ресурсами используйте следующую команду, чтобы удалить группу ресурсов и все содержащиеся в ней ресурсы:
az group delete --resource-group myResourceGroup