Управление секретами и сертификатами с помощью Azure Key Vault

Управление секретами и сертификатами с помощью 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, вам потребуются следующие элементы:

  1. Активная подписка Azure: подписка Azure для создания ресурсов и управления ими.
  2. Административный доступ: учетная запись с ролью «Владелец» или «Участник» в подписке Azure или настраиваемая роль с разрешениями на создание хранилищ ключей и управление ими.
  3. Azure CLI или Azure PowerShell: установлены и настроены инструменты командной строки для взаимодействия с Azure.
  4. Необязательно: код Visual Studio: для разработки и интеграционного тестирования.

Шаг за шагом: управление секретами и сертификатами с помощью Azure Key Vault

Давайте создадим Key Vault, добавим секрет и сертификат и настроим доступ.

1. Создание хранилища ключей Azure

Давайте создадим хранилище ключей с помощью Azure CLI. Вы также можете использовать портал Azure.

  1. Откройте свой терминал или PowerShell и войдите в Azure: баш вход в систему от AZ
  2. Создайте группу ресурсов (если у вас ее еще нет): баш az group create --name RG-KeyVault-Artigos --location Eastus

  3. Создайте хранилище ключей 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

Давайте добавим пароль к базе данных в секрет..

  1. Добавьте секрет под названием «DatabasePassword» со значением примера: баш az набор секретов хранилища ключей --vault-name kv-artigos-seguranca-01 --name DatabasePassword --value "S3cur3P@ssw0rd!"

  2. Получите секрет, чтобы убедиться, что он сохранен правильно: баш az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv

3. Добавление сертификата в Key Vault

Давайте добавим самоподписанный сертификат для демонстрационных целей. В рабочей среде вы должны использовать сертификаты доверенного центра сертификации.

  1. Создайте самозаверяющий сертификат в Key Vault: баш az keyvault certificate create --vault-name kv-artigos-seguranca-01 --name MyWebAppCert --policy "$(az keyvault certificate get-default-policy)"

  2. Проверьте данные сертификата: баш az keyvault certificate show --vault-name kv-artigos-seguranca-01 --name MyWebAppCert

4. Настройка политик доступа

Чтобы разрешить приложениям или пользователям доступ к секретам и сертификатам, необходимо настроить политики доступа. Давайте воспользуемся контролем доступа на основе ролей Azure (RBAC).

  1. Получите идентификатор объекта приложения или пользователя, которому потребуется доступ. Приложение (субъект-служба) можно получить после регистрации в Azure AD. Для пользователя используйте az ad user show --id <имя-участника-пользователя> --query id -o tsv.
  2. Назначьте роль вашему 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.

  1. Создайте службу приложений 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
  2. Включите управляемое удостоверение для Службы приложений. Это позволяет Службе приложений проходить проверку подлинности в Azure Key Vault без явных учетных данных. баш az назначение идентификатора веб-приложения --resource-group RG-KeyVault-Artigos --name webapp-artigos-seguranca-01

  3. Предоставьте управляемому удостоверению Службы приложений разрешение на доступ к секрету в Key Vault. Используйте principalId, полученный на предыдущем шаге. баш az keyvault set-policy --name kv-artigos-seguranca-01 --object-id <principalManaged IdentityId> --secret-permissions get list

    • Совет. Чтобы использовать RBAC, назначьте роль «Пользователь секретов хранилища ключей» для «principalId» управляемого удостоверения.
  4. Настройте секретную ссылку в Службе приложений. Это позволяет приложению получать доступ к секрету как к переменной среды. баш 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/)"

  5. Теперь ваше приложение (например, ASP.NET Core, Node.js) может считывать секрет DatabasePassword как обычную переменную среды, а Служба приложений Azure позаботится о его безопасном получении из Key Vault.

Проверка и тестирование

Проверка управления секретами и сертификатами включает в себя проверку того, что доступ предоставляется только авторизованным объектам и что секреты могут быть правильно получены.

1. Тестирование доступа к секретам через Azure CLI

  1. Попробуйте получить доступ к секрету с помощью учетной записи, у которой нет разрешений: баш az login # Войти под учетной записью без разрешений az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv

    • Ожидаемый результат: команда должна завершиться ошибкой с ошибкой AuthorizationFailed.
  2. Попробуйте получить доступ к секрету с помощью учетной записи, имеющей разрешения (например, учетной записи, создавшей ключ V).ault или управляемое удостоверение Службы приложений, если вы тестируете из приложения). баш az login # Войдите в систему с учетной записью с разрешениями az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv

    • Ожидаемый результат: команда должна вернуть секретное значение.

2. Тестирование доступа к сертификату

  1. Убедитесь, что сертификат может быть указан и получен уполномоченным лицом. баш 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 протоколируются и могут быть проверены.

  1. На портале Azure перейдите к своему хранилищу ключей (kv-articles-seguranca-01).
  2. На левой панели навигации выберите Журналы активности.
  3. Вы увидите журнал всех выполненных операций, включая создание секретов, сертификатов и попыток доступа.

Советы и рекомендации по безопасности

  • Принцип наименьших привилегий: предоставляйте только необходимые разрешения (получение, список, установка, удаление) для секретов и сертификатов. Избегайте предоставления чрезмерных разрешений.
  • Регулярная ротация секретов. Внедрите процесс регулярной ротации секретов и сертификатов, чтобы снизить риск компрометации.
  • Управляемые удостоверения: по возможности используйте управляемые удостоверения для ресурсов 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.