客户管理的密钥(用于 Azure 存储加密)

可以使用自己的加密密钥来保护存储帐户中的数据。 指定客户托管密钥时,该密钥用于保护和控制对数据加密密钥的访问。 使用客户托管密钥可以更灵活地管理访问控制。

可以创建自己的密钥并将其存储在密钥保管库中,也可以使用 Azure 密钥保管库 API 来生成密钥。 存储帐户和 Key Vault 必须在同一个区域和同一个 Azure Active Directory (Azure AD) 租户中,但可以在不同的订阅中。

关于客户托管密钥

下图显示了 Azure 存储如何通过 Azure AD 和密钥保管库使用客户管理的密钥发出请求:

Diagram showing how customer-managed keys work in Azure Storage

下表说明了图中的编号步骤:

  1. Azure Key Vault 管理员向托管标识授予对加密密钥的权限。 托管标识可以是你创建和管理的用户分配的托管标识,也可以是与存储帐户关联的系统分配的托管标识。
  2. Azure 存储管理员使用存储帐户的客户管理密钥配置加密。
  3. Azure 存储使用 Azure Key Vault 管理员在步骤 1 中授予权限的托管标识通过 Azure AD 针对对 Azure Key Vault 的访问进行身份验证。
  4. Azure 存储使用 Azure Key Vault 中的客户管理的密钥包装帐户加密密钥。
  5. 对于读/写操作,Azure 存储将向 Azure Key Vault 发送解包帐户加密密钥的请求,以执行加密和解密操作。

与存储帐户关联的托管标识必须至少具有以下权限才能访问 Azure Key Vault 中的客户管理的密钥:

  • wrapkey
  • unwrapkey
  • get

有关密钥权限的详细信息,请参阅密钥类型、算法和操作

Azure Policy 提供了内置策略,要求存储帐户对 Blob 存储和 Azure 文件存储工作负载使用客户管理的密钥。 有关详细信息,请参阅 Azure Policy 内置策略定义中的“存储”部分。

用于队列和表的客户管理的密钥

为存储帐户启用客户管理的密钥后,存储在队列和表存储中的数据不会自动受到客户管理的密钥的保护。 创建存储帐户时,可以选择性地将这些服务配置为受到这种保护。

若要详细了解如何创建支持用于队列和表的客户管理的密钥的存储帐户,请参阅创建支持用于表和队列的客户管理的密钥的帐户

为存储帐户配置客户管理的密钥后,Blob 存储和 Azure 文件存储中的数据始终受到客户管理的密钥的保护。

为存储帐户启用客户管理的密钥

在配置客户托管密钥时,Azure 存储会在关联的密钥保管库中使用客户托管密钥来包装帐户的根数据加密密钥。 启用客户托管密钥不影响性能,并且会立即生效。

在启用或禁用客户托管密钥时,或者在修改密钥或密钥版本时,对根加密密钥的保护会变化,但你不需要重新加密 Azure 存储帐户中的数据。

可以在新的和现有的存储帐户上启用客户管理的密钥。 启用客户管理的密钥时,必须指定一个托管标识,用于授权访问密钥所在的密钥保管库。 托管标识可以是用户分配的托管标识,也可以是系统分配的托管标识:

  • 如果在创建存储帐户时配置客户管理的密钥,则必须使用用户分配的托管标识。
  • 在现有的存储帐户上配置客户管理的密钥时,可以使用用户分配的托管标识或系统分配的托管标识。

若要详细了解系统分配的托管标识和用户分配的托管标识,请参阅 Azure 资源的托管标识

可随时在客户管理的密钥与 Microsoft 管理的密钥之间进行切换。 有关 Microsoft 管理的密钥的详细信息,请参阅关于加密密钥管理

若要了解如何使用密钥保管库中的客户管理的密钥来配置 Azure 存储加密,请参阅使用 Azure Key Vault 中存储的客户管理的密钥配置加密

重要

客户托管密钥依赖于 Azure 资源的托管标识,后者是Azure AD 的一项功能。 托管标识当前不支持跨租户方案。 在 Azure 门户中配置客户管理的密钥时,系统会在幕后自动将一个托管标识分配到你的存储帐户。 如果随后将订阅、资源组或存储帐户从一个 Azure AD 租户移到另一个租户,与存储帐户关联的托管标识不会传输到新租户,因此客户管理的密钥可能不再起作用。 有关详细信息,请参阅 Azure 资源的常见问题解答和已知问题中的“在 Azure AD 目录之间转移订阅”。

Azure 存储加密支持 2048、3072 和 4096 大小的 RSA 密钥。 有关密钥的详细信息,请参阅关于密钥

使用密钥保管库会有相关的成本。 有关详细信息,请参阅 Key Vault 定价

更新密钥版本

使用客户管理的密钥配置加密时,有两个选项可用于更新密钥版本:

  • 手动更新密钥版本:若要在有新版本可用时自动更新客户管理的密钥的密钥版本,请在为存储帐户启用“使用客户管理的密钥进行加密”时省略密钥版本。 如果省略了密钥版本,Azure 存储每天都会在密钥保管库中检查是否有客户管理的密钥的新版本。 如果新的密钥版本可用,Azure 存储将自动使用最新版本的密钥。

    Azure 存储每天只会在密钥保管库中检查一次是否存在密钥的新版本。 轮换密钥时,请务必等待 24 小时,然后再禁用旧版本。

  • 手动更新密钥版本:若要对 Azure 存储加密使用特定版本的密钥,请在为存储帐户启用“使用客户管理的密钥进行加密”时指定该密钥版本。 如果指定密钥版本,则 Azure 存储将使用该版本进行加密,直到手动更新密钥版本。

    显式指定密钥版本后,必须手动更新存储帐户,以便在创建新版本时使用新密钥版本 URI。 若要了解如何将存储帐户更新为使用新的密钥版本,请参阅使用 Azure Key Vault 中存储的客户管理的密钥配置加密

更新密钥版本时,根加密密钥的保护会更改,但是 Azure 存储帐户中的数据不会重新加密。 用户无需执行任何其他操作。

注意

若要轮换密钥,请根据你的符合性策略,在密钥保管库中创建新版本的密钥。 可以手动轮换密钥,或创建一个函数以便按计划轮换密钥。

撤消对客户管理的密钥的访问权限

可以随时撤销存储帐户对客户托管密钥的访问权限。 在撤销对客户托管密钥的访问权限之后,或者在禁用或删除密钥之后,客户端无法调用在 Blob 或其元数据中读取或写入数据的操作。 对于所有用户来说,尝试调用以下任何操作都会失败,错误代码为“403 (禁止访问)”:

若要再次调用这些操作,请还原对客户托管密钥的访问权限。

此部分中未列出的所有数据操作可以在撤销客户托管密钥或者禁用或删除某个密钥后继续。

若要撤销对客户托管密钥的访问权限,请使用 PowerShellAzure CLI

Azure 托管磁盘的客户托管密钥

客户托管密钥也可用于管理 Azure 托管磁盘的加密。 客户管理的密钥对托管磁盘的行为不同于对 Azure 存储资源的行为。 有关详细信息,请参阅适用于 Windows 的 Azure 托管磁盘的服务器端加密或适用于 Linux 的 Azure 托管磁盘的服务器端加密

后续步骤