manynames3/driftguard-ai
GitHub: manynames3/driftguard-ai
基于 LangGraph 的 AWS 基础设施漂移修复代理,将漂移事件自动转化为经过验证的 Terraform Pull Request。
Stars: 1 | Forks: 0
# DriftGuard AI
DriftGuard AI 将 AWS 基础设施漂移转换为可审查的 Terraform pull request。
它会对漂移事件进行分诊,评估安全和成本影响,生成 Terraform 修复 HCL,使用真实的 Terraform CLI 验证该 HCL,拦截明显的不安全模式,然后打开一个 GitHub PR 或呈现一次预演 PR 预览。
在线落地页:
带有 S3、security group 和 RDS 漂移场景的在线演示界面:
## 适用人群
- 使用 AWS、Terraform 和 GitHub 的平台团队。
- 需要在不跳过审查的前提下实现更快修复的云安全团队。
- 希望将漂移修复作为常规基础设施 pull request 提交的 DevOps 团队。
## 目前功能
1. 接受纯英文的漂移描述或 JSON AWS 事件。
2. 使用由 LLM 驱动的 LangGraph 工作流来进行分诊、分析影响、修复、验证和自我纠正。
3. 在临时沙箱中运行 `terraform init` 和 `terraform validate`。
4. 针对明显不安全的 Terraform 模式运行内置策略检查。
5. 打开一个 GitHub PR,或者在预演模式下渲染一个 PR 预览。
## 环境要求
- Python 3.10+
- `PATH` 中包含 Terraform CLI
- 当生成的 HCL 需要 provider 插件时,具备运行 `terraform init` 的网络访问权限
- 用于真实运行的 OpenAI 或 Anthropic API key
- 用于实时创建 PR 的 GitHub token
## 快速演示
最快的产品演示使用确定性的本地 LLM 响应,并且不会写入 GitHub:
```
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python driftguard.py \
--event examples/s3_public_access_drift.json \
--dry-run \
--mock-llm
```
预期结果:生成一份包含影响分析、Terraform 验证输出、策略检查输出和 GitHub PR body 预览的运行摘要。
CLI 在调用 agent 之前会运行预检。在进行任何实时 API 调用之前,缺失的 Terraform、LLM key、模型配置或 GitHub 设置都会被报告。
## 真实 LLM 预演
```
cp .env.example .env
# 使用您的 model provider 和 API key 编辑 .env。
python driftguard.py \
--event examples/s3_public_access_drift.json \
--dry-run
```
## 实时 GitHub PR 运行
```
python driftguard.py \
--event examples/s3_public_access_drift.json
```
实时创建 PR 需要:
- `GITHUB_TOKEN`
- `GITHUB_REPOSITORY`
- `GITHUB_BASE_BRANCH`
- `GITHUB_TERRAFORM_FILE_PATH`
在生产环境中,请使用最小权限的 GitHub App 安装 token,而不是宽泛的个人访问 token。
## 环境变量
请参阅 [.env.example](.env.example)。
重要变量:
- `DRIFTGUARD_LLM_PROVIDER`:`openai` 或 `anthropic`
- `DRIFTGUARD_LLM_MODEL`:已批准的模型名称
- `OPENAI_API_KEY` 或 `ANTHROPIC_API_KEY`
- `GITHUB_TOKEN`:具有 branch、contents 和 pull request 权限的 token
- `GITHUB_REPOSITORY`:`owner/repo`
- `GITHUB_BASE_BRANCH`:默认 branch,通常是 `main`
- `GITHUB_TERRAFORM_FILE_PATH`:要在修复 PR 中创建或更新的文件路径
## 安全模型
DriftGuard 不会自动应用基础设施更改。它生成的是可审查的 PR。
当前的安全控制:
- 密钥和账户 ID 在输入给 LLM prompt 之前会被脱敏。
- Terraform 在临时的本地沙箱中进行验证。
- 明显不安全的 Terraform 模式会在创建 PR 之前被拦截。
- 验证和策略失败的结果会被反馈到修复循环中。
- 预演模式会渲染一个 PR 预览,而不会写入 GitHub。
有关安全边界和生产指导,请参阅 [SECURITY.md](SECURITY.md)。
在正式向客户收费之前,生产部署应添加 Checkov、tfsec 或 OPA 策略包。内置的检查是专为 MVP 设计的基本防护措施,并不是一个完整的云安全策略引擎。
## CLI 用法
```
python driftguard.py --help
```
常用选项:
- `--event path.json`:加载漂移事件 fixture 或生产环境的 event payload。
- `--issue "description"`:从纯英文的 issue 描述中运行。
- `--dry-run`:仅生成 PR 预览。
- `--mock-llm`:使用确定性的演示响应。
- `--json`:以 JSON 格式打印最终的 graph 状态。
## 测试
```
pip install -r requirements-dev.txt
pytest
```
如果未安装 Terraform CLI,依赖 Terraform 的测试将被自动跳过。
## 演示讲解流程
在向用户或招聘经理展示 DriftGuard 时,请使用以下流程:
1. “这不是一个自动应用机器人。它将漂移转换为可审查的 Terraform PR。”
2. 展示 fixture:`cat examples/s3_public_access_drift.json`。
3. 运行:
python driftguard.py \
--event examples/s3_public_access_drift.json \
--dry-run \
--mock-llm
4. 指出影响摘要、Terraform 验证、策略检查和 PR 预览。
5. 以生产环境边界结尾:真实部署应使用 GitHub App 认证、持久化审计日志和更强大的策略扫描器。
## 销售落地页
静态落地页位于 [site/index.html](site/index.html)。它面向正在评估专注型漂移修复试点的平台和云安全团队。
基于浏览器的演示界面位于 [site/demo.html](site/demo.html)。它包含 S3 公共访问、security group 暴露和 RDS 实例类型漂移场景。默认情况下,它使用确定性的浏览器输出。当配置了 `window.DRIFTGUARD_DEMO_API_URL` 时,它会调用 AWS Lambda 演示后端以进行真实的 Terraform 验证。
可选的 AWS 演示后端位于 [infra/demo-backend](infra/demo-backend) 中。它通过使用 API Gateway HTTP API、Lambda、DynamoDB on-demand、短暂的日志保留、预留并发和可选的 `$5/month` AWS Budget 告警,将闲置成本保持在接近于零的水平。公开运行保持固定场景和 mock-LLM,但在 Lambda 内部的 Terraform 验证是真实的。
## 前端部署
Cloudflare Pages 前端提供来自 `site/` 的静态文件。
```
wrangler pages deploy site --project-name driftguard-ai --branch main
```
部署 AWS 演示后端后,请在 [site/demo-config.js](site/demo-config.js) 中将 `window.DRIFTGUARD_DEMO_API_URL` 设置为 CloudFormation 的 `DemoApiUrl` 输出,然后重新部署前端。如果 API URL 为空或不可用,浏览器演示将回退到确定性的本地模拟。
## 生产环境边界
该代码库对于技术买家来说是演示就绪的。它尚未成为完整的 SaaS 产品。在广泛收费之前,请添加托管的接入路径、GitHub App 认证、持久化运行历史记录、更强大的策略扫描、部署和监控。
标签:AWS, DPI, ECS, LangGraph, Terraform, 安全规则引擎, 模块化设计, 漏洞利用检测, 自动化修复, 运维, 逆向工具, 配置漂移