

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

# 亚马逊 DynamoDB 加密最佳实践
<a name="dynamodb"></a>

[Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) 是一项完全托管的 NoSQL 数据库服务，可提供快速、可预测和可扩展的性能。如果数据存储在耐用介质中，DynamoDB 静态加密可保护加密表中的数据，包括主键、本地和全局二级索引、流、全局表、备份和 DynamoDB Accelerator（DAX）集群。

根据数据分类要求，可以通过实施服务器端或客户端加密来保持数据的机密性和完整性：

对于服务器端加密，在创建新表时，可以使用 AWS KMS keys 对表进行加密。您可以使用 AWS 自有密钥、 AWS 托管密钥或客户托管密钥。我们建议使用客户管理的密钥，因为您的组织可以完全控制密钥，并且当您使用这种密钥类型时，表级加密密钥、DynamoDB 表、本地和全局二级索引以及流都使用相同的密钥加密。有关这些密钥类型的更多信息，请参阅[客户密钥和 AWS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt)。

**注意**  
您可以随时在 AWS 自有密钥、 AWS 托管密钥和客户管理密钥之间切换。

要对静态和传输中的数据进行客户端加密和 end-to-end保护，您可以使用 [Amazon DynamoDB](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/what-is-ddb-encrypt.html) 加密客户端。除了保护项目属性值机密性的加密之外，DynamoDB 加密客户端还会对项目签名。它允许检测对项目的未授权更改，包括添加或删除属性，或用一个加密值替换另一个，来提供完整性保护。

考虑下面针对该服务的加密最佳实践：
+ 将禁用或计划删除密钥的权限仅授予需要执行这些任务的用户。这些状态会阻止所有用户和 DynamoDB 服务对数据进行加密或解密，以及对表执行读写操作。
+ 虽然 DynamoDB 默认使用 HTTPS 对传输中数据进行加密，但建议采取额外的安全控制措施。您可以使用以下任意选项：
  + AWS Site-to-Site VPN 连接 IPsec 用于加密。
  + AWS Direct Connect 连接以建立私有连接。
  + AWS Direct Connect 带连接的 AWS Site-to-Site VPN 连接用于 IPsec加密的私有连接。
  + 如果只需从虚拟私有云（VPC）中访问 DynamoDB，可使用 VPC 网关端点，只允许 VPC 中的资源访问它。这样可以防止流量遍历公共互联网。
+ 如果您使用的是 VPC 端点，则将与端点关联的端点策略和 IAM policy 仅限于授权用户、资源和服务使用。有关更多信息，请参阅 [Control access to DynamoDB endpoints by using IAM policies](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-ddb.html#iam-policies-ddb) 和 [Control access to services using endpoint policies](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)。
+ 根据您的加密策略，您可以在应用程序级别对需要加密的数据实施列级数据加密。
+ 将 DAX 集群配置为在设置集群时加密静态数据，比如缓存中数据、配置数据和日志文件。您无法在现有集群上启用静态加密。这种服务器端加密有助于防止数据免遭通过底层存储进行未经授权的访问。DAX 静态加密会自动与 AWS KMS 集成，用于管理用于加密集群的单一服务默认密钥。如果创建加密的 DAX 集群时不存在服务默认密钥，则 AWS KMS 会自动创建新的 AWS 托管密钥。有关更多信息，请参阅 [DAX encryption at rest](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DAXEncryptionAtRest.html)。
**注意**  
客户管理的密钥不能用于 DAX 集群。
+ 将 DAX 集群配置为在设置集群时对传输中数据进行加密。您无法在现有集群上启用传输中加密。DAX 使用 TLS 来加密应用程序和集群之间的请求和响应，并使用集群的 x509 证书对集群进行身份验证。有关更多信息，请参阅 [DAX encryption in transit](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DAXEncryptionInTransit.html)。
+ 在中 AWS Config，实施[dax-encryption-enabled](https://docs.aws.amazon.com/config/latest/developerguide/dax-encryption-enabled.html) AWS 托管规则以验证和维护 DAX 集群的加密。