本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
排查 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
要提供对本文档的反馈,请使用任何页面上的反馈链接。
拒绝访问
问题:拒绝您的应用程序访问其所需的资源。
建议:了解所需权限并将权限添加到您的应用程序所运行的安全环境。
详细信息
要运行使用 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但是,如果您的应用程序使用直接KMS材料提供程序,或者它使用的是最新提供程序和正在使用的提供程序存储区 AWS KMS,则调用方必须拥有使用 AWS KMS GenerateDataKey和解密操作的权限。
签名验证失败
问题:由于签名验证失败,无法解密某个项目。该项目也可能未按您希望的进行加密和签名。
建议:确保您提供的属性操作考虑到该项目中的所有属性。当解密某个项目时,请确保提供与用于加密该项目的操作匹配的属性操作。
详细信息
您提供的属性操作告诉 DynamoDB 加密客户端要加密并签名的属性、要签名(但不加密)的属性以及要忽略的属性。
如果您指定的属性操作未考虑到该项目中的所有属性,则该项目可能不会按您希望的方式进行加密和签名。如果您在解密项目时提供的属性操作与在加密项目时提供的属性操作不同,则签名验证可能会失败。这是分布式应用程序中的特定问题,在分布式应用程序中,新属性操作可能不会传播到所有主机。
签名验证错误很难解决。为了帮助防止此类错误,请在更改数据模型时采取额外的预防措施。有关更多信息,请参阅 更改数据模型。
旧版本全局表存在的问题
问题:由于签名验证失败,旧版本的 Amazon DynamoDB 全局表中的项目无法解密。
建议:设置属性操作,使得保留的复制字段不会被加密或签名。
详细信息
您可以将 DynamoDB 加密客户端与 DynamoDB 全局表结合使用。我们建议您使用带有多区域KMS密钥的全局表,并将该KMS密钥复制到所有复制全局表 AWS 区域 的地方。
从全局表版本 2019.11.21 开始,您无需任何特殊配置即可将全局表与 DynamoDB 加密客户端结合使用。但是,如果您使用全局表版本 2017.11.29,则必须确保所保留的复制字段不会被加密或签名。
如果您使用全局表版本 2017.11.29,则必须将以下属性的属性操作设置为 Java 中的 DO_NOTHING
或 Python 中的 @DoNotTouch
。
aws:rep:deleting
aws:rep:updatetime
aws:rep:updateregion
如果您使用任何其他版本的全局表,则无需执行任何操作。
最新提供程序表现不佳
问题:您的应用程序响应速度较差,尤其是在更新到较新版本的 DynamoDB 加密客户端之后。
建议:调整 time-to-live 值和缓存大小。
详细信息
最新提供程序旨在通过允许有限地重用加密材料来提高使用 DynamoDB 加密客户端的应用程序的性能。为应用程序配置最新提供程序时,您必须在提高性能与缓存和重用所产生的安全问题之间取得平衡。
在较新版本的 DynamoDB 加密客户端中, time-to-live TTL() 值决定了缓存的加密材料提供程序 CMPs () 的使用时长。TTL还决定了最新提供程序检查新版本的频率CMP。
如果您的时间过长,TTL则您的应用程序可能会违反您的业务规则或安全标准。如果您的TTL内容过于简短,频繁调用提供商商店可能会导致您的提供商商店限制来自您的应用程序和其他共享您的服务帐户的应用程序的请求。要解决此问题,请将TTL和缓存大小调整为符合延迟和可用性目标并符合您的安全标准的值。有关详细信息,请参阅设置生存时间值。