通常,当您使用密钥库加密和解密数据时,您必须将您的 AD 注册应用程序(有权访问密钥库)ClientID 和 ClientSecret 以纯文本形式保存在某处。如果有人窃取了任何人都可以声称他们是注册应用程序的 ClientID 和 Secret,这似乎是一个安全问题。
是否有或可以有更安全的方法?
通常,当您使用密钥库加密和解密数据时,您必须将您的 AD 注册应用程序(有权访问密钥库)ClientID 和 ClientSecret 以纯文本形式保存在某处。如果有人窃取了任何人都可以声称他们是注册应用程序的 ClientID 和 Secret,这似乎是一个安全问题。
是否有或可以有更安全的方法?
您可以使用证书而不是密钥进行身份验证。
对于这种方法,您需要做三件事:
从这篇博客文章中,您可以获得前两个步骤的一些代码。
除了使用基于证书的 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 部署增加了更多的加密层。