Управление секретами и сертификатами с помощью Azure Key Vault
14.08.2024
Эта техническая и образовательная статья призвана помочь аналитикам безопасности, ИТ-администраторам и системным инженерам использовать Azure Key Vault для безопасного управления секретами (такими как пароли, ключи API, строки подключения) и сертификатами (SSL/TLS). Azure Key Vault — это облачная служба, которая предоставляет централизованное и безопасное решение для хранения этих критически важных элементов и доступа к ним, устраняя необходимость встраивания их непосредственно в код или файлы конфигурации, что является плохой практикой безопасности [1].
Введение
При разработке и эксплуатации современных приложений управление секретами и сертификатами является постоянной проблемой. Учетные данные базы данных, ключи API сторонних сервисов, ключи шифрования и сертификаты SSL/TLS — это конфиденциальные активы, компрометация которых может привести к серьезной утечке данных. Их небезопасное хранение, например, в текстовых файлах, переменных среды или непосредственно в исходном коде, представляет значительный риск. Azure Key Vault был разработан для решения этих проблем путем предоставления безопасного аппаратного репозитория (HSM) для защиты этих активов, жесткого контроля доступа и упрощения управления жизненным циклом [2].
В этом практическом руководстве описывается создание Azure Key Vault, добавление и получение секретов и сертификатов, настройка политик доступа и интеграция с другими службами Azure, такими как Служба приложений Azure. Будут предоставлены пошаговые инструкции, примеры команд Azure CLI и методы проверки, чтобы читатель мог реализовать безопасное управление секретами и сертификатами, укрепив уровень безопасности своих приложений и облачной инфраструктуры.
Почему Azure Key Vault так важен?
- Безопасное хранилище: защищает секреты и ключи шифрования с помощью проверенных аппаратных модулей безопасности (HSM) FIPS 140-2 уровня 2.
- Централизованное управление доступом: позволяет управлять разрешениями на доступ к секретам и сертификатам на детальном уровне с помощью управления доступом на основе ролей Azure (RBAC) или политик доступа Key Vault.
- Управление жизненным циклом: упрощает ротацию секретов и сертификатов, автоматическое истечение срока действия и уведомление о событиях.
- Снижение риска: устраняется необходимость хранить учетные данные в коде или файлах конфигурации, что сводит к минимуму риск утечки.
- Мониторинг и аудит: записывает все операции, выполняемые в Key Vault, обеспечивая контрольные журналы для проверки соответствия требованиям и безопасности.
- Упрощенная интеграция: легко интегрируется с другими службами Azure, такими как Служба приложений Azure, Функции Azure, Виртуальные машины Azure и Azure DevOps.
Предварительные условия
Чтобы использовать Azure Key Vault, вам потребуются следующие элементы:
- Активная подписка Azure: подписка Azure для создания ресурсов и управления ими.
- Административный доступ: учетная запись с ролью «Владелец» или «Участник» в подписке Azure или настраиваемая роль с разрешениями на создание хранилищ ключей и управление ими.
- Azure CLI или Azure PowerShell: установлены и настроены инструменты командной строки для взаимодействия с Azure.
- Необязательно: код Visual Studio: для разработки и интеграционного тестирования.
Шаг за шагом: управление секретами и сертификатами с помощью Azure Key Vault
Давайте создадим Key Vault, добавим секрет и сертификат и настроим доступ.
1. Создание хранилища ключей Azure
Давайте создадим хранилище ключей с помощью Azure CLI. Вы также можете использовать портал Azure.
- Откройте свой терминал или PowerShell и войдите в Azure:
баш вход в систему от AZ -
Создайте группу ресурсов (если у вас ее еще нет):
баш az group create --name RG-KeyVault-Artigos --location Eastus -
Создайте хранилище ключей Azure. Выберите глобально уникальное имя для своего хранилища ключей.
баш az keyvault create --name kv-artigos-seguranca-01 --resource-group RG-KeyVault-Artigos --location Eastus --enabled-for-template-deployment true--enabled-for-template-deployment true: позволяет использовать Key Vault для развертывания шаблонов, что полезно для автоматизации.
2. Добавление секрета в Key Vault
Давайте добавим пароль к базе данных в секрет..
-
Добавьте секрет под названием «DatabasePassword» со значением примера:
баш az набор секретов хранилища ключей --vault-name kv-artigos-seguranca-01 --name DatabasePassword --value "S3cur3P@ssw0rd!" -
Получите секрет, чтобы убедиться, что он сохранен правильно:
баш az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv
3. Добавление сертификата в Key Vault
Давайте добавим самоподписанный сертификат для демонстрационных целей. В рабочей среде вы должны использовать сертификаты доверенного центра сертификации.
-
Создайте самозаверяющий сертификат в Key Vault:
баш az keyvault certificate create --vault-name kv-artigos-seguranca-01 --name MyWebAppCert --policy "$(az keyvault certificate get-default-policy)" -
Проверьте данные сертификата:
баш az keyvault certificate show --vault-name kv-artigos-seguranca-01 --name MyWebAppCert
4. Настройка политик доступа
Чтобы разрешить приложениям или пользователям доступ к секретам и сертификатам, необходимо настроить политики доступа. Давайте воспользуемся контролем доступа на основе ролей Azure (RBAC).
- Получите идентификатор объекта приложения или пользователя, которому потребуется доступ. Приложение (субъект-служба) можно получить после регистрации в Azure AD. Для пользователя используйте
az ad user show --id <имя-участника-пользователя> --query id -o tsv. - Назначьте роль вашему Key Vault. Например, чтобы разрешить приложению читать секреты:
баш # Пример: назначение роли «Пользователь секретов хранилища ключей» субъекту службы. Назначение роли az create --role «Пользователь секретов хранилища ключей» --assignee-object-id <объектное приложение/идентификатор пользователя> --scope /subscriptions/<идентификатор вашей подписки>/resourceGroups/RG-KeyVault-Artigos/providers/Microsoft.KeyVault/vaults/kv-artigos-seguranca-01- Совет. Для сертификатов можно использовать функцию «Пользователь сертификата хранилища ключей».
5. Интеграция со службой приложений Azure (пример)
Давайте продемонстрируем, как приложение может использовать секрет из Key Vault.
- Создайте службу приложений Azure (если у вас ее еще нет):
баш az appservice plan create --name AppServicePlan-Artigos --resource-group RG-KeyVault-Artigos --sku B1 --is-linux az webapp create --resource-group RG-KeyVault-Artigos --plan AppServicePlan-Artigos --name webapp-artigos-seguranca-01 -
Включите управляемое удостоверение для Службы приложений. Это позволяет Службе приложений проходить проверку подлинности в Azure Key Vault без явных учетных данных.
баш az назначение идентификатора веб-приложения --resource-group RG-KeyVault-Artigos --name webapp-artigos-seguranca-01 -
Предоставьте управляемому удостоверению Службы приложений разрешение на доступ к секрету в Key Vault. Используйте principalId, полученный на предыдущем шаге.
баш az keyvault set-policy --name kv-artigos-seguranca-01 --object-id <principalManaged IdentityId> --secret-permissions get list- Совет. Чтобы использовать RBAC, назначьте роль «Пользователь секретов хранилища ключей» для «principalId» управляемого удостоверения.
-
Настройте секретную ссылку в Службе приложений. Это позволяет приложению получать доступ к секрету как к переменной среды.
баш az конфигурации webapp appsettings set --resource-group RG-KeyVault-Artigos --name webapp-artigos-seguranca-01 --settings DatabasePassword="@Microsoft.KeyVault(SecretUri=https://kv-artigos-seguranca-01.vault.azure.net/secrets/DatabasePassword/)" -
Теперь ваше приложение (например, ASP.NET Core, Node.js) может считывать секрет DatabasePassword как обычную переменную среды, а Служба приложений Azure позаботится о его безопасном получении из Key Vault.
Проверка и тестирование
Проверка управления секретами и сертификатами включает в себя проверку того, что доступ предоставляется только авторизованным объектам и что секреты могут быть правильно получены.
1. Тестирование доступа к секретам через Azure CLI
-
Попробуйте получить доступ к секрету с помощью учетной записи, у которой нет разрешений:
баш az login # Войти под учетной записью без разрешений az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv- Ожидаемый результат: команда должна завершиться ошибкой с ошибкой
AuthorizationFailed.
- Ожидаемый результат: команда должна завершиться ошибкой с ошибкой
-
Попробуйте получить доступ к секрету с помощью учетной записи, имеющей разрешения (например, учетной записи, создавшей ключ V).ault или управляемое удостоверение Службы приложений, если вы тестируете из приложения).
баш az login # Войдите в систему с учетной записью с разрешениями az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv- Ожидаемый результат: команда должна вернуть секретное значение.
2. Тестирование доступа к сертификату
- Убедитесь, что сертификат может быть указан и получен уполномоченным лицом.
баш az список сертификатов keyvault --vault-name kv-artigos-seguranca-01 az keyvault certificate show --vault-name kv-artigos-seguranca-01 --name MyWebAppCert- Ожидаемый результат: команды должны возвращать сведения о сертификате.
3. Проверка журналов аудита Key Vault
Все операции в Key Vault протоколируются и могут быть проверены.
- На портале Azure перейдите к своему хранилищу ключей (kv-articles-seguranca-01).
- На левой панели навигации выберите Журналы активности.
- Вы увидите журнал всех выполненных операций, включая создание секретов, сертификатов и попыток доступа.
Советы и рекомендации по безопасности
- Принцип наименьших привилегий: предоставляйте только необходимые разрешения (получение, список, установка, удаление) для секретов и сертификатов. Избегайте предоставления чрезмерных разрешений.
- Регулярная ротация секретов. Внедрите процесс регулярной ротации секретов и сертификатов, чтобы снизить риск компрометации.
- Управляемые удостоверения: по возможности используйте управляемые удостоверения для ресурсов Azure (управляемые удостоверения) для аутентификации в Key Vault, что устраняет необходимость управлять учетными данными в коде.
- Детализированные политики доступа. Используйте политики доступа Key Vault или Azure RBAC, чтобы контролировать, кто и к чему имеет доступ. Предпочитайте RBAC для более точного контроля.
- Мониторинг и оповещения. Настройте оповещения о подозрительной активности в Key Vault, например о неудачных попытках доступа или удалении секретов.
- Защита от обратимого удаления и очистки. Включите защиту от обратимого удаления и очистки в Key Vault, чтобы предотвратить случайную или злонамеренную потерю секретов и сертификатов.
- Регулярное резервное копирование. Несмотря на высокую доступность Key Vault, рассмотрите возможность резервного копирования секретов и сертификатов, особенно для сценариев аварийного восстановления.
- Истекающие секреты: установите даты истечения срока действия секретов и сертификатов, чтобы обеспечить ротацию и избежать использования старых учетных данных.
Распространенное устранение неполадок
- Ошибка авторизации (403 запрещено). Проверьте политики доступа к Key Vault или назначения ролей RBAC для объекта, пытающегося получить доступ. Убедитесь, что используется правильный идентификатор объекта или PrincipalId.
- Секрет/сертификат не найден: проверьте имя секрета/сертификата и имя хранилища ключей. Убедитесь, что секрет/сертификат существует, не был удален или срок его действия не истек.
- Проблемы с управляемыми удостоверениями. Убедитесь, что управляемое удостоверение включено для ресурса Azure и что в Key Vault предоставлены правильные разрешения.
- Задержка при извлечении секретов: в некоторых случаях при получении секретов может наблюдаться небольшая задержка. Убедитесь, что ваше приложение обрабатывает это асинхронно.
- Ошибки подключения: проверьте сетевые настройки вашего приложения или виртуальной машины. Убедитесь, что нет брандмауэров или групп сетевой безопасности, блокирующих доступ к Key Vault.
Заключение
Azure Key Vault — это критически важная служба для любой организации, стремящейся защитить свои наиболее конфиденциальные цифровые активы в облаке. Централизуя управление секретами и сертификатами в безопасном и высокодоступном хранилище, вы упрощаете соблюдение требований, снижаете риск утечки данных и улучшаете общее состояние безопасности. Эффективное внедрение Azure Key Vault в сочетании с лучшими практиками безопасности и автоматизации позволяет разработчикам и операторам сосредоточиться на инновациях, зная, что их учетные данные и ключи защищены. Благодаря этому практическому руководству специалисты по безопасности смогут использовать Azure Key Vault для безопасного и эффективного управления секретами и сертификатами, обеспечивая целостность и конфиденциальность своих приложений и данных в Azure.
Ссылки:
[1] Microsoft Learn. Что такое Azure Key Vault?. Доступно по адресу: https://learn.microsoft.com/pt-br/azure/key-vault/general/overview. [2] Microsoft Learn. Рекомендации по управлению секретами в Azure Key Vault. Доступно по адресу: https://learn.microsoft.com/pt-br/azure/key-vault/secrets/secrets-best-practices. [3] Microsoft Learn. О сертификатах Azure Key Vault. Доступно по адресу: https://learn.microsoft.com/pt-br/azure/key-vault/certificates/about-certificates.