tharlesson/sre-automations
GitHub: tharlesson/sre-automations
面向 AWS 的 SRE 自动化平台,通过 Terraform IaC 实现资源调度、标签治理、事件响应、成本控制和安全修复等运维任务的标准化与自动化。
Stars: 0 | Forks: 0
# AWS SRE 自动化平台 (Terraform IaC)
面向 AWS 的 SRE 自动化平台,专注于减少 toil、治理、事件响应、安全运营和成本控制。
该基础版本实现了 **P0 + P1**,采用模块化标准,并准备好进行额外扩展。
## 已实现目标
- Terraform `>= 1.6`,模块化且可复用。
- 多环境 (`dev`, `stage`, `prod`),使用 `tfvars` 和远程后端 (`S3 + DynamoDB lock`)。
- Python Lambdas,包含结构化日志、重试和错误处理。
- Step Functions,针对关键工作流包含重试/捕获/分支逻辑。
- EventBridge Scheduler 和 EventBridge Rules,支持按自动化任务启用/禁用。
- 每个自动化任务的 IAM 最小权限原则。
- 针对破坏性操作的 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 服务的缩容/恢复。
- Auto Scaling Groups 的缩容/恢复。
- 基于标签过滤 (`scheduler_tag_selector`)。
- 通过 EventBridge Scheduler 调度。
- Lambda 可选支持在 EC2 上执行 SSM pre-stop。
### 2) 强制标签审计
- 检测缺少强制标签的资源。
- 通过 SNS 报警。
- 支持 dry-run 模式的自动修复选项 (`AUTO_REMEDIATE`)。
### 3) 证书和 Secrets 监控
- 检查即将过期的 ACM 证书。
- 检查即将轮换或处于问题状态的 Secrets。
- 通过 SNS 报警。
### 4) 孤立资源受控清理
- 旧的快照。
- 孤立的 EBS 卷。
- 孤立的 ENI。
- 未使用的 Elastic IP。
- 旧的 ECR 镜像。
- 旧的 Log groups。
- 报告模式 (`dry_run=true`) 和受标志保护的执行。
### 5) 事件证据收集器
- 通过告警事件触发。
- 收集:
- 告警上下文和指标
- 最近日志
- ECS/EKS 事件
- Target groups 状态
- 最近的部署事件
- 保存 JSON 到 S3 并通过 SNS 通知。
### 6) ECS 回滚工作流
- 发现上一个稳定的修订版本。
- 使用回滚更新 ECS 服务。
- 通过受控重试等待稳定。
- 验证健康检查。
- 通过 SNS 通知成功/失败。
### 7) 备份和恢复验证
- 发现最新的快照。
- 验证保留窗口。
- 临时恢复(当标志允许时)。
- 冒烟测试。
- 清理临时资源。
- 证据保存至 S3 + SNS 通知。
## 已交付的 P1 自动化
### 8) 使用 SSM 进行补丁和运维 Runbook
- 补丁窗口和运维 Runbook 窗口,具有独立的调度。
- 在执行 `SendCommand` 前可选的人工审批。
- 支持按标签选择目标。
- 复用仓库中版本化的 SSM 文档。
### 9) 暴露的安全组修复
- 检测向 `0.0.0.0/0` 和 `::/0` 开放的关键端口。
- 带有人工审批关卡的 Step Functions 工作流。
- 可选且受安全标志控制的修复。
- SSM Automation Runbook,用于带有 `approved=true` 的运维审批。
### 10) 自动化 FinOps 报告
- 按账户成本。
- 按服务成本。
- 按标签成本。
- 基于高级启发式算法的主要浪费项:
- 高成本服务
- 无标签成本
- 未充分利用的 Savings Plans
- 未充分利用的 Reserved Instances
- Rightsizing 机会
- 以 JSON 和 CSV 格式输出到 S3。
### 11) 运维 Drift 检测
- 检测 Security Groups、ECS Services、Listeners、SSM 参数和标签中的 Drift。
- 与 S3 中的基线进行比对。
- 结构化报告及 SNS 告警。
- 可选通过 Terraform 上传初始基线。
### 12) 与 ChatOps/ITSM 的审批集成
- 专用于审批请求的 SNS 主题。
- Bridge Lambda,用于将审批事件转发到 Webhooks。
- 同时支持 ChatOps 和 ITSM 渠道。
## 需求
- Terraform >= 1.6
- 已通过 profile/role 认证的 AWS CLI
- Python 3.11+ (用于本地测试)
## 按环境部署
### 1. 调整远程后端
编辑文件:
- `env/dev/backend.hcl`
- `env/stage/backend.hcl`
- `env/prod/backend.hcl`
配置:
- S3 state bucket
- DynamoDB lock 表
- 每个环境的 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 最小权限原则(专用角色)。
- 可配置的日志保留期。
- S3 启用加密并在适用处阻止公开访问。
- Lambda 的 DLQ(模块 `lambda_automation`)。
- 破坏性/敏感自动化默认为 Dry-run 模式。
- 启用破坏性操作需强制设置标志 (`allow_destructive_actions`, `allow_restore`)。
## 可观测性
- 用于告警的中央 SNS (`automation_alerts`)。
- 基线告警:
- `AWS/Lambda` 指标 `Errors`
- `AWS/States` 指标 `ExecutionsFailed`
## 建议的 CI
示例文件:`.github/workflows/terraform-ci.yml.example`
- `terraform fmt -check`
- `terraform validate`
- 每个堆栈执行 `terraform plan`
## 测试
`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` 进行运维审批。
## 设计说明
- 未使用通用社区模块来处理自动化的核心逻辑。
- 实现优先考虑清晰度和运维控制,保持通过小型可复用模块进行组合。
标签:AWS, DPI, EC2, ECS, ECS回滚, EventBridge, FinOps, IaC, Lambda, PB级数据处理, Python, SRE, Step Functions, Terraform, Toil削减, 事故响应, 云治理, 偏差过滤, 备份验证, 安全运维, 成本控制, 无后门, 漂移检测, 漏洞探索, 站点可靠性工程, 自动化运维, 资源调度, 逆向工具