一种更安全的密钥保管库使用方法

时间:2016-01-04 10:40:55

标签: azure azure-keyvault

通常,当您使用密钥保管库加密和解密数据时,您必须保留AD注册的应用程序(具有访问密钥保管库的权限)ClientID和ClientSecret以纯文本格式保存。这似乎是一个安全问题,如果有人窃取了ClientID和Secret,任何人都可以声称他们是注册的应用程序。

是否存在更安全的方法?

2 个答案:

答案 0 :(得分:2)

您可以使用证书进行身份验证,而不是秘密。

这种方法需要做三件事:

  1. 创建要使用的证书。
  2. 创建用于访问密钥保管库的Active Directory应用程序时,需要传入在步骤1中创建的证书。我认为您不能通过门户网站立即执行此操作,因此您我需要使用New-AzureRMADApplication PowerShell命令。
  3. 在向Key Vault进行身份验证时使用该证书。您需要使用接收ClientAssertionCertificate的overload of the AuthenticationContext.AcquireTokenAsync()方法来执行此操作。您只需传递客户端ID和X509Certificate2即可create a ClientAssertionCertificate
  4. this博客文章中,您可以获得前两个步骤的一些代码。

答案 1 :(得分:0)

除了使用基于证书的KeyVault之外,Azure托管服务标识还引入了一种新方法,使Azure服务成为服务主体,而无需任何客户端应用程序注册和客户端密钥。目前,它仅适用于某些服务的预览阶段:Azure VM,Azure App Service,Azure功能,Azure Event Hub& Azure Service Bus。更多信息可以在https://docs.microsoft.com/en-us/azure/active-directory/msi-overview

找到

[更新]当您需要从KeyVault检索内容时,使用Azure MSI,您不需要客户端密钥。仅使用AzureServiceTokenProvider()方法检索访问令牌

在使用自动化的实际部署中(例如通过Ansible),您可以使用外部证书在Ansibe Vault中存储敏感变量,并生成256位链以保护此类信息。在自动化部署期间,将解密证书以访问这些变量并执行进一步部署。这样就可以为整个Azure部署添加更多加密层。