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, 事件响应, 成本管理, 运维平台