Более безопасный способ использования хранилища ключей
Обычно, когда вы используете хранилище ключей для шифрования и дешифрования данных, вы должны хранить ClientID и ClientSecret зарегистрированного приложения AD (у которого есть разрешение на доступ к хранилищу ключей) где-нибудь в виде простого текста. Это похоже на проблему безопасности, если кто-то украл ClientID и Secret, кто-то может заявить, что он зарегистрированное приложение.
Есть или может быть более безопасный подход?
2 ответа
Вы можете использовать сертификат для аутентификации вместо секрета.
Для этого подхода нужно сделать три вещи:
- Создайте сертификат для использования.
- При создании приложения Active Directory, которое вы будете использовать для доступа к хранилищу ключей, вам нужно будет передать сертификат, созданный на шаге 1. Я не думаю, что вы сможете сделать это через портал через минуту, поэтому вам понадобится использовать команду PowerShell New-AzureRMADApplication.
- Используйте этот сертификат при аутентификации в Key Vault. Для этого вам понадобится перегрузка метода AuthenticationContext.AcquireTokenAsync(), который получает ClientAssertionCertificate. Вы можете создать ClientAssertionCertificate, просто передав идентификатор клиента и X509Certificate2.
Из этого блога вы можете получить некоторый код для первых двух шагов.
Помимо использования KeyVault на основе сертификатов, Azure Managed Service Identity также представляет новый способ сделать службу Azure участником службы без регистрации клиентского приложения и секрета клиента. В настоящее время он доступен только на этапе предварительного просмотра для некоторых служб: виртуальной машины Azure, службы приложений Azure, функции Azure, концентратора событий Azure и служебной шины Azure. Дополнительную информацию можно найти здесь https://docs.microsoft.com/en-us/azure/active-directory/msi-overview
[Обновление] Если вам когда-нибудь понадобится извлечь что-то из KeyVault, с помощью Azure MSI вам не понадобится секрет клиента. Использовать только AzureServiceTokenProvider()
метод получения токена доступа
В реальном развертывании с автоматизацией (например, через Ansible) вы можете использовать внешний сертификат для хранения конфиденциальных переменных в Ansibe Vault и генерировать 256-битную цепочку для защиты такой информации. Во время развертывания автоматизации сертификат расшифровывается для доступа к этим переменным и выполнения дальнейшего развертывания. Этот способ добавляет дополнительный уровень шифрования для всего развертывания Azure.