

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

# 使用加密 AWS KMS
<a name="data-protection-encryption"></a>

加密是保护敏感信息的机密性和完整性的一般最佳做法。您应该使用现有的数据分类级别，并且每个级别至少有一个 AWS Key Management Service (AWS KMS) 密钥。**例如，您可以为分类为 “机密” 的数据定义一个 KMS **密**钥，一个用于**仅限内部的数据和一个用于敏感**数据的 KMS 密钥。**这可以帮助您确保只有经过授权的用户才有权使用与每个保密级别关联的密钥。

**注意**  
单个客户托管的 KMS 密钥可以在存储特定类别数据的任意组合 AWS 服务 或您自己的应用程序中使用。在多个工作负载中使用密钥的限制因素 AWS 服务 是控制一组用户对数据的访问所需的使用权限有多复杂。 AWS KMS 密钥策略 JSON 文档必须小于 32 KB。如果此大小限制成为限制，请考虑使用[AWS KMS 授权](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)或创建多个密钥以最大限度地减少密钥策略文档的大小。

您还可以选择在单个密钥中分配用于数据分类的 KMS 密钥，而不是仅依靠数据分类对 KMS 密钥进行分区 AWS 服务。例如，`Sensitive`在亚马逊简单存储服务 (Amazon S3) Simple Service 中标记的所有数据都应使用名称类似的 KMS 密钥进行加密。`S3-Sensitive`您可以在定义的数据分类和 AWS 服务 /或应用程序中将数据进一步分发到多个 KMS 密钥中。例如，您可以删除特定时间段内的某些数据集，在不同的时间段内删除其他数据集。您可以使用资源标签来帮助您识别和排序使用特定 KMS 密钥加密的数据。

如果您为 KMS 密钥选择去中心化管理模式，则应设置防护措施，确保创建具有给定分类的新资源，并使用具有正确权限的预期 KMS 密钥。有关如何使用自动化强制执行、检测和管理资源配置的更多信息，请参阅本指南的[检测和监控](monitoring.md)部分。

