vitas/evidra-lock

GitHub: vitas/evidra-lock

基于 OPA 策略的 AI 基础设施操作熔断开关,在执行前校验破坏性命令并记录不可篡改的审计证据链。

Stars: 7 | Forks: 0

# Evidra-lock [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/eed422d0ce211549.svg)](https://github.com/vitas/evidra-lock/actions/workflows/ci.yml) [![Release](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/0693c2d8a6211550.svg)](https://github.com/vitas/evidra-lock/actions/workflows/release.yml) [![Publish API](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b2479d6b32211551.svg)](https://github.com/vitas/evidra-lock/actions/workflows/publish-api.yml) [![Publish Hosted MCP](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/eecd452b17211552.svg)](https://github.com/vitas/evidra-lock/actions/workflows/publish-hosted.yml) [![Latest Release](https://img.shields.io/github/v/release/vitas/evidra-lock)](https://github.com/vitas/evidra-lock/releases) 给 AI 访问您集群的权限? 在它通过惨痛教训学习之前,加个熔断开关吧。 - **熔断开关 (Kill-switch)** - 除非证明安全,否则阻止破坏性操作。 载荷为空?拒绝。未知工具?拒绝。目标范围模糊?拒绝。 - **运维层 (Ops layer)** - 精心策划的运维规则,捕捉那些导致真实故障的配置:特权容器、公开的 S3、通配符 IAM、开放的安全组。可扩展 - 添加您自己的规则。 - **证据 (Evidence)** - 每个决策(允许和拒绝)都会追加到 SHA-256 哈希链日志中。每条记录都引用前一条记录的哈希值。篡改将导致校验失败。 ## 为什么需要 AI 代理现在在生产基础设施上运行 `kubectl`、`terraform` 和 `argocd`。它们可能会产生不完整、不安全或语义错误的操作。 人类可能会在不完全理解其影响的情况下批准操作。CI 流水线可能会自动应用计划。 Evidra-lock 位于代理和您的基础设施之间。每个破坏性命令在执行前都会根据显式策略进行验证。如果它是危险的、不完整的或未知的,它将被拒绝。 Evidra-lock 不依赖自然语言分析。它根据 OPA 策略评估结构化的工具调用。如果输入无法在具有足够上下文的情况下映射到策略,则请求将被拒绝。 输入必须是结构化的。Evidra-lock 不解析原始 shell 命令。工具 + 操作 + 载荷必须是显式的。 ## 默认失效关闭 (Fail-closed) 如果 Evidra-lock 无法安全地评估操作,它将拒绝。 - 未知工具或操作 -> 拒绝 - 破坏性操作缺少载荷字段 -> 拒绝 - 截断或不完整的输入 -> 拒绝 - 目标范围模糊(未提供命名空间且无法推断)-> 拒绝 范围可以显式提供 (`target.namespace`) 或通过解析的上下文提供(来自当前 kubectl/oc 上下文的 `context.namespace`)。 沉默不等于允许。执行需要显式允许。 只读操作(`get`、`list`、`plan`、`describe`)默认被允许。 ## 30 秒演示 1. 安装 Evidra-lock。连接到 Claude Code。尝试破坏事物。 2. 打开 Claude Code 并输入: 3. Claude 在行动之前调用 `validate` MCP 工具。Evidra-lock 根据策略评估该操作。 4. Claude 收到: ``` { "allow": false, "risk_level": "high", "hits": ["k8s.protected_namespace"], "hints": [ "Add risk_tag: breakglass", "Or apply changes outside kube-system" ] } ``` 5. Claude 停止。没有删除任何内容。拒绝和提示被记录在证据链中。 尝试更多提示: | Prompt | Expected result | |---|---| | "Delete all pods in kube-system" | DENY - `k8s.protected_namespace` | | "Create a public S3 bucket" | DENY - `terraform.s3_public_access`, `aws_s3.no_encryption` | | "Deploy nginx to the default namespace" | PASS - no rules matched | | "Open SSH to 0.0.0.0/0" | DENY - `terraform.sg_open_world` | | "Run a privileged container" | DENY - `k8s.privileged_container` | 每个决定 - 允许或拒绝 - 都会作为仅追加、哈希链接的 JSONL 记录写入 `~/.evidra/evidence`。 ## 安装与设置 使用专门的设置指南了解安装方法和 MCP 客户端配置: - [docs/mcp-setup.md](docs/mcp-setup.md) - [GitHub version](https://github.com/vitas/evidra-lock/blob/main/docs/mcp-setup.md) - [Architecture (Markdown)](docs/ARCHITECTURE.md) - [Architecture (Rendered HTML)](https://vitas.github.io/evidra-lock/evidra-architecture-public.html) 二进制下载可在 [GitHub Releases](https://github.com/vitas/evidra-lock/releases) 获取。 ## 托管端点 | Endpoint | URL | |---|---| | MCP server | `https://evidra.samebits.com/mcp` | | REST API | `https://api.evidra.rest/v1` | | Landing / Console | `https://evidra.samebits.com` | ## 开发指南 有关本地开发说明(包括无后端的 UI 模拟模式),请参阅 [docs/evidra-development-guide.md](docs/evidra-development-guide.md)。 ## 工作原理 Evidra-lock 作为标准 MCP 服务器运行。AI 代理自动发现它并在破坏性操作之前调用 `validate`。 ``` AI agent -> MCP: validate -> Evidra-lock (OPA policy) -> allow/deny -> evidence chain | only if allowed -> kubectl / terraform / helm ``` 1. 代理在执行前通过 MCP 发送工具调用。 2. Evidra-lock 将工具 + 操作映射到意图(破坏性或只读)。 3. 根据版本化的 OPA 策略包评估请求。 4. 返回决定:允许/拒绝 + 风险级别 + 规则 ID + 提示。 5. 决定记录到仅追加、哈希链接的证据日志。 确定性的且默认失效关闭。评估循环中没有 LLM。无运行时 API 调用。无网络依赖。 策略包是版本化的,并随二进制文件一起提供。 **重要细节:** 策略评估是完全确定性的 (OPA)。但是,输入载荷由调用代理构建。如果代理省略了关键字段,则对不完整数据进行评估。熔断开关层缓解了这种情况 —— 缺少必需字段总是导致拒绝。v0.3.0 域适配器将在策略评估之前添加对原始输入的结构验证,进一步减少对代理准确性的依赖。 有关详细信息,请参阅 [ROADMAP.md](ROADMAP.md)。 代理在每次拒绝时都会看到规则 ID 和可操作的提示,而不仅仅是“不”。 也适用于 CI 流水线: ``` terraform show -json tfplan | evidra validate --tool terraform --op apply ``` 相同的策略引擎。相同的证据链。适用于 AI 工作流和传统 CI 流水线。在 CI 模式下,Evidra-lock 在没有 MCP 的情况下运行 —— 直接调用相同的验证引擎。 ## 保护级别 Evidra-lock 附带两个保护级别。第三个 (DevSec) 正在计划中。 **ops** (默认) - 全面保护。熔断开关护栏加上精心策划的运维规则,捕获特权容器、公开的 S3 存储桶、通配符 IAM、开放的安全组以及其他灾难性错误配置。可扩展 - 添加您自己的规则。 **baseline** - 仅熔断开关。阻止缺少上下文和未知工具的破坏性操作。不对“不良配置”发表意见。 **devsec** (计划中,v0.4.0) - 用于容器安全、镜像来源、RBAC 最小权限和云安全的安全加固规则。用侧重于安全的检查补充 ops(仅限灾难性)。 请参阅 [ROADMAP.md](ROADMAP.md)。 按包路径选择: ``` evidra-mcp --bundle policy/bundles/ops-v0.1 # full protection (default) evidra-mcp --bundle policy/bundles/baseline-v0.1 # kill-switch only ``` ## 策略目录 不是合规性扫描器。每条规则都防止导致真实故障的特定高影响故障。 Evidra-lock 附带 `ops-v0.1`:精心策划的运维规则(拒绝 + 警告),涵盖 Kubernetes、Terraform、ArgoCD、S3 和 IAM。运维层是可扩展的 - 添加您自己的规则。 设计原则: - **仅限灾难性** - 无卫生规则,无最佳实践噪音。 - **确定性** - 从静态配置评估,无需运行时 API 调用。 - **低误报率** - 每条规则都映射到已知的攻击链或事件类别。 有关完整规则目录,请参阅 [POLICY_CATALOG.md](POLICY_CATALOG.md)。 ## 不是 OPA 的替代品 准入控制器在部署时在集群内运行。 Evidra-lock 在执行之前运行 - 跨 `kubectl`、`terraform`、`helm`、`argocd`。特别是在 AI 驱动的工作流中。两者都保留。 ## 威胁模型 Evidra-lock 假设: - AI 代理可能会生成不完整或不安全的基础设施操作。 - 载荷可能不正确、部分或具有对抗性。 - 人类可能会在不完全理解其影响的情况下批准操作。 - CI 流水线可能会自动应用计划。 Evidra-lock 不: - 执行命令。 - 修改基础设施。 - 在评估期间进行网络调用。 - 替换准入控制器或 CI 门控。 它根据显式策略验证结构化输入,并记录决定。仅此而已。 Evidra-lock 不位于执行路径中。它必须由代理、CLI 或 CI 流水线在执行前调用。 ## 证据 每个决定 - 允许和拒绝 - 都记录到本地的仅追加证据日志。 - SHA-256 哈希链:每条记录都包含前一条记录的哈希值。 - 不可变:仅追加文件,无更新,无删除。 - 篡改检测:`evidra evidence verify` 检查整个链。 - 离线:本地存储,无需外部服务。 - 包含:参与者、操作、策略决定、规则 ID、时间戳、载荷摘要(默认情况下不是原始载荷)。原始载荷存储是可选且可配置的。 ``` # 验证证据链完整 evidra evidence verify # 导出以供外部审计 evidra evidence export --format json ``` ## CLI(策略调试与证据工具) `evidra` CLI 与 MCP 服务器共享相同的评估引擎。它主要用于策略开发和调试。 ``` # 根据策略验证 scenario 文件 evidra validate examples/demo/kubernetes_kube_system_delete.json # 验证证据链完整性 evidra evidence verify # 导出证据以供外部审计 evidra evidence export --format json ``` 退出代码:`0` = PASS,`2` = FAIL,`1` = 错误。 ## 测试 有关完整测试架构、层次以及如何运行每个测试套件,请参阅 [docs/TESTING.md](docs/TESTING.md)。 ## 稳定性与模型行为 有关模型方差和确定性引擎保证的详细信息,请参阅 [docs/MODEL_BEHAVIOR_AND_DETERMINISM.md](docs/MODEL_BEHAVIOR_AND_DETERMINISM.md)。 ## 路线图 有关完整路线图,请参阅 [ROADMAP.md](ROADMAP.md),包括: - **v0.3.0** — 域适配器(Go + Rego 混合),用于每个工具的规范化和结构输入验证 - **v0.4.0** — DevSec 策略包(容器安全、RBAC、镜像来源、云加固) - **v0.5.0+** — Crossplane/CFN、执行封装、多集群 ## 许可证 Apache 2.0。无需 SaaS。无遥测。在本地或本地运行。 您的基础设施,您的规则,您的证据。 由 [SameBits](https://samebits.com) 开源。
标签:AI安全, Chat Copilot, Chrome Headless, EVTX分析, Fail-closed, Kubernetes安全, Lerna, MCP, Streamlit, 命令验证, 大模型运维, 审计日志, 文档结构分析, 日志审计, 时序数据库, 熔断机制, 策略执行, 访问控制, 防篡改