使用客户管理的密钥加密应用程序配置数据

Azure 应用程序配置对敏感信息进行静态加密。 通过使用客户管理的密钥,可以管理加密密钥,从而提供增强的数据保护。 使用托管密钥加密时,将使用用户提供的 Azure Key Vault 密钥对应用程序配置中的所有敏感信息进行加密。 这样就可以根据需要轮换加密密钥。 还可以通过撤消应用程序配置实例对密钥的访问权限,来撤消 Azure 应用程序配置对敏感信息的访问权限。

概述

Azure 应用程序配置使用 Microsoft 提供的 256 位 AES 加密密钥对静态敏感信息进行加密。 每个应用程序配置实例都有其自己的加密密钥,该密钥由服务管理并用于加密敏感信息。 敏感信息包括在键值对中找到的值。 启用客户管理的密钥功能后,应用程序配置将使用分配给应用程序配置实例的托管标识通过 Microsoft Entra ID 进行身份验证。 然后,托管标识调用 Azure Key Vault 并包装应用程序配置实例的加密密钥。 然后存储已包装的加密密钥,并在应用程序配置中将已解包的加密密钥缓存一小时。 应用程序配置每小时会刷新应用程序配置实例的加密密钥的解包版本。 此过程确保在正常操作条件下的可用性。

重要

如果分配给应用程序配置实例的标识不再有权解包实例的加密密钥,或者如果永久删除了托管密钥,则将无法再对存储在应用程序配置实例中的敏感信息进行解密。 通过使用 Azure Key Vault 的软删除功能,可降低意外删除加密密钥的概率。

当用户在其 Azure 应用程序配置实例上启用客户管理的密钥功能时,他们将控制服务访问其敏感信息的能力。 托管密钥用作根加密密钥。 用户可以通过更改其密钥保管库访问策略来撤销其应用程序配置实例对其托管密钥的访问。 撤消此访问权限时,应用程序配置将在一小时内失去解密用户数据的能力。 此时,应用程序配置实例将禁止所有访问尝试。 可通过再次向服务授予对托管密钥的访问权限来从这种情况中恢复。 在一小时内,应用程序配置将能够对用户数据进行解密,并在正常情况下运行。

注意

所有 Azure 应用程序配置数据都可在独立备份中存储最多 24 小时。 这包括已解包的加密密钥。 此数据不能立即供服务或服务团队使用。 发生紧急还原时,Azure 应用程序配置将再次从托管密钥数据中撤销自身。

要求

若要成功启用 Azure 应用程序配置的客户管理的密钥功能,需要以下组件:

  • 标准层 Azure 应用程序配置实例。

  • 已启用软删除和清除保护功能的 Azure Key Vault。

  • Key Vault 中的 RSA 密钥。

    • 此密钥不能过期,必须启用,并且必须同时启用包装和解包功能。

配置这些资源后,请使用以下步骤,以便 Azure 应用程序配置可以使用 Key Vault 密钥:

  1. 将托管标识分配到 Azure 应用程序配置实例。
  2. 在目标 Key Vault 的访问策略中授予标识 GETWRAPUNWRAP 权限。

为 Azure 应用程序配置实例启用客户管理的密钥加密

若要开始,需要已正确配置的 Azure 应用程序配置实例。 如果还没有可用的应用程序配置实例,请按照以下快速入门进行设置:

创建和配置 Azure Key Vault

  1. 使用 Azure CLI 创建 Azure Key Vault。 vault-nameresource-group-name 均由用户提供,并且必须是唯一的。 在这些示例中,我们使用 contoso-vaultcontoso-resource-group

    az keyvault create --name contoso-vault --resource-group contoso-resource-group
    
  2. 为 Key Vault 启用软删除和清除保护。 替换在步骤 1 中创建的 Key Vault (contoso-vault) 和资源组 (contoso-resource-group) 的名称。

    az keyvault update --name contoso-vault --resource-group contoso-resource-group --enable-purge-protection --enable-soft-delete
    
  3. 创建 Key Vault 密钥。 为此密钥提供唯一的 key-name,并替换在步骤 1 中创建的 Key Vault (contoso-vault) 的名称。

    az keyvault key create --name key-name --kty RSA --vault-name contoso-vault
    

    此命令的输出显示生成的密钥的密钥 ID(“kid”)。 请记录密钥 ID 以便在本练习的后面使用。 密钥 ID 的格式为:https://{my key vault}.vault.azure.cn/keys/{key-name}/{Key version}。 密钥 ID 包含三个重要组件:

    1. Key Vault URI: `https://{my key vault}.vault.azure.cn
    2. Key Vault 密钥名称:{Key Name}
    3. Key Vault 密钥版本:{Key version}
  4. 使用 Azure CLI 创建系统分配的托管标识,替换前面步骤中使用的应用程序配置实例和资源组的名称。 托管标识将用于访问托管密钥。 我们使用 contoso-app-config 来说明应用程序配置实例的名称:

    az appconfig identity assign --name contoso-app-config --resource-group contoso-resource-group --identities [system]
    

    此命令的输出包括系统分配的标识的主体 ID ("principalId") 和租户 ID ("tenandId")。 这些 ID 将用于向标识授予对托管密钥的访问权限。

    {
    "principalId": {Principal Id},
    "tenantId": {Tenant Id},
    "type": "SystemAssigned",
    "userAssignedIdentities": null
    }
    
  5. Azure 应用程序配置实例的托管标识需要访问密钥才能执行密钥验证、加密和解密。 它需要访问的特定操作集包括:密钥的 GETWRAPUNWRAP。 授予访问权限需要应用程序配置实例的托管标识的主体 ID。 此值是在上一步中获得的。 如下所示为 contoso-principalId。 使用命令行向托管密钥授予权限:

    az keyvault set-policy -n contoso-vault --object-id contoso-principalId --key-permissions get wrapKey unwrapKey
    
  6. 在 Azure 应用程序配置实例可以访问托管密钥后,我们可以使用 Azure CLI 在服务中启用客户管理的密钥功能。 请记住在密钥创建步骤的过程中记录的以下属性:key namekey vault URI

    az appconfig update -g contoso-resource-group -n contoso-app-config --encryption-key-name key-name --encryption-key-version key-version --encryption-key-vault key-vault-Uri
    

现在,Azure 应用程序配置实例已配置为使用存储在 Azure Key Vault 中的客户管理的密钥。

后续步骤

本文介绍了如何配置 Azure 应用程序配置实例,令其使用客户管理的密钥进行加密。 若要详细了解如何将应用服务与 Azure 托管标识集成,请继续执行下一步。