如何迁移和部署 AWS Encryption SDK - AWS Encryption SDK

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

如何迁移和部署 AWS Encryption SDK

如果从 AWS Encryption SDK 1.7.x 之前的版本迁移到版本 2.0.x 或更高版本,您必须安全过渡到使用密钥承诺进行加密。否则,您的应用程序将遇到无法解密的加密文字。如果您使用的是 AWS KMS 主密钥提供程序,则必须更新到创建严格模式或发现模式下的主密钥提供程序的新构造函数。

注意

本主题专为从 AWS Encryption SDK 早期版本迁移到版本 2.0.x 或更高版本的用户而设计。如果您不熟悉 AWS Encryption SDK,可以按照默认设置立即开始使用最新可用版本。

为避免出现无法解密需要读取的加密文字的严重情况,我们建议您分多个不同阶段进行迁移和部署。在开始下一阶段之前,请确认各阶段均已结束并全面部署。这对于具有多台主机的分布式应用程序尤其重要。

阶段 1:将您的应用程序更新到最新版本 1.x

更新到适用于您的编程语言的最新版本 1.x。在开始阶段 2 之前,请仔细测试、部署更改并确认更新已传播到所有目标主机。

重要

验证最新版本 1.x 为 AWS Encryption SDK 版本 1.7.x 或更高版本。

AWS Encryption SDK 最新版本 1.x 向后兼容 AWS Encryption SDK 旧版本,向前兼容版本 2.0.x 及更高版本。最新版本包括版本 2.0.x 的新功能,但也包括为此迁移设计的安全默认值。最新版本允许您在必要时升级 AWS KMS 主密钥提供程序,并使用可通过密钥承诺解密加密文字的算法套件进行全面部署。

  • 替换弃用元素,包括旧版 AWS KMS 主密钥提供程序的构造函数。在 Python 中,请确保打开弃用警告。最新版本 1.x 弃用的代码元素已从版本 2.0.x 及更高版本中移除。

  • 将您的承诺策略明确设置为 ForbidEncryptAllowDecrypt。尽管这是最新版本 1.x 唯一的有效值,使用此版本中引入的 API 时需要此设置。当您迁移到版本 2.0.x 及更高版本时,其可防止您的应用程序拒绝未使用密钥承诺加密的加密文字。有关详细信息,请参阅 设置您的承诺策略

  • 如果您使用 AWS KMS 主密钥提供程序,则必须将旧版主密钥提供程序更新为支持严格模式发现模式的主密钥提供程序。AWS Encryption SDK for Java、AWS Encryption SDK for Python 和 AWS Encryption CLI 需要进行此项更新。如果您在发现模式下使用主密钥提供程序,我们建议您实施发现筛选条件,将使用的包装密钥限制为特定 AWS 账户 的密钥。此项更新为可选项,但却是我们建议的最佳实践。有关详细信息,请参阅 更新 AWS KMS 主密钥提供程序

  • 如果您使用 AWS KMS Discovery 密钥环,我们建议您纳入将可用于解密的包装密钥限制为特定 AWS 账户 密钥的发现筛选条件。此项更新为可选项,但却是我们建议的最佳实践。有关详细信息,请参阅 更新 AWS KMS 密钥环

阶段 2:将您的应用程序更新到最新版本

所有主机成功部署最新版本 1.x 版本后,您可以升级到版本 2.0.x 及更高版本。版本 2.0.x 包括对 AWS Encryption SDK 所有早期版本的重大更改。但是,如果您按照阶段 1 的建议更改代码,可以避免在迁移到最新版本时出错。

在更新到最新版本之前,请确认您的承诺策略始终设置为 ForbidEncryptAllowDecrypt。然后,根据您的数据配置,您可以按照自己的节奏迁移到 RequireEncryptAllowDecrypt,然后迁移到默认设置 RequireEncryptRequireDecrypt。我们建议采取一系列过渡步骤,例如以下模式。

  1. 首先,将您的承诺策略设置为 ForbidEncryptAllowDecrypt。AWS Encryption SDK 可以使用密钥承诺解密消息,但尚未使用密钥承诺进行加密。

  2. 准备就绪后,将承诺策略更新为 RequireEncryptAllowDecrypt。AWS Encryption SDK 开始使用密钥承诺加密数据。其可使用也可不使用密钥承诺解密加密文字。

    在将您的承诺策略更新为 RequireEncryptAllowDecrypt 之前,请确认您的最新版本 1.x 部署到所有主机,包括解密您生成的加密文字的任何应用程序的主机。1.7.x 之前的 AWS Encryption SDK 版本无法解密使用密钥承诺加密的加密消息。

    这也是向应用程序添加指标的好时机,以衡量您是否仍在未使用密钥承诺处理加密文字。这将帮助您确定何时可以安全地将承诺策略设置更新为 RequireEncryptRequireDecrypt。对于某些应用程序,例如对 Amazon SQS 队列中的消息进行加密的应用程序,这可能意味着要等待足够长的时间才能重新加密或删除使用旧版本加密的所有加密文字。对于其他应用程序,例如加密的 S3 对象,您可能需要下载、重新加密和重新上传所有对象。

  3. 如果您确定没有任何未使用密钥承诺加密的消息,则可以将承诺策略更新为 RequireEncryptRequireDecrypt。此值可确保您的数据始终使用密钥承诺进行加密和解密。此设置为默认设置,因此您无需明确设置,但我们建议您这样做。如果您的应用程序遇到未使用密钥承诺加密的加密文字,明确设置将协助调试和可能需要的任何潜在回滚。