使用 CloudWatch Events 记录 AWS API 调用(启动aws SSM SESSION),并邮件通知.
Amazon CloudWatch Events 提供近乎实时的系统事件流,这些系统事件描述 Amazon Web Services (AWS) 资源的变化。通过使用可快速设置的简单规则,您可以匹配事件并将事件路由到一个或多个目标函数或流。CloudWatch Events 会在发生操作更改时感知到这些更改。CloudWatch Events 将响应这些操作更改并在必要时采取纠正措施,方式是发送消息以响应环境、激活函数、进行更改并捕获状态信息。
您还可以使用 CloudWatch Events 来计划使用 cron 或 rate 表达式在某些时间自行触发的自动化操作。
您可以将以下 AWS 服务配置为 CloudWatch Events 的目标:
- Amazon EC2 实例
- AWS Lambda 函数
- Amazon Kinesis Data Streams 中的流
- Amazon Kinesis Data Firehose 中的传输流
- Amazon ECS 任务
- Systems Manager Run Command
- Systems Manager 自动化
- AWS Batch 个作业
- Step Functions 状态机
- CodePipeline 中的管道
- CodeBuild 项目
- Amazon Inspector 评估模板
- Amazon SNS 主题
- Amazon SQS 队列
内置目标 —EC2 CreateSnapshot API call、EC2 RebootInstances API call、EC2 StopInstances API call 和 EC2 TerminateInstances API call。
另一个 AWS 账户的默认事件总线
概念:
事件 —事件表示 AWS 环境中的更改。AWS 资源可以在其状态更改时生成事件。例如,Amazon EC2 在 EC2 实例的状态从待处理更改为正在运行时生成事件,Amazon EC2 Auto Scaling 在启动或终止实例时生成事件。AWS CloudTrail 在您执行 API 调用时发布事件。您可以生成自定义应用程序级事件并将它们发布到 CloudWatch Events。您还可以设置定期生成的计划事件。有关生成事件的服务的列表,以及来自每项服务的示例事件,请参阅 受支持服务的 CloudWatch Events 事件示例。
目标—目标负责处理事件。目标可包括 Amazon EC2 实例、AWS Lambda 函数、Kinesis 流、Amazon ECS 任务、Step Functions 状态机、Amazon SNS 主题、Amazon SQS 队列和内置目标。目标接收 JSON 格式的事件。
规则—规则匹配传入事件并将其路由到目标进行处理。单个规则可路由到多个目标,所有这些目标将并行处理。规则不按特定顺序处理。这可让组织的不同部门能够查找和处理他们感兴趣的事件。规则可以定制发送到目标的 JSON,方法是仅传递特定部分或使用常量来覆盖 JSON。
下面使用一个ssm事件(start-session)来触发邮件通知:
1. 必须使用 AWS CloudTrail 设置跟踪才能匹配这些事件。如果您没有跟踪,请完成以下步骤 (由于下面使用了的事件类型(AWS-API Call via CloudTrail),如果没用到此类型的事件,就可以跳过这一步)。
创建跟踪
- 在 https://console.amazonaws.cn/cloudtrail/ 打开 CloudTrail 控制台。
- 依次选择 Trails 和 Add new trail。
- 对于 Trail name,键入跟踪的名称。
- 对于 S3 存储桶,键入新存储桶的名称,CloudTrail 将在其中传输日志。
选择 Create。
2. 在CloudTrail的事件中创建一条规则,并指定事件触发的目标为"SNS主题"
创建规则
3. 测试,你现在可以在aws的cli中使用ssm连接实例:
# aws ssm start-session --target i-43539530kk3k3n
大概1分钟内,你就可以收到邮件,内容如下:
"帐号: user-xxx 启动ssm session;连接的instance: {target:i-43539530kk3k3n}; 登录IP: 58.21.16.216 ,事件时间:2019-05-11T06:12:26Z,登录返回状态:{sessionId:user-xxx-0419e4ff40f7av57c,tokenValue:Value hidden due to security reasons.,streamUrl:Value hidden due to security reasons.} ;"
4. 注释:
如果目标的配置输入,选择“输入转换器”:
- 输入路径:以键值的形式定义,例如{"state": "$.detail.state","instance":"$.detail.instance-id"}
- 输入模板:一个字符串,其中包含将使用输入路径中定义的值填充的占位符,例如:"实例<instance>的状态为<state>" ;这里特别注意需要用双引号,不然会提示规则不匹配。
如果你不知道“特定操作”该使用哪个键值,可以先选择配置输入的“已匹配的事件”,这样它会通过sns发送一条完整的信息到你的邮箱,你再根据邮件的内容查找你需要的键值。
收到的邮件是一个Json格式的信息,如下:
json中的eventName的value 就是 “特定操作”使用的键值 ,这里是“StartSession”
注意:
CloudWatch警报和规则是触发的sns是不一样的:
1.使用规则的事件触发的通知,只要检查到事件,就会通过sns发送邮件。
2. 警报中触发的sns邮件发送,只有状态变化(如:从正常->警报),才触发sns发送邮件如:AWS-利用CloudTrail与CloudWatch实现警报。
其他:
除了事件触发,还支持创建按计划触发的 CloudWatch Events规则,例如设置每天早上5点触发一个执行Lambda的任务,相当与一个linux 中的crontab 。
参考:
https://docs.amazonaws.cn/AmazonCloudWatch/latest/events/LogAPICall.html