

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

# 当 AWS KMS 密钥的密钥状态发生变化时获取 Amazon SNS 通知
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes"></a>

*Shubham Harsora、Aromal Raj Jayarajan 和 Navdeep Pareek，Amazon Web Services*

## Summary
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes-summary"></a>

删除与 AWS Key Management Service（AWS KMS）密钥关联的数据和元数据后，该密钥将丢失。删除是不可逆的，您无法恢复丢失的数据（包括加密数据）。您可以设置通知系统，提醒您 AWS KMS 密钥的[密钥状态](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html#key-state-cmk-type)发生更改，从而防止数据丢失。

此模式向您展示如何监控 AWS KMS 密钥的状态变化，方法是使用亚马逊 EventBridge 和亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 在 AWS KMS 密钥的密钥状态更改为或时自动发出通知。`Disabled` `PendingDeletion`例如，如果用户尝试禁用或删除 AWS KMS 密钥，您将收到一封电子邮件通知，其中包含有关尝试更改状态的详细信息。您也可以使用此模式安排删除 AWS KMS 密钥。

## 先决条件和限制
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes-prereqs"></a>

**先决条件**
+ 一个拥有 AWS Identity and Access Management (IAM) 用户的有效 Amazon Web Services account
+ 一个 [AWS KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html)

## 架构
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes-architecture"></a>

**技术堆栈**
+ Amazon EventBridge
+ AWS Key Management Service（AWS KMS）
+ Amazon Simple Notification Service（Amazon SNS）

**目标架构**

下图显示了一种架构，用于构建自动监控和通知流程，以检测 AWS KMS 密钥状态的任何更改。

![用于构建自动监控和通知流程的架构](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2534df87-a6fd-4360-9b5d-4a8b1f533de3/images/0cb6a6b0-405b-4d26-ad04-2067176aa086.png)


下图显示了如下工作流：

1. 用户禁用或计划删除 AWS KMS 密钥。

1.  EventBridge 规则评估计划`Disabled`或`PendingDeletion`事件。

1. 该 EventBridge 规则调用了 Amazon SNS 主题。

1. Amazon SNS 会向用户发送一封电子邮件通知消息。

**注意**  
您可以自定义电子邮件消息以满足组织的需求。我们建议包括有关使用 AWS KMS 密钥的实体的信息。这可以帮助用户了解删除 AWS KMS 密钥的影响。您还可以安排在 AWS KMS 密钥删除前一两天发送提醒电子邮件通知。

**自动化和扩展**

AWS CloudFormation 堆栈部署了所有必要的资源和服务，以使这种模式发挥作用。您可以在单个账户中独立实施该模式，也可以将 [AWS 用 CloudFormation StackSets于 AWS Org](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) anizations 中的多个独立账户或[组织单位](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_ous.html)。

## 工具
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes-tools"></a>
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 可帮助您设置 AWS 资源，快速一致地配置这些资源，并在 AWS 账户和 AWS 区域的整个生命周期中对其进行管理。此模式的 CloudFormation 模板描述了您需要的所有 AWS 资源，并 CloudFormation 为您预置和配置这些资源。
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) 是一项无服务器事件总线服务，可帮助您将应用程序与来自各种来源的实时数据连接起来。 EventBridge 提供来自您自己的应用程序和 AWS 服务的实时数据流，并将这些数据路由到目标，例如 AWS Lambda。 EventBridge 简化了构建事件驱动架构的过程。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 可帮助您创建和控制加密密钥，以帮助保护您的数据。
+ [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 可帮助您协调和管理发布者与客户端（包括 Web 服务器和电子邮件地址）之间的消息交换。

**代码**

此模式的代码可在 GitHub [监控 AWS KMS 密钥禁用和计划删除](https://github.com/aws-samples/aws-kms-deletion-notification)存储库中找到。

## 操作说明
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes-epics"></a>

### 部署 CloudFormation 模板
<a name="deploy-the-cloudformation-template"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 克隆存储库。 | 运行以下命令，将 Mon GitHub [itor AWS KMS 密钥禁用和计划删除](https://github.com/aws-samples/aws-kms-deletion-notification)存储库克隆到本地计算机：<br />`git clone https://github.com/aws-samples/aws-kms-deletion-notification` | AWS 管理员、云架构师 | 
| 更新模板的参数。 | 在代码编辑器中，打开您从存储库中克隆的`Alerting-KMS-Events.yaml` CloudFormation 模板，然后更新以下参数：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes.html) | AWS 管理员、云架构师 | 
| 部署 CloudFormation 模板。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes.html) | AWS 管理员、云架构师 | 

### 确认订阅
<a name="confirm-the-subscription"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确认订阅电子邮件。 |  CloudFormation 模板成功部署后，Amazon SNS 会向您在模板中 CloudFormation 提供的电子邮件地址发送订阅确认消息。<br />要接收通知，您必须确认此电子邮件订阅。有关更多信息，请参阅 Amazon SNS 开发人员指南中的[确认订阅](https://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.confirm.html)。 | AWS 管理员、云架构师 | 

### 测试订阅通知
<a name="test-the-subscription-notification"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 禁用 AWS KMS 密钥。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes.html) | AWS 管理员 | 
| 验证订阅。 | 确认您收到 Amazon SNS 通知电子邮件。 | AWS 管理员 | 

### 清理 资源
<a name="clean-up-resources"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 删除 CloudFormation 堆栈。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes.html) | AWS 管理员 | 

## 相关资源
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes-resources"></a>
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/)（AWS 文档）
+ 在 [AWS CloudFormation 控制台上创建堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)（AWS CloudFormation 文档）
+ [在 AWS 上构建事件驱动型架构](https://catalog.us-east-1.prod.workshops.aws/workshops/63320e83-6abc-493d-83d8-f822584fb3cb/en-US)（AWS 研习会参与平台 Workshop Studio 文档）
+ [AWS Key Management Service（AWS KMS）最佳实践](https://d1.awsstatic.com/whitepapers/aws-kms-best-practices.pdf)（AWS 白皮书）
+ [AWS Key Management Service（AWS KMS）的安全最佳实践](https://docs.aws.amazon.com/kms/latest/developerguide/best-practices.html)（AWS KMS 开发人员指南）

## 附加信息
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes-additional"></a>

默认情况下，Amazon SNS 会在传输过程中提供加密。为了与安全最佳实践保持一致，您还可以使用 AWS KMS 客户托管密钥为 Amazon SNS 启用服务器端加密。