**Topics**
+ [使用日志数据加密 AWS KMS](#data-protection-encryption-logs)
+ [默认加密](#data-protection-encryption-by-default)
+ [使用数据库加密 AWS KMS](#data-protection-encryption-databases)
+ [PCI DSS 数据加密使用 AWS KMS](#data-protection-encryption-payments)
+ [将 KMS 密钥与 Amazon EC2 Auto Scaling 一起使用](#data-protection-encryption-autoscaling)

## 使用日志数据加密 AWS KMS
<a name="data-protection-encryption-logs"></a>

许多 AWS 服务公司（例如 [Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html) 和 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)）都提供了加密发送到Amazon S3的日志数据的选项。将[结果从导出 GuardDuty 到 Amazon S3](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_exportfindings.html) 时，必须使用 KMS 密钥。我们建议您加密所有日志数据，并仅向授权委托人（例如安全团队、事件响应人员和审计员）授予解密访问权限。

 AWS 安全参考架构建议创建一个[日志中心 AWS 账户](https://docs.aws.amazon.com/prescriptive-guidance/latest/security-reference-architecture/log-archive.html)。这样做还可以减少密钥管理开销。例如，使用 CloudTrail，您可以创建[组织跟踪](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-trail-organization.html)或[事件数据存储](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake-organizations.html)以记录整个组织中的事件。配置组织跟踪或事件数据存储时，可以在指定的日志账户中指定单个 Amazon S3 存储桶和 KMS 密钥。此配置适用于组织中的所有成员帐户。然后，所有账户都将其 CloudTrail 日志发送到日志账户中的 Amazon S3 存储桶，并使用指定的 KMS 密钥对日志数据进行加密。您需要更新此 KMS 密钥的密钥策略，以授予使用 CloudTrail 该密钥所需的权限。有关更多信息，请参阅 CloudTrail文档[ CloudTrail 中的为其配置 AWS KMS 密钥策略](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/create-kms-key-policy-for-cloudtrail.html)。

为了帮助保护 GuardDuty 和 CloudTrail 日志，Amazon S3 存储桶和 KMS 密钥必须相同 AWS 区域。 [AWS 安全参考架构](https://docs.aws.amazon.com/prescriptive-guidance/latest/security-reference-architecture/welcome.html)还提供了有关日志和多账户架构的指导。在汇总多个区域和账户的日志时，请查看 CloudTrail 文档中的[为组织创建跟踪](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-trail-organization.html)，以了解有关选择加入区域的更多信息，并确保您的集中式日志按设计运行。

## 默认加密
<a name="data-protection-encryption-by-default"></a>

AWS 服务 存储或处理数据通常提供静态加密。此安全功能可在不使用数据时对其进行加密，从而帮助保护您的数据。授权用户仍然可以在需要时访问它。

实现和加密选项各不相同 AWS 服务。默认情况下，许多都提供加密。了解您使用的每项服务的加密工作原理非常重要。下面是一些示例：
+ **Amazon Elastic Block Store (Amazon** EBS) — 默认启用加密后，所有新的亚马逊 EBS 卷和快照副本都将加密。 AWS Identity and Access Management (IAM) 角色或用户无法启动具有未加密卷或不支持加密的卷的实例。此功能可确保存储在 Amazon EBS 卷上的所有数据都经过加密，从而有助于实现安全、合规和审计。有关此服务中加密的更多信息，请参阅 [Amazon EBS 文档中的 Amazon EBS 加密](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html)。
+ **亚马逊简单存储服务 (Amazon S3) S** imple Service — 默认情况下，所有新对象均已加密。除非您指定不同的加密选项，否则 Amazon S3 会自动对每个新对象应用使用 Amazon S3 托管密钥 (SSE-S3) 的服务器端加密。通过在 API 调用中明确说明，IAM 委托人仍然可以将未加密的对象上传到 Amazon S3。在 Amazon S3 中，要强制执行 SSE-KMS 加密，您必须使用带有需要加密条件的存储桶策略。有关策略示例，请参阅 Amazon [S3 文档中的所有写入存储桶的对象都需要 SSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-encryption)。某些 Amazon S3 存储桶会接收和提供大量对象。如果使用 KMS 密钥对这些对象进行加密，则大量 Amazon S3 操作会导致对的大量`GenerateDataKey`和`Decrypt`调用 AWS KMS。这可能会增加您因 AWS KMS 使用而产生的费用。您可以配置 Amazon S3 [存储桶密钥](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)，这样可以显著降低 AWS KMS 成本。有关此服务中加密的更多信息，请参阅 Amazon S3 文档中的[使用加密保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html)。
+ **Amazon D** ynamoDB — DynamoDB 是一项完全托管的 NoSQL 数据库服务，它默认启用服务器端静态加密，您无法将其禁用。我们建议您使用客户托管密钥来加密您的 DynamoDB 表。这种方法可帮助您通过在 AWS KMS 密钥策略中定位特定的 IAM 用户和角色来实现最小权限，实现精细权限和职责分离。在为 DynamoDB 表配置加密设置时，您也可以选择 AWS 托管密钥或 AWS 自有密钥。对于需要高度保护的数据（其中数据只能以明文形式对客户端可见），请考虑使用[AWS 数据库加密 SDK 的客户端加密](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/what-is-database-encryption-sdk.html)。有关此服务中加密的更多信息，请参阅 DynamoDB 文档中的[数据保护](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/data-protection.html)。

## 使用数据库加密 AWS KMS
<a name="data-protection-encryption-databases"></a>

您实施加密的级别会影响数据库的功能。以下是您必须考虑的权衡：
+ 如果您仅使用 AWS KMS 加密，则[支持表的存储将针对 DynamoDB 和亚马逊关系数据库服务 (Amazon RDS) 进行](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EncryptionAtRest.html)加密。这意味着运行数据库的操作系统将存储的内容视为明文。所有数据库函数，包括索引生成和其他需要访问明文数据的高阶函数，都将继续按预期运行。
+ Amazon RDS 在 [Amazon Elastic Block Store (Amazon EBS) 加密](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html)上构建，可为数据库卷提供全磁盘加密。当您使用 Amazon RDS 创建加密数据库实例时，Amazon RDS 会代表您创建一个加密的 Amazon EBS 卷来存储数据库。存储在卷上的静态数据、数据库快照、自动备份和只读副本都使用您在创建数据库实例时指定的 KMS 密钥进行加密。
+ Amazon Redshift 集成 AWS KMS 并创建了四层密钥层次结构，这些密钥用于通过数据级别对集群级别进行加密。启动集群时，您可以[选择使用 AWS KMS 加密](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-db-encryption.html)。在内存中打开（和解密）表时，只有 Amazon Redshift 应用程序和具有适当权限的用户才能看到明文。这与某些商业数据库中提供的*透明*或*基于表的数据加密 (TDE)* 功能大致相似。这意味着所有数据库函数，包括索引生成和其他需要访问明文数据的高阶函数，都将继续按预期运行。
+ 通过[AWS 数据库加密 SDK（和类似工具）实现的客户端数据级加密](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/what-is-database-encryption-sdk.html)意味着操作系统和数据库都只能看到密文。只有当用户从安装了数据库加密 SDK 的客户端访问 AWS 数据库并且有权访问相关密钥时，他们才能查看明文。需要访问明文才能按预期工作的高阶数据库函数（例如索引生成）如果被指示对加密字段进行操作，则将无法运行。选择使用客户端加密时，请确保使用强大的加密机制，以帮助防止针对加密数据的常见攻击。这包括使用强大的加密算法和适当的技术（例如[盐](https://en.wikipedia.org/wiki/Salt_(cryptography))）来帮助缓解密文攻击。

我们建议对 AWS 数据库服务使用 AWS KMS 集成加密功能。对于处理敏感数据的工作负载，应考虑对敏感数据字段进行客户端加密。使用客户端加密时，应考虑对数据库访问的影响，例如 SQL 查询中的联接或索引创建。

## PCI DSS 数据加密使用 AWS KMS
<a name="data-protection-encryption-payments"></a>

中的安全和质量控制 AWS KMS 已经过验证和认证，符合[支付卡行业数据安全标准 (PCI DSS](https://aws.amazon.com/compliance/pci-dss-level-1-faqs/)) 的要求。这意味着您可以使用 KMS 密钥加密主账号 (PAN) 数据。使用 KMS 密钥加密数据可以减轻管理加密库的部分负担。此外，无法从中导出 KMS 密钥 AWS KMS，这减少了人们对加密密钥以不安全的方式存储的担忧。

还有其他方法可以 AWS KMS 用来满足 PCI DSS 的要求。例如，如果您使用 AWS KMS 的是 Amazon S3，则可以将 PAN 数据存储在 Amazon S3 中，因为每项服务的访问控制机制彼此不同。

与往常一样，在审查您的合规要求时，请务必从经验丰富、合格且经过验证的各方那里获得建议。在设计直接使用密钥来保护 PCI DSS 范围内的信用卡交易数据的应用程序时，请注意[AWS KMS 请求配额](https://docs.aws.amazon.com/kms/latest/developerguide/requests-per-second.html)。

由于所有 AWS KMS 请求都已登录 AWS CloudTrail，因此您可以通过查看 CloudTrail 日志来审核密钥使用情况。但是，如果您使用 Amazon S3 存储桶密钥，则没有与每个 Amazon S3 操作相对应的条目。这是因为存储桶密钥会加密您用来加密 Amazon S3 中对象的数据密钥。虽然使用存储桶密钥并不能消除对的所有 API 调用 AWS KMS，但它会减少调用的数量。因此，Amazon S3 对象访问尝试与对的 API 调用之间不再存在 one-to-one匹配 AWS KMS。

## 将 KMS 密钥与 Amazon EC2 Auto Scaling 一起使用
<a name="data-protection-encryption-autoscaling"></a>

[Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) 是一项推荐的服务，用于自动扩展您的亚马逊 EC2 实例。它可以帮助您确保有正确数量的可用实例来处理应用程序的负载。Amazon EC2 Auto Scaling 使用[服务相关角色](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-service-linked-role.html)，该角色为服务提供适当的权限，并在您的账户中授权其活动。要将 KMS 密钥与 Amazon EC2 Auto Scaling 配合使用，您的密 AWS KMS 钥策略必须允许服务关联角色在某些 API 操作中使用您的 KMS 密钥`Decrypt`，例如，这样自动化才能发挥作用。如果 AWS KMS 密钥策略未授权执行操作的 IAM 委托人执行操作，则该操作将被拒绝。有关如何正确应用密钥策略中的权限以允许访问的更多信息，请参阅 Amazon EC2 Auto Scaling 文档[中的 Amazon EC2 Auto Scaling 中的数据保护](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-data-protection.html)。