2016-01-04 3 views
4

Обычно, когда вы используете ключевое хранилище для шифрования и дешифрования данных, вы должны хранить свое зарегистрированное приложение AD (имеющее авторизацию для доступа к ключевому хранилищу) ClientID и ClientSecret где-то в обычном тексте. Это похоже на проблему безопасности, если кто-то крадет идентификатор ClientID и Secret, и каждый может заявить, что они являются зарегистрированным приложением.Более безопасный способ использования ключевого хранилища

Есть ли или нет более безопасный подход?

ответ

2

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

Есть три вещи, которые нужно сделать для этого подхода:

  1. Создать сертификат для использования.
  2. При создании приложения Active Directory, которое вы будете использовать для доступа к хранилищу ключей, вам необходимо передать сертификат, созданный на шаге 1. Я не думаю, что вы можете сделать это через портал в любой момент, так что вы Вам нужно будет использовать команду PowerShell New-AzureRMADApplication.
  3. Используйте этот сертификат при аутентификации в Key Vault. Вам нужно будет использовать метод overload of the AuthenticationContext.AcquireTokenAsync(), который получает ClientAssertionCertificate для этого. Вы можете create a ClientAssertionCertificate просто передать идентификатор клиента и X509Certificate2.

От this сообщение в блоге вы можете получить код для первых двух шагов.

0

Помимо использования сертификата, основанного на KeyVault, Azure Managed Service Identity также представляет новый способ превращения службы Azure в сервисную службу без регистрации клиентского приложения и секретариата клиента. В настоящее время он доступен только для предварительного просмотра некоторых сервисов: Azure VM, Azure App Service, Azure Function, Azure Event Hub & Azure Service Bus. Более подробную информацию можно найти здесь https://docs.microsoft.com/en-us/azure/active-directory/msi-overview

[Update] Когда-либо Вы должны получить что-то из KeyVault, с Azure MSI вам не нужен секрет клиента. Используйте метод AzureServiceTokenProvider() для получения доступа к токену

В реальном развертывании с автоматизацией (например, через Ansible) вы можете использовать внешний сертификат для хранения чувствительных переменных в Ansibe Vault и генерировать 256-битную цепочку для защиты такой информации. Во время развертывания автоматизации сертификат расшифровывается для доступа к этим переменным и последующего развертывания. Таким образом добавляется еще один уровень шифрования для всего развертывания Azure.