

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

# 静态加密：它在 Amazon Keyspaces 中如何运作
<a name="encryption.howitworks"></a>

Amazon Keyspaces（Apache Cassandra 兼容）*静态加密*使用 256 位高级加密标准 (AES-256) 来加密数据。这有助于保护您的数据，防止对底层存储进行未经授权的访问。默认情况下，Amazon Keyspaces 表中的所有客户数据都进行了静态加密，服务器端加密是透明的，这意味着不需要对应用程序进行更改。

静态加密与 AWS Key Management Service (AWS KMS) 集成，用于管理用于加密表的加密密钥。在创建新表或更新现有表时，您可以选择以下 *AWS KMS 密钥*选项之一：
+ AWS 拥有的密钥 — 这是默认的加密类型。此密钥由 Amazon Keyspaces 拥有（不另外收费）。
+ 客户自主管理型密钥：此密钥存储在您的账户中，由您创建、拥有和管理。您可以完全控制客户管理的密钥（AWS KMS 收费）。

**AWS KMS 密钥（KMS 密钥）**  
静态加密使用密钥保护您的所有 Amazon Keyspaces 数据。 AWS KMS 默认情况下，Amazon Keyspaces 使用 [AWS 拥有的密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)，即在 Amazon Keyspaces 服务账户中创建并管理的多租户加密密钥。  
但是，您可以使用 AWS 账户中的[客户自主管理型密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)加密 Amazon Keyspaces 表。您可以为键空间中的每个表选择不同的 KMS 密钥。您为表选择的 KMS 密钥也用于加密其所有元数据和可恢复备份。  
您可以在创建或更新表时为表选择 KMS 密钥。您可以随时在 Amazon Keyspaces 控制台中或使用 [ALTER TABLE](cql.ddl.keyspace.md#cql.ddl.keyspace.alter) 语句更改表的 KMS 密钥。切换 KMS 密钥的过程是无缝的，不需要停机，也不会降低服务质量。

**密钥层次结构**  
Amazon Keyspaces 使用密钥层次结构来加密数据。在这个密钥层次结构中，KMS 密钥是根密钥。它用于加密和解密 Amazon Keyspaces 表加密密钥。表加密密钥用于加密 Amazon Keyspaces 在内部使用的加密密钥（用于在执行读取和写入操作时加密和解密数据）。  
利用加密密钥层次结构，您可以对 KMS 密钥进行更改，而无需重新加密数据，也不会影响应用程序和正在进行的数据操作。  

![\[显示了根密钥、表加密密钥和用于静态加密的数据加密密钥的密钥层次结构。\]](http://docs.aws.amazon.com/zh_cn/keyspaces/latest/devguide/images/keyspaces_encryption.png)


**表密钥**  
Amazon Keyspaces 表密钥用作密钥加密密钥。Amazon Keyspaces 使用表密钥来保护内部数据加密密钥，后者用于加密存储在表、日志文件和可恢复备份中的数据。Amazon Keyspaces 会为表中的每个底层结构生成唯一的数据加密密钥。但是，多个表行可能受同一个数据加密密钥的保护。  
首次将 KMS 密钥设置为客户托管密钥时， AWS KMS 会生成*数据密钥*。 AWS KMS 数据密钥是指 Amazon Keyspaces 中的表密钥。  
当您访问加密表时，Amazon Keyspaces 会向发送使用 KMS 密钥解密表密钥的请求。 AWS KMS 然后，它会使用明文表密钥来解密 Amazon Keyspaces 数据加密密钥，并使用明文数据加密密钥来解密表数据。  
Amazon Keyspaces 在外部使用和存储表密钥和数据加密密钥。 AWS KMS它会借助[高级加密标准](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) 加密和 256 位加密密钥保护所有密钥。然后，它会将加密密钥与加密数据存储在一起，这样您就可以根据需要使用它们来解密表数据。

**表密钥缓存**  
为了避免调用 AWS KMS 每个 Amazon Keyspaces 操作，Amazon Keyspaces 会将每个连接的纯文本表密钥缓存在内存中。如果 Amazon Keyspaces 在闲置五分钟后收到缓存表密钥的请求，则它会向发送新的请求 AWS KMS 以解密该表密钥。此调用会捕获自上次请求解密表密钥以来对 AWS KMS 或 AWS Identity and Access Management (IAM) 中 KMS 密钥的访问策略所做的任何更改。

**信封加密**  
如果您更改了表的客户自主管理型密钥，Amazon Keyspaces 会生成新的表密钥。然后，它会使用新的表密钥来重新加密数据加密密钥。它还会使用新的表密钥来加密用于保护可恢复备份的先前表密钥。此过程称为信封加密。这将确保即使您轮换了客户自主管理型密钥，您仍然可以访问可恢复备份。有关信封加密的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[信封加密](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)。

**Topics**
+ [AWS 拥有的密钥](#keyspaces-owned)
+ [客户托管密钥](#customer-managed)
+ [静态加密使用注意事项](#encryption.usagenotes)

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

AWS 拥有的密钥 没有存储在你的 AWS 账户。它们是 KMS 密钥集合的一部分，这些密钥 AWS 拥有并管理多个密钥 AWS 账户。 AWS 服务可以 AWS 拥有的密钥 用来保护您的数据。

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

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

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

客户管理的密钥 AWS 账户 是您创建、拥有和管理的密钥。您对此类 KMS 密钥拥有完全控制权。

使用客户托管密钥可获得以下功能：
+ 您可以创建和管理客户自主管理型密钥，包括设置和维护[密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)、[IAM 策略](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html)和[授权](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)来控制对客户自主管理型密钥的访问。您可以[启用和禁用](https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html)客户自主管理型密钥、启用和禁用[自动密钥轮换](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)，以及计划在客户自主管理型密钥不再使用时[删除客户自主管理型密钥](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html)。您可以为自己管理的客户自主管理型密钥创建标签和别名。
+ 您可以使用具有[导入的密钥材料](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html)的客户托管密钥，或者您拥有和管理的[自定义密钥存储](https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html)中的客户托管密钥。
+ 您可以使用 AWS CloudTrail 和 Amazon CloudWatch Logs 来跟踪 Amazon Keyspaces AWS KMS 代表您发送的请求。有关更多信息，请参阅 [步骤 6：使用配置监控 AWS CloudTrail](encryption.customermanaged.md#encryption-cmk-trail)。

客户托管的密钥每[次 API 调用都会产生费用](https://aws.amazon.com/kms/pricing/)，而 AWS KMS 配额适用于这些 KMS 密钥。有关更多信息，请参阅 [AWS KMS 资源或请求限额](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html)。

当您将客户自主管理型密钥指定为表的根加密密钥时，系统将使用创建备份时为表指定的加密密钥对可恢复备份进行加密。如果表的 KMS 密钥进行了轮换，则密钥信封加密可确保最新的 KMS 密钥有权访问所有可恢复备份。

Amazon Keyspaces 必须有权访问您的客户自主管理型密钥才能让您有权访问您的表数据。如果加密密钥的状态设置为“已禁用”或将按计划删除，Amazon Keyspaces 将无法加密或解密数据。因此，您无法对表执行读取和写入操作。一旦服务检测到您的加密密钥无法访问，Amazon Keyspaces 会立即向您发送电子邮件通知以提醒您。

您必须在七天内恢复对加密密钥的访问权限，否则 Amazon Keyspaces 会自动删除您的表。作为预防措施，Amazon Keyspaces 会在删除表之前为表数据创建可恢复备份。Amazon Keyspaces 会将可恢复备份保留 35 天。35 天后，您将无法再恢复表数据。您无需为可恢复备份付费，但需要支付标准[恢复费用](https://aws.amazon.com/keyspaces/pricing)。

您可以使用这个可恢复备份将数据恢复到新表。要启动恢复操作，必须启用用于表的最后一个客户自主管理型密钥，且 Amazon Keyspaces 必须有权访问它。

**注意**  
当您创建使用客户自主管理型密钥进行加密的表时，如果该密钥在创建过程完成之前不可访问或将按计划删除，则会发生错误。创建表操作将失败，并且您将收到电子邮件通知。

## 静态加密使用注意事项
<a name="encryption.usagenotes"></a>

在 Amazon Keyspaces 中使用静态加密时，请注意以下事项。
+ 服务器端静态加密已在所有 Amazon Keyspaces 表上启用且无法禁用。整个表都进行了静态加密，您无法选择特定的列或行进行加密。
+ 默认情况下，Amazon Keyspaces 使用单服务默认密钥（AWS 拥有的密钥）来加密您的所有表。如果此密钥不存在，系统会为您创建一个。服务默认密钥无法禁用。
+ 静态加密仅加密持久存储介质上的静态数据。如果对于正在传输的数据或正在使用的数据而言，数据安全性很重要，则必须执行额外措施：
  + 传输中数据：Amazon Keyspaces 中的所有数据都在传输中加密。默认情况下，与 Amazon Keyspaces 的通信将通过安全套接字层 (SSL)/传输层安全性协议 (TLS) 加密进行保护。
  + 正在使用的数据：在将数据发送到 Amazon Keyspaces 之前使用客户端加密保护数据。
  + 客户自主管理型密钥：表中的静态数据始终使用客户自主管理型密钥进行加密。但是，对多行执行原子更新的操作 AWS 拥有的密钥 在处理期间会临时使用加密数据。这包括范围删除操作以及同时访问静态和非静态数据的操作。
+ 一个客户自主管理型密钥最多可以有 50000 个[授权](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)。与客户自主管理型密钥关联的每个 Amazon Keyspaces 表使用 2 个授权。删除表会释放一个授权。第二个授权用于创建表的自动快照，防止在 Amazon Keyspaces 无意中失去对客户自主管理型密钥的访问权限时发生数据丢失。此授权将在删除表后 42 天释放。