

# DynamoDB 静态加密：工作原理
<a name="encryption.howitworks"></a>

Amazon DynamoDB 静态加密使用 256 位高级加密标准 (AES-256) 加密数据，防止未经授权访问基础存储，帮助保护您的数据。

静态加密集成 AWS Key Management Service (AWS KMS)，管理用于加密表的加密密钥。

**注意**  
2022 年 5 月，AWS KMS 将 AWS 托管式密钥 的轮换时间表从每三年（约 1095 天）更改为每年（约 365 天）。  
新的 AWS 托管式密钥 在创建一年后自动轮换，此后大约每年轮换一次。  
现有的 AWS 托管式密钥 在他们最近一次轮换一年后自动轮换，此后每年轮换一次。

## AWS 拥有的密钥
<a name="ddb-owned"></a>

 AWS 拥有的密钥 不存储在 AWS 账户中。它们是 AWS 拥有和管理的用于多个 AWS 账户的 KMS 密钥集合的一部分。AWS 服务可以使用 AWS 拥有的密钥来保护您的数据。DynamoDB 使用的 AWS 拥有的密钥每年（大约 365 天）轮换一次。

您无法查看、管理或使用 AWS 拥有的密钥，或者审计其使用情况。但是无需执行任何工作或更改任何计划即可保护用于加密数据的密钥。

使用 AWS 拥有的密钥，无需支付月费或使用费，它们不会计入账户的 AWS KMS 配额。

## AWS 托管式密钥
<a name="managed-key-service-default-kms"></a>

AWS 托管式密钥 是由与 AWS KMS集成的 AWS 服务代表您在账户中创建、管理和使用的 KMS 密钥。您可以查看账户中的 AWS 托管式密钥、查看其密钥策略以及在 AWS CloudTrail 日志中审核其使用情况。但是无法管理这些 KMS 密钥或更改其权限。

静态加密自动集成 AWS KMS，管理用于加密表的针对 DynamoDB (`aws/dynamodb`) 的 AWS 托管式密钥。如果创建加密 DynamoDB 表时 AWS 托管式密钥 不存在，AWS KMS 将自动创建新密钥。此密钥将用于未来创建的加密表。AWS KMS 将安全、高可用性硬件和软件结合起来，提供可针对云扩展的密钥管理系统。

有关管理 AWS 托管式密钥 权限的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[授权使用 AWS 托管式密钥](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-authz)。

## 客户管理密钥
<a name="managed-key-customer-managed"></a>

客户托管密钥是在您的 AWS 账户中由您创建、拥有和管理的 KMS 密钥。您可以完全控制这些 KMS 密钥，包括建立和维护其密钥策略、IAM 策略和授权；启用和禁用它们；轮换加密材料；添加标签；创建用于引用的别名；以及计划删除。有关管理客户自主管理型密钥的权限的更多信息，请参阅 [Customer managed keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

如果指定客户托管密钥作为表级加密密钥，DynamoDB 表、本地和全局二级索引以及流将使用同一客户托管密钥加密。按需备份使用创建备份时指定的表级加密密钥进行加密。更新表级加密密钥不会更改与现有按需备份关联的加密密钥。

将客户托管密钥的状态设置为禁用或计划删除，将使所有用户和 DynamoDB 服务无法加密或解密数据以及对表执行读写操作。DynamoDB 必须有权访问加密密钥，确保您可以继续访问表并防止数据丢失。

如果禁用客户托管密钥或计划删除，则表状态将变为**无法访问**。为了确保可以继续使用表，必须在七天内提供对指定加密密钥的 DynamoDB 访问权限。一旦服务检测到您的加密密钥无法访问，DynamoDB 会立即向您发送电子邮件通知以提醒您。

**注意**  
如果 DynamoDB 服务无法访问客户托管密钥超过七天，则表将被存档，无法再访问。DynamoDB 为表创建按需备份，并收取费用。可以使用此按需备份将数据还原到新表。要还原，必须启用表上最后一个客户托管密钥，DynamoDB 必须具有访问权限。
如果用于加密全局表副本的客户托管密钥无法访问，DynamoDB 将从副本组删除此副本。检测到客户托管密钥无法访问 20 小时后，副本将不会被删除，停止从该区域复制。

有关更多信息，请参阅 [启用密钥](/kms/latest/developerguide/enabling-keys.html) 和 [删除密钥](/kms/latest/developerguide/deleting-keys.html)。

## 使用 AWS 托管式密钥 的注意事项
<a name="managed-key-notes"></a>

Amazon DynamoDB 无法读取表数据，除非可以访问 AWS KMS 账户中存储的 KMS 密钥。DynamoDB 使用封装加密和密钥层次结构加密数据。您的 AWS KMS 加密密钥用于加密此密钥层次结构的根密钥。有关更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[信封加密](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)。

 DynamoDB 不会为每个 DynamoDB 操作调用 AWS KMS。每 5 分钟为每个有活跃流量的调用方刷新一次密钥。

确保您配置 SDK 反复使用连接。否则，将遇到 DynamoDB 延迟，必须为每个 DynamoDB 操作重新建立新的 AWS KMS 缓存条目。此外，可能需要面对更高 AWS KMS 和 CloudTrail 成本。例如，要使用 Node.js SDK 执行此操作，可以创建开启 `keepAlive` 的新 HTTPS 代理。有关更多信息，请参阅《适用于 JavaScript 的 AWS SDK 开发人员指南》**的[在 Node.js 中配置 keepAlive](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html)。