tharlesson-platform/sre-automations
GitHub: tharlesson-platform/sre-automations
一个基于 Terraform 与 AWS 的 SRE 自动化平台,用于降 toil、稳治理与安全的事件响应。
Stars: 2 | Forks: 1
# AWS SRE 自动化平台 (Terraform IaC)
面向 AWS 的 SRE 自动化平台,专注于减少繁琐工作、治理、事件响应、安全运维和成本控制。
此代码库交付了 **P0 + P1 实现**,采用模块化标准,并为后续扩展做好了准备。
## 达成目标
- Terraform `>= 1.6`,模块化且可复用。
- 多环境(`dev`、`stage`、`prod`),使用 `tfvars` 和远程后端(`S3 + DynamoDB lock`)。
- 使用 Python 编写的 Lambdas,包含结构化日志、重试和错误处理。
- 为关键工作流配备带有重试/捕获/分支的 Step Functions。
- EventBridge Scheduler 和 EventBridge Rules,支持针对每个自动化任务启用/禁用。
- 每个自动化任务遵循 IAM least privilege。
- 为破坏性操作提供 Dry-run 和显式标志。
- 所有适用的资源均强制使用以下标签:
- `Environment`
- `Application`
- `Owner`
- `CostCenter`
- `ManagedBy=Terraform`
- 命名标准:`---`
## 仓库结构
```
.
|-- modules/
| |-- common/
| |-- lambda_automation/
| |-- eventbridge_schedule/
| |-- sfn_automation/
| |-- observability/
| |-- automation_scheduler/
| |-- automation_tag_auditor/
| |-- automation_cert_secret_monitor/
| |-- automation_orphan_cleanup/
| |-- automation_incident_evidence/
| |-- automation_ecs_rollback/
| |-- automation_backup_validation/
| |-- automation_ssm_runbooks/
| |-- automation_sg_exposure_remediation/
| |-- automation_finops_report/
| |-- automation_drift_detection/
| |-- automation_approval_bridge/
|-- stacks/
| |-- dev/
| |-- stage/
| |-- prod/
|-- lambdas/
| |-- common/
| |-- p0_environment_scheduler/
| |-- p0_tag_auditor/
| |-- p0_cert_secret_monitor/
| |-- p0_orphan_cleanup/
| |-- p0_incident_evidence/
| |-- p0_ecs_rollback/
| |-- p0_backup_validation/
| |-- p1_ssm_runbooks/
| |-- p1_sg_exposure_remediation/
| |-- p1_finops_report/
| |-- p1_drift_detection/
| |-- p1_approval_bridge/
|-- stepfunctions/
| |-- p0_ecs_rollback.asl.json
| |-- p0_backup_validation.asl.json
| |-- p1_sg_exposure_remediation.asl.json
|-- ssm/
| |-- documents/
| |-- patching.yaml
| |-- diagnostics.yaml
| |-- cleanup_disk.yaml
| |-- service_restart.yaml
| |-- sg_remediation_approval.yaml.tmpl
|-- drift/
| |-- baseline.initial.json
| |-- README.md
|-- env/
| |-- dev/
| |-- stage/
| |-- prod/
|-- tests/
| |-- lambdas/
|-- Makefile
|-- requirements-dev.txt
|-- .github/workflows/terraform-ci.yml.example
```
## 已交付的 P0 自动化
### 1) 非生产环境调度器
- 启动/停止 EC2 和 RDS。
- 缩容/恢复 ECS services。
- 缩容/恢复 Auto Scaling Groups。
- 基于标签过滤(`scheduler_tag_selector`)。
- 通过 EventBridge Scheduler 进行调度。
- Lambda 支持在 EC2 上执行可选的 SSM 停机前操作。
### 2) 强制标签审计
- 检测缺少强制标签的资源。
- 通过 SNS 发出警报。
- 可选的自动修复(`AUTO_REMEDIATE`)并支持 dry-run。
### 3) 证书和密钥监控器
- 检查即将过期的 ACM 证书。
- 检查即将轮换或处于异常状态的 secrets。
- 通过 SNS 发出警报。
### 4) 受控的孤儿资源清理
- 旧的快照。
- 孤立的 EBS 卷。
- 孤立的 ENIs。
- 未使用的 Elastic IPs。
- 旧的(未打标签的)ECR 镜像。
- 旧的 Log groups。
- 报告模式(`dry_run=true`)以及受标志保护的执行。
### 5) 事件证据收集器
- 由告警事件(EventBridge Rule)触发。
- 收集:
- 告警上下文和指标
- 近期日志
- ECS/EKS 事件
- target groups 状态
- 近期部署事件
- 将 JSON 保存至 S3 并通过 SNS 发送通知。
### 6) ECS 回滚工作流 (Step Functions)
- 找到上一个稳定的版本。
- 更新 ECS service 以执行回滚。
- 通过受控的重试等待稳定。
- 验证 health checks (target groups)。
- 通过 SNS 通知成功/失败。
### 7) 备份和恢复验证 (Step Functions)
- 找到最新的快照。
- 验证保留窗口。
- 临时恢复(在标志允许时)。
- 冒烟测试。
- 清理临时资源。
- 证据存入 S3 + SNS 通知。
## 已交付的 P1 自动化
### 8) 使用 SSM 进行补丁修复和运维 runbooks
- 具有独立调度机制的补丁修复窗口和运维 runbook 窗口。
- 在执行 `SendCommand` 之前提供可选的手动批准。
- 支持通过标签选择 targets。
- 复用仓库中带有版本控制的 SSM 文档。
### 9) 暴露的 Security Groups 修复
- 检测向 `0.0.0.0/0` 和 `::/0` 开放的关键端口。
- 带有手动批准门控的 Step Functions 工作流。
- 可选的修复,受安全标志控制。
- 使用带有 `approved=true` 的 Runbook SSM Automation 进行运维审批。
### 10) 自动化 FinOps 报告
- 按账户成本。
- 按服务成本。
- 按标签成本。
- 通过高级启发式算法找出主要浪费:
- 高成本服务
- 未打标签的成本
- 未充分利用的 Savings Plans
- 未充分利用的 Reserved Instances
- 计算优化器(Compute Optimizer)提供的 Right sizing 机会
- 在 S3 中输出 JSON 和 CSV 格式。
### 11) 运维配置偏移检测
- 检测 Security Groups、ECS Services、Listeners、SSM 参数和标签中的漂移。
- 与 S3 中的基线进行比对。
- 生成带有 SNS 警报的结构化报告。
- 可选通过 Terraform 上传初始基线。
### 12) 审批集成与 ChatOps/ITSM
- 专用于审批请求的 SNS 主题。
- 用于将审批事件转发至 webhooks 的 Bridge Lambda。
- 同时支持 ChatOps 频道和 ITSM。
## 补充 CLI 工具
本仓库依然是 IaC 基础和托管自动化核心。为了便于故障排除、运维验证以及在终端中进行辅助操作,该平台现在配备了专门的兄弟仓库:
- `aws-sre-doctor`:针对 ECS、ALB、IAM、配额、DNS 和 AWS API 可达性的运维故障排除。
- `backup-restore-validator`:专注于 RTO/RPO 和证据的可恢复性验证。
- `secrets-drift-detector`:在环境之间安全比对 secrets 的结构化漂移。
- `cloud-cost-waste-finder`:针对运维浪费和 FinOps 的实用启发式检测。
- `runbook-executor`:带有 dry-run 和审批门控的可审计 runbook 执行。
- `incident-timeline-builder`:证据汇总和 timeline/postmortem 构建。
推荐使用流程:
- 在本仓库中配置并运维 AWS 自动化任务;
- 在自动化执行前后使用 CLI 进行诊断、验证和取证;
- 将 CLI 生成的产物附在事件、变更和事后复盘记录中。
## 要求
- Terraform >= 1.6
- 已通过有效配置文件/角色认证的 AWS CLI
- Python 3.11+(用于本地测试)
## 按环境部署
### 1. 调整远程后端
编辑以下文件:
- `env/dev/backend.hcl`
- `env/stage/backend.hcl`
- `env/prod/backend.hcl`
填入:
- 用于 state 的 S3 bucket
- 用于锁定的 DynamoDB 表
- 各环境特定的 key
### 2. 调整各环境变量
编辑:
- `env/dev/terraform.tfvars`
- `env/stage/terraform.tfvars`
- `env/prod/terraform.tfvars`
### 3. 初始化并应用
```
# 开发
cd stacks/dev
terraform init -reconfigure -backend-config=../../env/dev/backend.hcl
terraform plan -var-file=../../env/dev/terraform.tfvars
terraform apply -var-file=../../env/dev/terraform.tfvars
# 预发布
cd ../stage
terraform init -reconfigure -backend-config=../../env/stage/backend.hcl
terraform plan -var-file=../../env/stage/terraform.tfvars
terraform apply -var-file=../../env/stage/terraform.tfvars
# 生产
cd ../prod
terraform init -reconfigure -backend-config=../../env/prod/backend.hcl
terraform plan -var-file=../../env/prod/terraform.tfvars
terraform apply -var-file=../../env/prod/terraform.tfvars
```
## 实用命令
```
make fmt
make validate STACK=dev
make plan STACK=dev
make apply STACK=dev
make test
```
## 安全与运维
- 每个自动化任务均遵循 IAM least privilege(专用 roles)。
- 可配置的日志保留策略。
- S3 在适用的情况下开启加密并阻止公共访问。
- Lambdas 配备 DLQ(`lambda_automation` 模块)。
- 破坏性/敏感自动化操作默认采用 Dry-run。
- 必须使用特定标志才能启用破坏性操作(`allow_destructive_actions`、`allow_restore`)。
## 可观测性
- 集中式 SNS 警报通知(`automation_alerts`)。
- 基线告警针对:
- `AWS/Lambda` 指标 `Errors`
- `AWS/States` 指标 `ExecutionsFailed`
## 建议的 CI
该仓库现已在 `.github/workflows/ci.yml` 中包含实际的工作流。
- `terraform fmt -check`
- `terraform validate`
- 按模块和按 stack 进行 `terraform validate`
- 针对 P0/P1 Lambda 处理程序的 `pytest`
## 测试
`tests/lambdas` 中包含用于验证 P0/P1 处理程序基本行为的最低限度测试。
```
pip install -r requirements-dev.txt
pytest -q tests
```
## 建议的后续步骤
1. 使用环境中的真实资源填充 `drift/baseline.initial.json`。
2. 在首次 apply 时启用 `drift_detection_publish_initial_baseline=true`。
3. 配置 webhooks `approval_bridge_chatops_webhook_url` 和/或 `approval_bridge_itsm_webhook_url`。
4. 执行 SSM runbook `${name_prefix}-sg-remediation-approval` 进行运维审批。
## 建议的 P2 任务
1. 用于平台变更的维护模式和冻结窗口。
2. 带有人员审批轨迹的成本异常工作流。
3. 集成到 GitOps 生态系统中的 Argo Rollouts/EKS 回滚。
4. 在 Jira 中自动创建事件/问题/变更记录。
## 事件示例
- `examples/events/backup-validation.json`
- `examples/events/incident-evidence.json`
## 设计说明
- 自动化的核心逻辑未使用通用的社区模块。
- 实现优先考虑清晰度和运维可控性,通过小型且可复用的模块进行组合。
## 许可证
本项目基于 Apache License 2.0 授权。有关更多详细信息,请参阅 `LICENSE` 文件。
## 作者
**Tharlesson**
GitHub: https://github.com/tharlesson
标签:AWS, DPI, ECS, SRE自动化, Terraform, 事件响应, 成本管理, 运维平台