排查 DynamoDB 加密客户端应用程序中的问题 - AWS 数据库加密 SDK

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

排查 DynamoDB 加密客户端应用程序中的问题

注意

我们的客户端加密库已重命名为 AWS 数据库加密 SDK。以下主题提供有关适用于 Java 的 DynamoDB 加密客户端版本 1.x—2.x 以及适用于 Python 的 DynamoDB 加密客户端版本 1.x—3.x 的信息。有关更多信息,请参阅适用于 DynamoDB 的 AWS 数据库加密 SDK 版本支持

本部分介绍了您在使用 DynamoDB 加密客户端时可能遇到的问题并提供了解决这些问题的建议。

要提供有关 DynamoDB 加密客户端的反馈,请在 aws-dynamodb-encryption-javaaws-dynamodb-encryption-python GitHub 存储库中提交问题。

要提供对本文档的反馈,请使用任何页面上的反馈链接。您也可以向 aws-dynamodb-encryption-docs 提交问题或供稿,这是本文档在 GitHub 上的开源存储库。

访问被拒绝

问题:拒绝您的应用程序访问其所需的资源。

建议:了解所需权限并将权限添加到您的应用程序所运行的安全环境。

详细信息

要运行使用 DynamoDB 加密客户端库的应用程序,调用方必须具有使用其组件的权限。否则,将会拒绝他们访问必要元素。

  • DynamoDB 加密客户端不需要 Amazon Web Services(AWS)账户,也不依赖任何 AWS 服务。但是,如果您的应用程序使用 AWS,则您需要一个 AWS 账户有权使用该账户的用户

  • DynamoDB 加密客户端不需要 Amazon DynamoDB。但是,如果使用客户端的应用程序创建 DynamoDB 表、将项目放入表中或从表中获取项目,则调用方必须具有在您的 AWS 账户 账户中使用所需 DynamoDB 操作的权限。有关详细信息,请参阅《Amazon DynamoDB 开发人员指南》中的访问控制主题

  • 如果您的应用程序在适用于 Python 的 DynamoDB 加密客户端中使用客户端帮助程序类,则调用方必须具有调用 DynamoDB DescribeTable 操作的权限。

  • DynamoDB 加密客户端不需要 AWS Key Management Service(AWS KMS)。但是,如果您的应用程序使用 Direct KMS 材料提供程序,或它将最新提供程序与使用 AWS KMS 的提供程序存储结合使用,则调用方必须具有使用 AWS KMS GenerateDataKeyDecrypt 操作的权限。

签名验证失败

问题:由于签名验证失败,无法解密某个项目。该项目也可能未按您希望的进行加密和签名。

建议:确保您提供的属性操作考虑到该项目中的所有属性。当解密某个项目时,请确保提供与用于加密该项目的操作匹配的属性操作。

详细信息

您提供的属性操作告知 DynamoDB 加密客户端要加密并签名的属性、要签名(但不加密)的属性以及要忽略的属性。

如果您指定的属性操作未考虑到该项目中的所有属性,则该项目可能不会按您希望的方式进行加密和签名。如果您在解密项目时提供的属性操作与在加密项目时提供的属性操作不同,则签名验证可能会失败。这是分布式应用程序中的特定问题,在分布式应用程序中,新属性操作可能不会传播到所有主机。

签名验证错误很难解决。为了帮助防止此类错误,请在更改数据模型时采取额外的预防措施。有关详细信息,请参阅 更改数据模型

旧版本全局表存在的问题

问题:由于签名验证失败,旧版本的 Amazon DynamoDB 全局表中的项目无法解密。

建议:设置属性操作,使得保留的复制字段不会被加密或签名。

详细信息

您可以将 DynamoDB 加密客户端与 DynamoDB 全局表结合使用。建议您使用具有多区域 KMS 密钥的全局表,并将 KMS 密钥复制到复制全局表所在的所有 AWS 区域。

从全局表版本 2019.11.21 开始,您无需任何特殊配置即可将全局表与 DynamoDB 加密客户端结合使用。但是,如果您使用全局表版本 2017.11.29,则必须确保所保留的复制字段不会被加密或签名。

如果您使用全局表版本 2017.11.29,则必须将以下属性的属性操作设置为 Java 中的 DO_NOTHINGPython 中的 @DoNotTouch

  • aws:rep:deleting

  • aws:rep:updatetime

  • aws:rep:updateregion

如果您使用任何其他版本的全局表,则无需执行任何操作。

最新提供程序表现不佳

问题:您的应用程序响应速度较差,尤其是在更新到较新版本的 DynamoDB 加密客户端之后。

建议:调整生存时间值和缓存大小。

详细信息

最新提供程序旨在通过允许有限地重用加密材料来提高使用 DynamoDB 加密客户端的应用程序的性能。为应用程序配置最新提供程序时,您必须在提高性能与缓存和重用所产生的安全问题之间取得平衡。

在较新版本的 DynamoDB 加密客户端中,生存时间(TTL)值决定缓存的加密材料提供程序(CMP)可以使用的时长。TTL 还决定最新提供程序检查新版本的 CMP 的频率。

如果您的 TTL 过长,则应用程序可能会违反您的业务规则或安全标准。如果 TTL 过短,则频繁调用提供程序存储可能会导致您的提供程序存储限制来自您的应用程序和共享您的服务账户的其他应用程序的请求。要解决此问题,请将 TTL 和缓存大小调整为符合延迟和可用性目标并且符合安全标准的值。有关详细信息,请参阅设置生存时间值