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削减, 事故响应, 云治理, 偏差过滤, 备份验证, 安全运维, 成本控制, 无后门, 漂移检测, 漏洞探索, 站点可靠性工程, 自动化运维, 资源调度, 逆向工具