Поделиться через


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

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

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

Предварительные требования

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

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

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

Вход в Azure

  1. Запустите команду az login.

    az login
    

    Если CLI может открыть ваш браузер по умолчанию, он сделает это и загрузит страницу входа в Azure.

    В противном случае самостоятельно откройте в браузере страницу 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 создает вызов к Azure REST API для хранилища ключей.

Когда 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

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