有关使用 Azure Key Vault 的指导
Azure Key Vault 是用于存储应用程序机密(如加密密钥、证书和服务器端令牌)的集中式云服务。 Key Vault 通过将应用程序密钥保存在一个中心位置,并提供安全访问、权限控制和访问日志记录,来帮助控制这些密钥。
Azure Key Vault 中有三个主要的概念:保管库、密钥和机密。
保管库
可以使用 Azure Key Vault 创建多个安全容器(称为保管库)。 保管库可以集中存储应用程序机密,降低安全信息意外丢失的可能性。 组织有多个密钥保管库。 每个密钥保管库都是由组织内一个或多个负责人员托管的加密密钥和受加密保护的数据(称为“机密”)的集合。 这些密钥保管库代表组织中你希望共同管理的密钥和机密的逻辑组。 它们就像文件系统中的文件夹。 Key Vault 还控制并记录外界对其所存储内容的访问。
你可以使用命令行工具(例如 Azure PowerShell 或 Azure CLI),使用 REST API 或通过 Azure 门户来创建和管理保管库。
例如,以下是一个示例 Azure CLI 命令行,用于在资源组中创建新的保管库:
az keyvault create \
--resource-group <resource-group> \
--name <your-unique-vault-name>
以下是使用 Azure PowerShell 的相同命令:
New-AzKeyVault -Name <your-unique-vault-name> -ResourceGroupName <resource-group>
密钥
密钥是 Azure Key Vault 服务中的主要参与者。 密钥保管库中的给定密钥是指定用于特定用途的加密资产。 例如,Microsoft Azure RMS 的非对称主密钥,或用于 SQL Server TDE(透明数据加密)、CLE(列级加密)和加密备份的非对称密钥。
创建密钥或将密钥添加到密钥保管库后,Microsoft 和你的应用将无法直接访问存储的密钥。 应用程序必须通过在 Key Vault 服务上调用加密方法才能使用你的密钥。 Key Vault 服务在其强化边界内执行请求的操作。 应用程序永远无法直接访问密钥。
密钥可以是单个实例(只有一个密钥存在),也可以进行版本控制。 在版本控制的情况下,一个密钥即为一个对象,这种对象包含一个主密钥(活动密钥)和在轮换(续订)密钥时创建的零个、一个或多个辅助密钥(归档密钥)的集合。 Key Vault 支持非对称密钥 (RSA 2048)。 你的应用程序可能会将这些密钥用于加密或数字签名。
Key Vault 中的密钥有两种变体:受硬件保护和受软件保护。
受硬件保护的密钥
Key Vault 服务支持使用硬件安全模块 (HSM),这些模块为加密处理和密钥生成提供了强化的、防篡改的环境。 Azure 具有验证 FIPS 140-2 级别 2 的专用 HSM,Key Vault 使用这些服务来生成或存储密钥。 这些由 HSM 支持的密钥始终锁定在 HSM 的边界上。 当你查询 Key Vault 服务进行解密或使用密钥签名时,就会在 HSM 内部执行该操作。
可从自己的 HSM 导入密钥,并将其转移到 Key Vault,而无需离开 HSM 边界。 此方案通常称为 自带密钥 或 BYOK。 此模块的摘要中提供了有关如何生成自己的受 HSM 保护的密钥,然后将其转移到 Azure Key Vault 的详细信息。 如果需要迁移受 HSM 保护的应用或维持较高的安全符合性要求,则也可以直接通过 Microsoft Azure 专用硬件安全模块 (HSM) 服务使用这些 Azure HSM。
受软件保护的密钥
Key Vault 也可以使用基于软件的 RSA 和 ECC 算法生成和保护密钥。 通常,除了 FIPS 140-2 级别 2 保证外,受软件保护的密钥可提供受 HSM 保护的密钥的大多数功能:
- 密钥仍与所管理的容器中的应用程序(和Microsoft)隔离。
- 它以 静态 方式存储,并使用 HSM 进行加密。
- 可以使用 Key Vault 日志监视使用情况。
软件保护密钥的主要区别(除了价格外)在于加密操作是在软件中使用 Azure 计算服务进行的。 使用受 HSM 保护的密钥,加密操作在 HSM 中执行。
提示
出于生产用途,建议使用受 HSM 保护的密钥,并仅在测试/试验方案中使用受软件保护的密钥。 如果在某个月使用了 HSM 支持的密钥,将会收取额外费用。 摘要页上有一个指向 Azure Key Vault 定价详细信息的链接。
创建密钥时可确定密钥生成类型。 例如,Azure PowerShell 命令 Add-AzureKeyVaultKey 具有一个 Destination 参数,可以将其设置为 Software 或 HSM:
$key = Add-AzureKeyVaultKey -VaultName 'contoso' -Name 'MyFirstKey' -Destination 'HSM'
机密
机密是使用 Key Vault 创建的小型数据 blob(不到 10K)并且受 HSM 生成的密钥保护。 机密的存在是为了简化持久保存敏感设置的过程,几乎每个应用程序都具有此类敏感设置:存储帐户密钥、.PFX文件、SQL 连接字符串、数据加密密钥等。
密钥保管库的使用
有了这三个元素,Azure Key Vault 便可帮助解决以下问题:
- 机密管理: Azure Key Vault 可以安全地存储(使用 HSM),并严格控制对令牌、密码、证书、API 密钥和其他机密的访问。
- 密钥管理: Azure Key Vault 是基于云的密钥管理解决方案,可更轻松地创建和控制用于加密数据的加密密钥。 Azure 服务(例如应用服务)可直接与 Azure Key Vault 集成,并可在不知道加密密钥的情况下解密机密。
- 证书管理: Azure Key Vault 也是一项服务,可用于轻松预配、管理和部署公共和专用 SSL/TLS 证书,以用于 Azure 和内部连接资源。 它还可以通过与证书颁发机构建立合作关系来请求和续订 TLS 证书,从而为证书生命周期管理提供可靠的解决方案。
重要说明
Key Vault 用于存储服务器应用程序的配置机密。 它并非用于存储属于应用用户的数据,也不应该用于应用的客户端部分。 这反映在其性能特征、API 和成本模型中。
用户数据应存储在其他位置,例如使用透明数据加密的 Azure SQL 数据库或使用存储服务加密的存储帐户。 应用程序用于访问这些数据存储的密钥可保存在 Key Vault 中。
最佳做法
以下是使用 Azure Key Vault 的安全最佳做法。
| 最佳做法 | 解决方案 |
|---|---|
| 向特定范围内的用户、组和应用程序授予访问权限。 | 使用 RBAC 的预定义角色。 例如,要向用户授予管理密钥保管库的访问权限,需要将预定义的角色密钥保管库参与者分配给位于特定范围内的此用户。 在此情况下,该范围可以是订阅、资源组,或只是特定的密钥保管库。 如果预定义角色不符合需求,可以定义自己的角色。 |
| 控制用户有权访问的内容。 | 通过两个单独的接口控制对密钥保管库的访问:管理平面和数据平面。 管理平面和数据平面访问独立控制工作。 使用 RBAC 控制用户有权访问的内容。 例如,如果想要授予应用程序使用密钥保管库中的密钥的权限,只需使用密钥保管库访问策略授予数据平面访问权限, 无需授予此应用程序的管理平面访问权限。 相反,如果希望用户能够读取保管库属性和标记,但不让其具有任何访问密钥、机密或证书的权限, 可使用 RBAC 授予对管理平面的读取访问权限。 无需授予数据平面访问权限。 |
| 将证书存储在密钥保管库中。 | Azure 资源管理器可以在部署 VM 时,将存储在 Azure Key Vault 中的证书安全地部署到 Azure VM。 通过为密钥保管库设置适当的访问策略,还可以控制有权访问证书的人员。 另一个好处是,可以在 Azure Key Vault 中的一个位置管理所有证书。 |
| 确保可以恢复删除的密钥保管库或密钥保管库对象。 | 删除密钥保管库或密钥保管库对象可以是无意或恶意的。 启用 Key Vault 的软删除和清除保护功能,尤其是对用于加密静态数据的密钥。 删除这些密钥相当于丢失数据,因此可以在需要时恢复已删除的保管库和保管库对象。 定期练习 Key Vault 恢复操作。 |
注意
如果用户具有密钥保管库管理平面的参与者权限 (RBAC),则该用户可以通过设置密钥保管库访问策略来授予自己对数据平面的访问权限。 建议严格控制具有密钥保管库“参与者”权限的人员,以确保只有获得授权的人员可以访问和管理密钥保管库、密钥、机密和证书。