

# SEC08-BP01 实施安全密钥管理
<a name="sec_protect_data_rest_key_mgmt"></a>

 安全密钥管理包括密钥材料的存储、轮换、访问控制和监控，这些都是保护工作负载的静态数据安全所必需的。

 **期望结果：**您拥有一种可扩展、可重复且自动化的密钥管理机制。该机制对密钥材料强制实施最低权限访问，并在密钥可用性、机密性和完整性之间提供适当的平衡。您可以监控对密钥的访问权限，如果需要轮换密钥材料，则使用自动流程轮换密钥材料。您不让人工操作员访问密钥材料。

**常见反模式：**
+  由人类访问未加密的密钥材料。
+  创建自定义加密算法。
+  访问密钥材料的权限过于宽泛。

 **建立此最佳实践的好处：**通过为您的工作负载建立安全的密钥管理机制，您可以帮助保护您的内容免遭未经授权的访问。此外，您可能需要遵守对数据进行加密的监管要求。有效的密钥管理解决方案可以提供符合这些法规的技术机制，进而保护密钥材料。

 **在未建立这种最佳实践的情况下暴露的风险等级：**高 

## 实施指导
<a name="implementation-guidance"></a>

 静态数据加密是一项基本的安全控制措施。为实施这种控制措施，工作负载需要一种机制，来安全地存储和管理用于加密静态数据的密钥材料。

 AWS 提供的 AWS Key Management Service（AWS KMS）可为 AWS KMS 密钥提供持久、安全和冗余的存储。[许多 AWS 服务都与 AWS KMS 集成](https://aws.amazon.com/kms/features/#integration)来支持对您的数据进行加密。AWS KMS 使用经 FIPS 140-3 Level 3 验证的硬件安全模块来保护您的密钥。不存在以纯文本格式导出 AWS KMS 密钥的机制。

 使用多账户策略部署工作负载时，应将 AWS KMS 密钥与使用这些密钥的工作负载保存在同一个账户中。[This distributed model](https://docs.aws.amazon.com/prescriptive-guidance/latest/security-reference-architecture/application.html#app-kms) 将管理 AWS KMS 密钥的责任交给您的团队。在其它用例中，贵组织可以选择将 AWS KMS 密钥存储到集中式账户中。这种集中式结构需要额外的策略，以实现工作负载账户访问集中式账户中存储的密钥所需的跨账户访问，但可能更适用于多个 AWS 账户 共享单个密钥的用例。

 无论密钥材料存储在哪里，都应通过使用 [key policies](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) 和 IAM 策略来严格控制对密钥的访问。密钥策略是控制对 AWS KMS 密钥的访问权限的主要方式。此外，AWS KMS 密钥授权可以提供对 AWS 服务的访问权限，从而代表您加密和解密数据。请查看 [guidance for access control to your AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies-best-practices.html)。

 您应监控加密密钥的使用情况，以检测异常的访问规律。使用 AWS 托管密钥和 AWS KMS 中存储的客户自主管理型密钥执行的操作可以记录在 AWS CloudTrail 中，并应定期进行审查。特别注意监控密钥销毁事件。为了减少意外或恶意破坏密钥材料的情况，密钥销毁事件不会立即删除密钥材料。尝试删除 AWS KMS 中的密钥时会经历一个 [waiting period](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html#deleting-keys-how-it-works)，默认为 30 天且最少为 7 天，这让管理员有时间审核这些操作并在必要时回滚请求。

 大多数 AWS 服务使用 AWS KMS 的方式对您来说都是透明的，您只需要决定是使用 AWS 托管密钥还是客户自主管理型密钥。如果您的工作负载需要直接使用 AWS KMS 来加密或解密数据，则应使用 [envelope encryption](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping) 来保护您的数据。此 [AWS 加密开发工具包](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html)可为您的应用程序提供客户端加密原语，来实施信封加密并与 AWS KMS 集成。

### 实施步骤
<a name="implementation-steps"></a>

1.  为密钥确定合适的[密钥管理选项](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt)（AWS 托管或客户自主管理）。

   1.  为便于使用，AWS 为大多数服务提供 AWS 自有和 AWS 托管密钥，这样，无需管理密钥材料或密钥策略，即可提供静态加密功能。

   1.  使用客户自主管理型密钥时，请考虑使用默认密钥存储，以便在敏捷性、安全性、数据主权和可用性之间取得最佳平衡。其他用例可能需要使用附带 [AWS CloudHSM](https://aws.amazon.com/cloudhsm/) 的自定义密钥存储或使用[外部密钥存储](https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html)。

1.  查看您用于工作负载的服务列表，以了解 AWS KMS 如何与该服务集成。例如，EC2 实例可以使用加密的 EBS 卷，验证从这些卷创建的 Amazon EBS 快照是否也使用客户自主管理型密钥进行加密，并减少未加密快照数据的意外泄露。

   1.  [AWS 服务如何使用 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/service-integration.html) 

   1.  有关 AWS 服务提供的加密选项的详细信息，请参阅该服务的用户指南或开发人员指南中的“静态加密”主题。

1.  实施 AWS KMS：AWS KMS 使您可以轻松创建和管理密钥，并控制各种 AWS 服务和应用程序中的加密使用情况。

   1.  [入门：AWS Key Management Service（AWS KMS）](https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html) 

   1.  请查看 [AWS KMS 密钥访问控制的最佳实践](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies-best-practices.html)。

1.  考虑使用 AWS Encryption SDK：当应用程序需要在客户端加密数据时，使用包含 AWS KMS 集成的 AWS Encryption SDK。

   1.  [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) 

1.  启用 [IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) 以自动审查是否存在过于宽泛的 AWS KMS 密钥策略并相应地发出通知。

   1.  考虑使用 [custom policy checks](https://docs.aws.amazon.com/access-analyzer/latest/APIReference/API_CheckNoPublicAccess.html)，来验证资源策略更新是否不会授予对 KMS 密钥的公有访问权限。

1.  启用 [Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/kms-controls.html) 以便在密钥策略配置错误、计划删除密钥或存在未启用自动轮换的密钥时，接收通知。

1.  确定适合您的 AWS KMS 密钥的日志记录级别。由于对 AWS KMS 的调用（包括只读事件）会被记录下来，因此与 AWS KMS 关联的 CloudTrail 日志可能会变得非常庞大。

   1.  一些组织倾向于将 AWS KMS 日志活动分成单独的跟踪。有关更多详细信息，请参阅《AWS KMS 开发者指南》的[使用 CloudTrail 记录 AWS KMS API 调用](https://docs.aws.amazon.com/kms/latest/developerguide/logging-using-cloudtrail.html)部分。

## 资源
<a name="resources"></a>

 **相关文档：**
+  [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 
+  [AWS 加密服务和工具](https://docs.aws.amazon.com/crypto/latest/userguide/awscryp-overview.html) 
+  [利用加密保护 Amazon S3 数据](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingEncryption.html) 
+  [信封加密](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping) 
+  [数字主权承诺](https://aws.amazon.com/blogs/security/aws-digital-sovereignty-pledge-control-without-compromise/) 
+  [揭开 AWS KMS 密钥操作的神秘面纱、自带密钥、自定义密钥库和加密文字可移植性](https://aws.amazon.com/blogs/security/demystifying-kms-keys-operations-bring-your-own-key-byok-custom-key-store-and-ciphertext-portability/) 
+  [AWS Key Management Service 加密详情](https://docs.aws.amazon.com/kms/latest/cryptographic-details/intro.html) 

 **相关视频：**
+  [ 中的加密原理AWS](https://youtu.be/plv7PQZICCM) 
+  [在 AWS 上保护您的数据块存储](https://youtu.be/Y1hE1Nkcxs8) 
+  [AWS data protection: Using locks, keys, signatures, and certificates](https://www.youtube.com/watch?v=lD34wbc7KNA) 

 **相关示例：**
+  [使用 AWS KMS 实施高级访问控制机制](https://catalog.workshops.aws/advkmsaccess/en-US/introduction) 