AWS Chatbot
将 AWS 通知和命令执行集成到 Slack 和 Microsoft Teams 中,实现 ChatOps 的服务
概述
AWS Chatbot 是一项将 AWS 运维通知推送到 Slack 频道或 Microsoft Teams 频道,并允许从聊天界面执行 AWS CLI 命令的服务。通过 SNS 主题将 CloudWatch 告警、AWS Health 事件、Security Hub 检测结果、Budgets 告警等通知到聊天中,收到通知后可直接在聊天中执行调查和应对操作,实现 ChatOps 工作流。
频道设置与 IAM 角色权限管理
Chatbot 的设置分为聊天客户端 (Slack 工作区或 Teams 租户) 的授权和频道设置两个阶段。以 Slack 为例,首先通过 OAuth 将 AWS 账户与 Slack 工作区关联,然后为各个频道创建设置。每个频道设置关联一个 IAM 角色,控制该频道可执行的 AWS 操作范围。例如,可以为生产环境通知频道分配只读 IAM 角色,禁止 Lambda 调用或 EC2 停止等变更操作。另一方面,为事件响应频道分配具有有限写入权限的角色,允许紧急时的资源操作是实务中的常见设计。设置护栏策略可以进一步缩小 IAM 角色的权限范围。频道设置可通过 CloudFormation 进行代码管理,一致地部署多账户、多频道的配置。
SNS 通知推送与格式自定义
Chatbot 通过订阅 SNS 主题接收通知。CloudWatch 告警、AWS Health、Security Hub、Budgets、CodePipeline 等主要服务的通知会被 Chatbot 自动转换为富格式并显示在聊天中。对于 CloudWatch 告警,告警名称、状态转换、指标图表链接会以格式化的卡片形式显示,工程师仅通过查看通知即可掌握情况。结合 EventBridge 规则和 SNS,自定义事件 (部署完成、批处理结果等) 也可以通知到聊天中。通知过滤通过 SNS 订阅筛选策略控制,设计时应避免低重要性告警淹没频道。实务中,将严重告警专用频道和信息通知频道分离,确保值班工程师不会错过真正需要处理的通知是很重要的。
从聊天执行 AWS CLI 命令
Chatbot 最大的特点是可以直接从聊天界面执行 AWS CLI 命令。在 Slack 消息栏中输入 @aws 后跟命令,即可使用频道关联的 IAM 角色权限执行命令。例如,@aws lambda list-functions 可获取账户内的 Lambda 函数列表,@aws ecs describe-services --cluster production 可确认 ECS 服务状态。命令执行结果会发布到频道中,团队所有成员都能共享操作内容和结果,提高事件响应时的透明度。读取类命令 (describe、list、get) 默认允许,但变更类命令 (create、delete、update) 需要在频道设置中明确允许。命令执行日志记录在 CloudTrail 中,可以事后追踪谁在何时执行了什么命令。在大型组织中,可以将命令执行设为审批制。