4

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

是否有或可以有更安全的方法?

4

2 回答 2

3

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

对于这种方法,您需要做三件事:

  1. 创建要使用的证书。
  2. 创建用于访问 Key Vault 的 Active Directory 应用程序时,您需要传入您在步骤 1 中创建的证书。我认为您目前无法通过门户执行此操作,因此您需要使用New-AzureRMADApplication PowerShell 命令。
  3. 在对 Key Vault 进行身份验证时使用该证书。您需要使用接收 ClientAssertionCertificate的 AuthenticationContext.AcquireTokenAsync()方法的重载来执行此操作。您可以通过简单地传递客户端 ID 和 X509Certificate2来创建 ClientAssertionCertificate 。

这篇博客文章中,您可以获得前两个步骤的一些代码。

于 2016-01-04T12:27:04.673 回答
1

除了使用基于证书的 KeyVault 之外,Azure 托管服务标识还引入了一种新方法,可以使 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

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

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

于 2018-02-08T12:00:59.510 回答