

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

# 客户端加密和服务器端加密
<a name="client-server-side"></a>


****  

|  | 
| --- |
| 我们的客户端加密库已重命名为 AWS 数据库加密 SDK。本开发人员指南仍提供有关 [DynamoDB 加密客户端](legacy-dynamodb-encryption-client.md)的信息。 | 

适用于 DynamoDB 的 AWS 数据库加密 SDK *支持客户端*加密，即在将表数据发送到数据库之前对其进行加密。但是，DynamoDB 提供服务器端*静态加密*功能，该功能会在您将表保存到磁盘时以透明方式进行加密并在您访问表时进行解密。

您选择的工具取决于数据的敏感性和应用程序的安全性要求。您可以同时使用适用于 DynamoDB 的 AWS 数据库加密 SDK 和静态加密。当您将已加密且签名的项目发送到 DynamoDB 时，DynamoDB 不会识别受保护的项目。它仅检测带有二进制属性值的典型表项目。

**服务器端静态加密**

DynamoDB 支持[静态加密](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EncryptionAtRest.html)，这是一项*服务器端加密*功能，利用此功能，DynamoDB 可以在将表保存到磁盘时以透明方式进行加密并且在您访问表时进行解密。

当您使用 AWS SDK 与 DynamoDB 交互时，默认情况下，您的数据在通过 HTTPS 连接传输时会进行加密，在 DynamoDB 终端节点进行解密，然后重新加密，然后再存储在 DynamoDB 中。
+ **默认加密。**DynamoDB 在写入所有表时，以透明方式对其进行加密和解密。没有启用或禁用静态加密的选项。
+ **DynamoDB 创建和管理加密密钥。**每个表的唯一键受 [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) 保护，该密钥绝不会让 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)（AWS KMS）处于不加密状态。默认情况下，DynamoDB 在 DynamoDB 服务账户中使用 [AWS 拥有的密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)，但您可以在账户中选择一个 [AWS 托管式密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) 或[客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)来保护您的部分或全部表。
+ **所有表数据均已在磁盘上加密。**当加密表保存到磁盘时，DynamoDB 会加密所有表数据，包括[主键](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey)以及本地和全局[二级索引](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.SecondaryIndexes)。如果表具有排序键，则标记范围边界的一些排序键将以明文形式存储在表元数据中。
+ **与表相关的对象也被加密。**只要将 [DynamoDB 流](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)、[全局表](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html)和[备份](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/BackupRestore.html)写入到持久性媒体，静态加密就会保护它们。
+ **您的项目在您进行访问时解密。**当您访问表时，DynamoDB 会解密包含目标项目的表的一部分并向您返回明文项目。

**AWS 适用于 DynamoDB 的数据库加密 SDK**

客户端加密为您的数据提供 end-to-end保护，无论是传输中的数据还是静态数据，从 DynamoDB 的源数据到 DynamoDB 中的存储。您的纯文本数据永远不会泄露给任何第三方，包括。 AWS您可以将适用于 DynamoDB 的 AWS 数据库加密软件开发工具包与新的 DynamoDB 表配合使用，也可以将现有的 Amazon DynamoDB 表迁移到最新版本的 DynamoDB 数据库加密软件开发工具包。 AWS 
+ **您的传输中数据和静态数据均受保护。**它永远不会暴露给任何第三方，包括 AWS。
+ **您可以为表项目签名。**您可以定向适用于 DynamoDB 的 AWS 数据库加密 SDK 以计算表项目的全部或部分的签名，包括主键属性。此签名允许您整体检测项目的未经授权的更改，包括添加或删除属性，或者交换属性值。
+ **您可以通过[选择密钥环](keyrings.md)的方式确定如何保护您的数据**。您的密钥环决定了哪些包装密钥保护您的数据密钥并最终保护您的数据。使用最安全且对您的任务实用的包装密钥。
+ **适用于 DynamoDB 的 AWS 数据库加密 SDK 不会加密整个表。**您可以选择在项目中加密哪些属性。适用于 DynamoDB 的 AWS 数据库加密 SDK 不会加密整个项目。它不会加密属性名称或主键（分区键和排序键）属性的名称或值。

**AWS Encryption SDK**

如果您要加密存储在 DynamoDB 中的数据，我们建议使用适用于 DynamoDB 的数据库加密 SD AWS K。

[AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/) 是一个客户端加密库，可帮助您加密和解密通用数据。尽管它可以保护任何类型的数据，但它不适用于结构化数据，如数据库记录。与适用于 DynamoDB 的 AWS 数据库加密 SDK 不同，它无法提供项目级别的完整性检查，也没有识别属性或阻止加密 AWS Encryption SDK 主密钥的逻辑。

如果您使用 AWS Encryption SDK 来加密表中的任何元素，请记住它与适用于 DynamoDB 的 AWS 数据库加密 SDK 不兼容。您无法使用一个库进行加密而使用另一个库进行解密。