您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

对 Azure Key Vault 进行身份验证

借助 Azure 密钥保管库,可以在集中的安全云存储库中存储机密并控制其分发,因而无需在应用程序中存储凭据。 应用程序只需要在运行时使用密钥保管库进行身份验证即可访问这些机密。

应用标识和安全主体

使用密钥保管库进行的身份验证可与 Azure Active Directory (Azure AD) 结合使用,后者负责对任何给定安全主体的标识进行身份验证。

安全主体是一个对象,表示请求访问 Azure 资源的用户、组、服务或应用程序。 Azure 为每个安全主体分配唯一的对象 ID。

  • 用户安全主体标识在 Azure Active Directory 中具有配置文件的个人。

  • 组安全主体标识在 Azure Active Directory 中创建的一组用户。 分配给组的任何角色或权限都将授予组内的所有用户。

  • 服务主体是一类安全主体,它标识应用程序或服务,即一段代码,而不是用户或组。 服务主体的对象 ID 称为其客户端 ID,作用类似于其用户名。 服务主体的客户端密码的作用类似于其密码。

对于应用程序,有两种获取服务主体的方法:

  • 建议:为应用程序启用系统分配的托管标识。

    借助托管标识,Azure 在内部管理应用程序的服务主体,并自动通过其他 Azure 服务对应用程序进行身份验证。 托管标识可用于部署到各种服务的应用程序。

    有关详细信息,请参阅托管标识概述。 另请参阅支持托管标识的 Azure 服务,其链接到介绍如何为特定服务(例如应用服务、Azure Functions、虚拟机等)启用托管标识的文章。

  • 如果不能使用托管标识,请改为将应用程序注册到 Azure AD 租户,如快速入门:将应用程序注册到 Azure 标识平台中所述。 注册操作还会创建第二个应用程序对象,该对象在所有租户中标识该应用。

授权安全主体访问 Key Vault

密钥保管库可用于两个不同的授权级别:

  • 访问策略控制是否授权用户、组或服务主体访问现有密钥保管库资源内的机密、密钥和证书(有时称为“数据平面”操作)。 访问策略通常授予用户、组和应用程序。

    若要分配访问策略,请参阅以下文章:

  • 角色权限控制是否授权用户、组或服务主体创建、删除及以其他方式管理密钥保管库资源(有时称为“管理平面”操作)。 此类角色通常仅授予管理员。

    若要分配和管理角色,请参阅以下文章:

    有关角色的一般信息,请参阅什么是 Azure 基于角色的访问控制 (Azure RBAC)?

重要

为了获得最高安全性,请始终遵循最小特权原则,并仅授予所需的最具体的访问策略和角色。

配置密钥保管库防火墙

默认情况下,密钥保管库允许通过公共 IP 地址访问资源。 为了提高安全性,还可以限制对特定 IP 范围、服务终结点、虚拟网络或专用终结点的访问。

有关详细信息,请参阅访问防火墙保护下的 Azure 密钥保管库

密钥保管库身份验证流

  1. 服务主体请求使用 Azure AD 进行身份验证,例如:

    • 用户使用用户名和密码登录到 Azure 门户。
    • 应用程序调用 Azure REST API,提供客户端 ID 和密码或客户端证书。
    • Azure 资源(例如具有托管标识的虚拟机)与 Azure 实例元数据服务 (IMDS) REST 终结点联系以获取访问令牌。
  2. 如果使用 Azure AD 成功进行身份验证,则将向服务主体授予 OAuth 令牌。

  3. 服务主体通过密钥保管库的终结点 (URI) 调用密钥保管库 REST API。

  4. 密钥保管库防火墙会检查以下条件。 如果满足任何条件,则允许调用。 否则,调用将被阻止并返回禁止访问响应。

    • 防火墙已禁用,并且可以从公共 Internet 访问密钥保管库的公共终结点。
    • 调用方是密钥保管库受信任的服务,因此允许其绕过防火墙。
    • 调用方按 IP 地址、虚拟网络或服务终结点在防火墙中列出。
    • 调用方可以通过配置的专用链接连接访问密钥保管库。
  5. 如果防火墙允许该调用,则密钥保管库会调用 Azure AD 来验证服务主体的访问令牌。

  6. 密钥保管库会检查服务主体是否对请求的操作具有所需的访问策略。 如果没有,则密钥保管库会返回禁止访问响应。

  7. 密钥保管库会执行请求的操作并返回结果。

下面的关系图说明应用程序调用密钥保管库“获取机密”API 的过程:

Azure 密钥保管库身份验证流

备注

Key Vault SDK 用于机密、证书和密钥的客户端在没有访问令牌的情况下对 Key Vault 进行了额外的调用,这导致 401 响应来检索租户信息。 有关详细信息,请参阅身份验证、请求和响应

代码示例

下表链接到其他文章,这些文章演示如何使用相关语言的 Azure SDK 库在应用程序代码中使用密钥保管库。 为了方便起见,还包括了其他接口,例如 Azure CLI 和 Azure 门户。

密钥保管库机密 密钥保管库密钥 Key Vault 证书
Python Python Python
.NET .NET .NET
Java Java Java
JavaScript JavaScript JavaScript
Azure 门户 Azure 门户 Azure 门户
Azure CLI Azure CLI Azure CLI
Azure PowerShell Azure PowerShell Azure PowerShell
ARM 模板 -- --

后续步骤