为什么 Azure Key Vault 是安全的?

Why is Azure Key Vault secure?

Azure Key Vault 为何或如何安全?我需要在服务器上存储密钥 URI 和客户端 ID 以及客户端机密,因此如果任何人授予对托管应用程序的服务器的访问权限,他将能够访问存储在 Key Vault 中的密钥和机密。这意味着将它们存储在服务器上同样安全,对吧?

您误解了 Key Vault。从某种意义上说,Key Vault 是安全的,没有任何东西可以通过 public 互联网传输,与 Key Vault 和 Azure 资源的所有通信都通过 Azure Backbone,所以它们默认是安全的(好吧,如果你相信 Azure 是安全的)。
此外,借助 Key Vault,您可以允许部署某些证书而无需查看(或复制)它们。基本支持RBAC

OP 来晚了,但希望能帮助其他人解决使用 Azure Key Vault 时先有鸡还是先有蛋的问题。

对于 Azure VM 上 运行 应用程序的上下文,您可以使用 documentation: Authenticate with a Certificate instead of a Client Secret 中所述的客户端证书身份验证,而不是使用 client_secret 进行身份验证。

上图中:

  • 应用程序通过证明它具有证书的私钥(如果您使用 Windows,它基本上存储在 CNG 中)来向 AAD 进行身份验证。
  • 应用程序取回 access_token,然后使用它访问 Key Vault。

开发者不需要知道证书的私钥值就可以成功验证他们的应用程序。相反,他们只需要知道证书存储中导入的 pfx(私钥及其证书的容器)的位置。

至少在Windows,你作为秘密管理员可以将私钥和证书转换成pfx格式,受密码保护,然后将其部署到 Windows 证书存储区。这样一来,除非知道 pfx 文件的 密码 ,否则没人能知道私钥。


Azure Compute 的另一种具体方法是使用 Azure Managed Service Identity。使用 Azure MSI,Azure 将自动分配您的资源,例如具有身份/服务主体的 VM,您可以在特定端点发出请求,该端点只能由您的资源访问以获取 access_token。但请注意,Azure MSI 仍在 public 预览版中,因此请在使用前查看已知问题。

上图解释了 Azure 资源管理器如何为您的 VM 分配服务主体身份。

  • 当您在 VM 中启用 MSI 时,Azure 将在您的 AAD 中创建一个服务主体。
  • Azure 随后会将新的 MSI VM 扩展部署到您的 VM。这在 http://localhost:50432/oauth2/token 处提供了一个端点,用于获取服务主体的 access_token
  • 然后您可以使用 access_token 访问授权服务主体访问的资源,例如 Key Vault。