Руководство по Использование Azure Key Vault с виртуальной машиной в Python

Azure Key Vault помогает защищать ключи, секреты и сертификаты, например ключи API и строки подключения к базам данных.

В этом учебнике описано, как настроить приложение Python, чтобы оно считывало данные из Azure Key Vault с помощью управляемых удостоверений для ресурсов Azure. Вы узнаете, как выполнять следующие задачи:

  • Создайте хранилище ключей.
  • хранение секрета в Key Vault;
  • создание виртуальной машины Linux в Azure;
  • включение управляемого удостоверения для виртуальной машины;
  • предоставление разрешений, необходимых консольному приложению для чтения данных из Key Vault;
  • получение секрета из Key Vault.

Перед началом работы ознакомьтесь c основными понятиями службы Key Vault.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure.

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

Для Windows, Mac и Linux:

  • Git;
  • Для этого руководства требуется запустить Azure CLI локально. Необходимо установить Azure CLI версии 2.0.4 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо установить или обновить CLI, ознакомьтесь со статьей Установка Azure CLI 2.0.

Вход в Azure

Чтобы войти в Azure с помощью Azure CLI, введите следующую команду:

az login

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

В этом кратком руководстве используется предварительно созданное хранилище ключей Azure. Хранилище ключей можно создать, выполнив действия, описанные в кратких руководствах по Azure CLI, Azure PowerShell или порталу Azure.

Можно также выполнить команды Azure CLI или Azure PowerShell, приведенные ниже.

Важно!

Каждое хранилище ключей должно иметь уникальное имя. В следующих примерах замените <your-unique-keyvault-name> именем своего хранилища ключей.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup"

Запись секрета в хранилище ключей

Мы создадим секрет с именем mySecret и значением Success! . Секретом может быть пароль, строка подключения SQL или другие сведения, которые должны быть защищены и при этом доступны приложению.

Чтобы добавить секрет в новое созданное хранилище ключей, используйте следующую команду:

az keyvault secret set --vault-name "<your-unique-keyvault-name>" --name "mySecret" --value "Success!"

Создание виртуальной машины

Создайте виртуальную машину с именем myVM одним из следующих способов:

Linux Windows
Azure CLI Azure CLI
PowerShell PowerShell
Портал Azure Портал Azure

Чтобы создать виртуальную машину Linux с помощью Azure CLI, используйте команду az vm create. В примере ниже добавляется учетная запись пользователя с именем azureuser. Параметр --generate-ssh-keys автоматически создает ключ SSH и сохраняет его в стандартное расположение ( ~/.ssh).

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image UbuntuLTS \
  --admin-username azureuser \
  --generate-ssh-keys

Запишите значение publicIpAddress в выходных данных.

Назначение удостоверения виртуальной машине

Создайте назначаемое системой удостоверение для виртуальной машины с помощью команды Azure CLI az vm identity assign:

az vm identity assign --name "myVM" --resource-group "myResourceGroup"

Обратите внимание на присвоенный системой идентификатор, который отображается в следующем коде. Выходные данные приведенной выше команды выглядят следующим образом.

{
  "systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "userAssignedIdentities": {}
}

Назначение разрешения для идентификатора виртуальной машины

Теперь вы можете предоставить созданному выше идентификатору разрешение для хранилища ключей, выполнив следующую команду.

az keyvault set-policy --name "<your-unique-keyvault-name>" --object-id "<systemAssignedIdentity>" --secret-permissions get list

Вход на виртуальную машину

Чтобы войти в виртуальную машину, следуйте инструкциям по подключению и входу в виртуальную машину Azure на платформе Windows или Linux.

Чтобы войти на виртуальную машину Linux, можно использовать команду SSH с <publicIpAddress> из шага по созданию виртуальной машин:

ssh azureuser@<PublicIpAddress>

Установка библиотек Python на виртуальной машине

На виртуальной машине установите две библиотеки Python, которые будут использоваться в нашем скрипте Python: azure-keyvault-secrets и azure.identity.

Например, на виртуальной машине Linux их можно установить с помощью pip3:

pip3 install azure-keyvault-secrets

pip3 install azure.identity

Создание и изменение примера скрипта Python

На виртуальной машине создайте файл Python с именем sample.py. Измените файл, чтобы он содержал следующий код, заменив <your-unique-keyvault-name> именем своего хранилища ключей:

from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential

keyVaultName = "<your-unique-keyvault-name>"
KVUri = f"https://{keyVaultName}.vault.azure.net"
secretName = "mySecret"

credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)
retrieved_secret = client.get_secret(secretName)

print(f"The value of secret '{secretName}' in '{keyVaultName}' is: '{retrieved_secret.value}'")

Запуск примера приложения Python

Теперь выполните sample.py. Если все прошло хорошо, должно вернуться значение секрета:

python3 sample.py

The value of secret 'mySecret' in '<your-unique-keyvault-name>' is: 'Success!'

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

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

az group delete -g myResourceGroup

Дальнейшие действия

Справочник по REST API для Azure Key Vault