如何使用 CloudWatch Events 和 Amazon SNS 监控对我的 EC2 Linux 实例上设置的安全组所做的更改?

上次更新时间:2020 年 5 月 12 日

我为我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例设置了一个安全组。如何使用 Amazon CloudWatch Events 和 Amazon Simple Notification Service (Amazon SNS) 监控对我的安全组所做的更改?

简短描述

创建一条在调用 API 以修改安全组时触发的 CloudWatch Events 规则。然后,为与您的规则匹配的事件配置 Amazon SNS 通知。

解决方法

创建并订阅 Amazon SNS 主题

2.    在 SNS 控制面板上,依次选择主题和创建主题。

3.    输入主题名称(例如,my-topic)。

4.    选择创建主题。

5.    记下主题的 Amazon 资源名称 (ARN)(例如,arn:aws:sns:us-east-1:123123123123:my-topic)。

6.    选择创建订阅。

7.    对于主题 ARN,输入您在步骤 5 中记下的 ARN。

8.    对于协议,选择电子邮件。

9.    对于终端节点,输入用于接收通知的电子邮件地址,然后选择创建订阅。

您将收到一封用于确认订阅的电子邮件。确认订阅之后,该电子邮件地址将会在触发 SNS 主题时收到通知。

通过 CloudWatch 控制台创建针对事件触发的 CloudWatch Events 规则

2.    在导航窗格中的事件下,选择规则,然后选择创建规则。

3.    选择事件模式。

4.    对于服务名称,选择 EC2。

5.    对于事件类型,选择通过 CloudTrail 进行 AWS API 调用。

6.    选择特定操作并提供以下 API 调用。这些 API 调用用于添加或删除安全组规则。

AuthorizeSecurityGroupIngress
AuthorizeSecurityGroupEgress
RevokeSecurityGroupIngress
RevokeSecurityGroupEgress
这些设置会创建以下事件模式。
{
"source": [
"aws.ec2"
],
"detail-type": [
"AWS API Call via CloudTrail"
],
"detail": {
"eventSource": [
"ec2.amazonaws.com"
],
"eventName": [
"AuthorizeSecurityGroupIngress",
"AuthorizeSecurityGroupEgress",
"RevokeSecurityGroupIngress",
"RevokeSecurityGroupEgress"
]
}
}

7.   选择添加目标。

8.    在目标列表中,选择 SNS 主题。

9.    对于主题,选择您创建的主题。

注意:默认情况下,已在配置输入下选择匹配的事件。 匹配的事件会将事件的整个 JSON 输出传递至 SNS 主题。如果您不希望传递整个 JSON 输出,请选择输入转换器以筛选事件信息。使用输入转换器自定义事件文本,以创建易于读取的消息,而不是将整个 JSON 输出发送到您的目标。例如,您可以为输入路径使用以下键值对。

{"name":"$.detail.requestParameters.groupId","source":"$.detail.eventName","time":"$.time","value":"$.detail"}
在输入模板中,输入您希望在消息中显示的文本和变量:
"A API call was made against the security group on with the below details"
" "

如需与使用输入转换器选项相关的更多信息,请参阅教程:使用输入转换器自定义要传递给事件目标的内容。

11.    选择配置详细信息。

12.    在配置规则详细信息页面上,输入名称和可选描述。对于状态,保持选中已启用方框。

13.    选择创建规则。