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

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

可以创建自己的密钥并将其存储在密钥保管库中,也可以使用 Azure 密钥保管库 API 来生成密钥。 存储帐户和密钥保管库可以位于不同的 Microsoft Entra 租户、区域和订阅中。

关于客户托管密钥

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

Diagram showing how customer-managed keys work in Azure Storage

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

  1. Azure Key Vault 管理员向托管标识授予对加密密钥的权限。 托管标识可以是你创建和管理的用户分配的托管标识,也可以是与存储帐户关联的系统分配的托管标识。
  2. Azure 存储管理员使用存储帐户的客户管理密钥配置加密。
  3. Azure 存储使用 Azure Key Vault 管理员在步骤 1 中授予权限的托管标识,通过 Microsoft Entra ID 对 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 存储帐户中的数据将始终保持加密状态。 你无需执行任何其他操作来确保数据保持加密状态。 客户管理的密钥的保护会立即生效。

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

密钥保管库要求

存储密钥的密钥保管库必须同时启用软删除和清除保护。 Azure 存储加密支持 2048、3072 和 4096 大小的 RSA 密钥。 有关密钥的详细信息,请参阅关于密钥

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

使用同一租户中的密钥保管库的客户管理的密钥

可以使用同一租户或不同 Microsoft Entra 租户中的密钥保管库和存储帐户来配置客户管理的密钥。 若要了解在密钥保管库和存储帐户位于同一租户中的情况下如何使用客户管理的密钥配置 Azure 存储加密,请参阅以下文章之一:

当你使用同一租户中的密钥保管库启用客户管理的密钥时,必须指定一个托管标识,用于授权访问密钥所在的密钥保管库。 托管标识可以是用户分配的托管标识,也可以是系统分配的托管标识:

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

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

使用不同租户中的密钥保管库的客户管理的密钥

若要了解在密钥保管库和存储帐户位于不同 Microsoft Entra 租户中的情况下如何使用客户管理的密钥配置 Azure 存储加密,请参阅以下文章之一:

更新密钥版本

遵循加密最佳做法意味着定期轮换保护存储帐户的密钥,通常至少每两年轮换一次。 Azure 存储永远不会修改密钥保管库中的密钥,但你可以配置密钥轮换策略来根据合规性要求轮换密钥。 有关详细信息,请参阅在 Azure 密钥保管库中配置加密密钥自动轮换

在密钥保管库中轮换密钥后,必须更新存储帐户的客户管理的密钥配置,以使用新的密钥版本。 客户管理的密钥支持自动和手动更新保护帐户的密钥的密钥版本。 可以决定在配置客户管理的密钥或更新配置时要使用的方法。

修改密钥或密钥版本时,根加密密钥的保护会更改,但是 Azure 存储帐户中的数据将始终保持加密状态。 无需执行其他操作即可确保数据受到保护。 轮换密钥版本不会影响性能。 轮换密钥版本不会造成停机。

重要

若要轮换密钥,请根据你的合规性要求,在密钥保管库中创建新版本的密钥。 Azure 存储不处理密钥轮换,因此需要管理密钥保管库中的密钥轮换。

轮换用作客户管理的密钥的密钥时,该操作当前不会记录到 Azure 存储的 Azure Monitor 日志中。

自动更新密钥版本

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

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

如果存储帐户以前配置为手动更新密钥版本,而你想要将其更改为自动进行更新,则可能需要将密钥版本显式更改为空字符串。 若要详细了解如何执行此操作,请参阅配置加密以自动更新密钥版本

手动更新密钥版本

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

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

撤销对使用客户管理的密钥的存储帐户的访问权限

要撤销对使用客户管理密钥的存储帐户的访问权限,请禁用密钥保管库中的密钥。 要了解如何禁用密钥,请参阅撤销对使用客户管理的密钥的存储帐户访问权限

在禁用密钥之后,客户端将无法调用在资源或其元数据中进行读取或写入的操作。 对于所有用户,尝试调用以下操作将会失败,并显示错误代码 403(禁止访问)

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

撤销客户管理的密钥、禁用或删除密钥后,以下部分中未列出的所有数据操作可以继续进行。

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

撤销密钥后失败的 Blob 存储操作

撤销密钥后失败的Azure 文件存储操作

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

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

后续步骤