閱讀英文

共用方式為

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

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

概述

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

重要

如果分配给应用配置实例的标识不再有权解包实例的加密密钥,或者托管密钥被永久删除,或者正在使用的托管密钥版本过期,则无法再解密存储在应用配置实例中的敏感信息。 通过使用 Azure Key Vault 的软删除功能,可降低意外删除加密密钥的概率。 通过在密钥保管库中配置托管密钥加密和设置 密钥自动轮换 时省略密钥版本,可以缓解基础托管密钥过期的可能性。

要求

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

  • 标准层或高级层 Azure 应用配置实例。
  • 已启用软删除和清除保护功能的 Azure Key Vault。
  • Key Vault 中的 RSA 或 RSA-HSM 密钥。
    • 此密钥不能过期,必须启用,并且必须同时启用包装和解包功能。

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

  1. 将托管标识分配到 Azure 应用程序配置实例。
  2. 向标识授予权限,以便能够访问密钥保管库密钥。
    • 对于已启用 Azure RBAC 的密钥保管库,请向标识分配目标密钥保管库上的 Key Vault Crypto Service Encryption User 角色。
    • 对于使用访问策略授权的密钥保管库,请向标识授予目标密钥保管库访问策略中的 GETWRAPUNWRAP 权限。

启用客户管理的密钥加密

  1. 在标准或高级层中创建应用配置存储(如果没有)。

  2. 使用 Azure CLI 创建一个启用了清除保护的 Azure 密钥保管库。 默认启用软删除。 vault-nameresource-group-name 均由用户提供,并且必须是唯一的。 在这些示例中,我们使用 contoso-vaultcontoso-resource-group

    az keyvault create --name contoso-vault --resource-group contoso-resource-group --enable-purge-protection
    
  3. 创建 Key Vault 密钥。 为此密钥提供唯一的 key-name,并替换在第 2 步中创建的密钥保管库的名称 (contoso-vault)。 指定你首选 RSA 还是 RSA-HSM 加密(RSA-HSM 仅在高级层中可用)。

    az keyvault key create --name key-name --kty {RSA or RSA-HSM} --vault-name contoso-vault
    

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

    1. 密钥保管库 URI:https://{my key vault}.vault.azure.cn
    2. 密钥保管库密钥名称:{key-name}
    3. 密钥保管库密钥版本:{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 ("tenantId")。 这些 ID 将用于向标识授予对托管密钥的访问权限。

    {
        "principalId": {Principal Id},
        "tenantId": {Tenant Id},
        "type": "SystemAssigned",
        "userAssignedIdentities": null
    }
    

    注意

    若要创建用户分配的托管标识,请按照此教程操作。

  5. Azure 应用程序配置实例的托管标识需要访问密钥才能执行密钥验证、加密和解密。 它需要访问的特定操作集包括:密钥的 GETWRAPUNWRAP。 可以通过为已启用 Azure RBAC 的密钥保管库分配 Key Vault Crypto Service Encryption User 角色来授予这些权限。 对于使用访问策略授权的密钥保管库,请为上述密钥权限设置策略。 授予访问权限需要应用程序配置实例的托管标识的主体 ID。 将下面显示为 contoso-principalId 的值替换为在上一步中获取的主体 ID。 使用命令行向托管密钥授予权限:

    对于启用了 Azure RBAC 的密钥保管库,请使用以下命令。

    az role assignment create --assignee contoso-principalId --role "Key Vault Crypto Service Encryption User" --scope key-vault-resource-id
    
  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-vault key-vault-Uri
    

    该命令默认使用系统分配的托管标识对密钥保管库进行身份验证。

    注意

    使用用户分配的托管标识访问客户管理的密钥时,可以通过在命令中添加 --identity-client-id <client ID of your user assigned identity> 显式指定其客户端 ID。

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

禁用客户管理的密钥加密

  1. 确保当前客户管理的密钥有效且可作。 在还原到 Azure 管理的密钥之前,应用配置需要使用当前密钥解密现有数据。 如果当前密钥已过期或其访问权限已被吊销,则必须首先还原对该密钥的访问权限。

  2. 使用 Azure CLI 更新应用配置实例并删除客户管理的密钥配置。 将 contoso-resource-groupcontoso-app-config 替换为设置的相应值。

    az appconfig update -g contoso-resource-group -n contoso-app-config --encryption-key-name ""
    

    此命令从应用配置实例中删除客户管理的密钥配置。

  3. 通过检查应用配置实例的属性,验证是否已删除客户管理的密钥配置。

    az appconfig show -g contoso-resource-group -n contoso-app-config --query "encryption"
    

    输出应显示属性 encryption.keyVaultProperties 设置为 null.

Azure 应用配置实例现已配置为使用 Azure 托管密钥进行加密。

注意

禁用客户管理的密钥加密会将应用配置实例还原为使用 Azure 托管密钥。 确保此更改符合组织的安全策略和合规性要求。

访问吊销

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

注意

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

密钥轮换

在应用配置实例上配置客户管理的密钥时,必须定期轮换托管密钥以确保其永不过期。 请务必注意,对于成功的密钥轮换,当前密钥必须有效且可作。 如果当前密钥已过期或应用配置对其的访问权限已吊销,则应用配置实例将无法解密数据,因此无法进行轮换。 可以将密钥保管库密钥自动轮换配置为避免需要手动轮换加密密钥,从而确保最新版本的密钥保持有效。 依赖密钥保管库密钥自动轮换时,应确保应用配置实例的托管密钥配置不引用特定的密钥版本。 省略版本使应用配置在执行自动轮换时能够始终更新到密钥保管库的最新密钥版本。 轮换托管密钥失败可被视为安全问题,但此外,缺少轮换可能会导致无法访问应用配置实例。 这是因为,如果正在使用的托管密钥版本过期,则应用配置将无法解密数据。

若要回顾,建议使用以下最佳做法:

  • 为您的托管密钥启用密钥保管库的自动轮换。
  • 设置客户管理的密钥加密时,请省略使用密钥保管库密钥的特定版本。

有版本密钥与无版本密钥

设置客户管理的密钥加密需要在密钥保管库中传递密钥的标识符。 密钥保管库密钥标识符可能或可能不包含版本。 建议在配置客户管理的密钥加密以启用自动轮换时省略版本。 应仔细考虑使用版本控制密钥,因为无法手动轮换将导致在有问题的密钥版本过期时无法访问应用配置实例。

  • 无版本密钥标识符示例: https://{my key vault}.vault.azure.cn/keys/{key-name}
  • 版本化密钥标识符示例(不建议): https://{my key vault}.vault.azure.cn/keys/{key-name}/{key-version}

后续步骤

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