Приложения, ключи API и секреты Azure Key Vault
Azure Key Vault — это служба Azure, которая защищает криптографические ключи, секреты и сертификаты. Он предоставляет централизованный, безопасный и высокодоступный репозиторий для конфиденциальных данных, таких как ключи API. Одним из способов предотвращения небезопасной практики внедрения ключей API непосредственно в исходный код приложения является настройка приложения для безопасного взаимодействия с ключами API, хранящимися в Azure Key Vault.
В этой статье вы узнаете, как создать экземпляр Key Vault, добавить ключ API в качестве секрета в это хранилище ключей, а затем настроить хранилище ключей с помощью рекомендаций. Эти рекомендации включают ограничение доступа с помощью управления доступом на основе ролей (RBAC), включения мониторинга и ограничения сетевого доступа.
Создание и защита экземпляра Azure Key Vault
Azure Key Vault позволяет безопасно хранить криптографические ключи, секреты и сертификаты. Необходимо развернуть отдельные хранилища ключей для разных сред (разработки, промежуточного хранения, рабочей среды) и приложений.
Создание экземпляра группы ресурсов и хранилища ключей
Чтобы создать экземпляр хранилища ключей, можно использовать следующую команду из Azure CLI или Azure Cloud Shell:
Для создания группы ресурсов используйте команду
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. Обычно используется личное имя или название организации, а также числа и идентификаторы.
Добавление ключа API в Azure Key Vault в качестве секрета
После создания экземпляра Azure Key Vault можно добавить ключ API в качестве секрета в этот экземпляр Azure Key Vault.
Ниже используется команда azure CLI az keyvault secret set , чтобы добавить секрет с именем MyApiKey в keyvault и задать срок действия секрета через 180 дней:
az keyvault secret set \
--vault-name "<YourKeyVaultName>" \
--name "MyApiKey" \
--value "<YourSecretValue>"
--expires "$(date -u -d '+180 days' +'%Y-%m-%dT%H:%M:%SZ')"
Необходимо периодически менять ключи API. В зависимости от потребностей вашей организации в области безопасности вы можете сменить ключи чаще или реже, чем каждые 180 дней. Подписку сетки событий можно настроить для события SecretNearExpiry в качестве метода получения уведомлений об истечении срока действия секретов ключа API.
Ограничение доступа к Key Vault с помощью RBAC
Вы можете ограничить доступ к экземпляру Azure Key Vault, чтобы только удостоверение приложения удостоверяло доступ к Azure Key Vault.
Для этого настройте роль на основе ролей контроль доступа (RBAC) с помощью команды создания назначения ролей Azure CLI:
az role assignment create --role "Key Vault Secrets User" \
--assignee <object-id-of-app-or-user> \
--scope /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<key-vault-name>
Включение ведения журнала и оповещений Key Vault
Вы должны включить ведение журнала и оповещения в экземпляре Key Vault в качестве метода обнаружения потенциально подозрительных действий.
Чтобы включить ведение журнала и оповещения Azure Key Vault, используйте команду create azure CLI az monitor diagnostic-settings:
az monitor diagnostic-settings create \
--name myDiagnosticSettings \
--resource {key-vault-resource-id} \
--logs '[{"category": "AuditEvent","enabled": true}]' \
--workspace {log-analytics-workspace-id}
Эта команда создает параметр диагностики с именем myDiagnosticSettings
, настраивает AuditEvent
его для указанного Azure Key Vault, включает категорию журналов, которая отслеживает события безопасности и доступа и отправляет журналы в указанную рабочую область Log Analytics для мониторинга, анализа и оповещения. Это позволяет отслеживать шаблоны доступа, обнаруживать попытки несанкционированного доступа и настраивать оповещения для критически важных событий безопасности (например, кто-то пытается получить доступ к секрету без соответствующих разрешений).
Вы можете запустить команду azure CLI az monitor scheduled-query create , чтобы отслеживать журналы в указанной рабочей области Log Analytics для несанкционированного доступа к секретам Azure Key Vault и активировать оповещение, если обнаружена любая соответствующая попытка несанкционированного доступа:
az monitor scheduled-query create \
--name "Suspicious Access Alert" \
--resource-group myResourceGroup \
--scopes {log-analytics-workspace-resource-id} \
--condition "AzureDiagnostics | where ResourceType == 'VAULTS' | where OperationName == 'SecretGet' | where ResultSignature == 'Unauthorized'"
Ограничение сетевого доступа к Key Vault
Необходимо ограничить сетевой доступ к Azure Key Vault, чтобы хранилище принимало только запросы из известных сетевых расположений. Для этого можно использовать два общих метода:
- Приватный канал Azure. Это создает частную конечную точку в виртуальной сети, позволяя приложению подключаться к Azure Key Vault без обхода общедоступного Интернета. Этот параметр является наиболее безопасным, так как трафик остается в сети, но требует создания частной конечной точки и настройки DNS.
- "Правила брандмауэра". Параметры брандмауэра Azure Key Vault, расположенные в разделе "Сети", можно настроить со списком разрешенных диапазонов IP-адресов. Этот метод также можно использовать для разрешения доступа к существующим виртуальным сетям, но для этого требуется включить конечную точку службы для Microsoft.KeyVault в выбранной подсети.
Вы можете создать частную конечную точку с помощью команды az network private-endpoint create :
az network private-endpoint create \
--name myPrivateEndpoint \
--resource-group myResourceGroup \
--vnet-name myVNet \
--subnet mySubnet \
--private-connection-resource-id /subscriptions/{subscription}/resourceGroups/{rg}/providers/Microsoft.KeyVault/vaults/{key-vault-name} \
--group-id vault \
--connection-name myConnection
You can create firewall rules on the Azure Key Vault instance using the Azure CLI [az keyvault network-rule add](/cli/azure/keyvault/network-rule#az-keyvault-network-rule-add) command, substituting the appropriate key vault names, resource groups, subnet, and subnet mask information:
```azurecli
az keyvault network-rule add \
--name {key-vault-name} \
--resource-group myResourceGroup \
--ip-address {trusted-ip-address}/32
Azure Key Vault применяет протокол HTTPS для всех коммуникаций. Это гарантирует, что ключи API и другие конфиденциальные данные шифруются во время передачи, обеспечивая защиту от перехвата и атак с помощью злоумышленника в середине.
Взаимодействие с Azure Key Vault с помощью Python
Чтобы взаимодействовать с Azure Key Vault с помощью Python, установите библиотеку удостоверений Azure для идентификатора Microsoft Entra и библиотеку секретов Azure Key Vault:
pip install azure-identity
pip install azure-keyvault-secrets
Вы можете использовать клиентская библиотека секретов Azure Identity и Azure Key Vault для программного управления секретами:
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential
key_vault_name = "<your-key-vault-name>"
KVUri = f"https://{key_vault_name}.vault.azure.net"
secret_name = "<your-secret-name>"
credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)
retrieved_secret = client.get_secret(secret_name)
# Now you can use the API key:
api_key = retrieved_secret.value
print(f"The API key is: {api_key}")
В этом примере кода:
- DefaultAzureCredential: этот класс пытается пройти проверку подлинности с помощью различных методов (переменных среды, управляемых удостоверений и т. д.), что подходит для различных сред Azure.
- SecretClient: этот класс предоставляет методы для взаимодействия с секретами в Key Vault.
- get_secret(): извлекает секрет из Key Vault.