Краткое руководство по использованию клиентской библиотеки секретов 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. Выполните команду az 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-secrets
    

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

  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), назначьте роль имени участника-пользователя (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

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