kirilurbonas/AegisLLM

GitHub: kirilurbonas/AegisLLM

AegisLLM 是一个基于 GitOps 的 LLM 供应链安全平台,将不可信的开放权重模型转化为经过签名、扫描和策略门控的生产级模型服务。

Stars: 0 | Forks: 0

# AegisLLM **一个由 GitOps 驱动、具备气隙隔离能力的平台,它从 Hugging Face 获取不受信任的开放权重模型,并将其转化为在 Kubernetes 上经过签名、扫描、策略门控、配备护栏且持续进行红队测试的生产级 LLM 服务。** 在过去十年中,软件供应链得到了安全保障。但*模型*供应链并没有。Hugging Face 的 checkpoint 是不受信任的第三方代码——一个经典的基于 `pickle` 的 PyTorch 文件在你加载它的瞬间就会执行任意代码。AegisLLM 像对待任何不受信任的依赖项一样对待每一个模型:扫描它,将其转换为不可执行格式,建立清单,签名,发布到内部 registry,并拒绝运行任何无法证明其出处的模型。 ## 状态 | 支柱 | 范围 | 状态 | |---|---|---| | 1. 安全模型供应链 | 摄取 → 扫描 → safetensors → AIBOM → 签名 → OCI registry → 验证 | ✅ 已实现 | | 0. 基础设施 | Terraform `kind` 集群、Zot registry、ArgoCD GitOps | ✅ 已实现 | | 2. 加固的 CI/CD + 准入网关 | Trivy → cosign → SLSA 溯源;Kyverno 拒绝未签名镜像和未验证模型 | ✅ 已实现 | | 3. 运行时安全网关 (FastAPI + guardrails) | | 🚧 计划中 | | 4. 持续的 AI 红队测试 (garak / promptfoo) | | 🚧 计划中 | | 5. 可观测性与治理 | | 🚧 计划中 | 有关完整的五大支柱设计,请参阅 [docs/architecture.md](docs/architecture.md);有关 OWASP LLM Top 10 的映射,请参阅 [docs/THREAT_MODEL.md](docs/THREAT_MODEL.md)。 ## 快速开始 需要运行 Docker Desktop,以及 `uv`、`kind`、`kubectl`、`helm`、`terraform`、`cosign`、`oras`。 ``` make check # preflight: docker daemon + required binaries make tools # brew install anything missing make install # uv sync make supply-chain # Pillar 1 end-to-end, signed model in the local registry make demo-tamper # flip a byte in the weights — verification must FAIL make cluster # terraform: kind cluster + Zot registry + ArgoCD eval $(make kubeconfig) make gitops # apply the app-of-apps; hello service reconciles make clean-cluster # tear it all down ``` `make gitops` 需要一个可访问的 git URL —— ArgoCD 是从 git 进行同步,而不是从 你的工作树同步。它会使用你的 `origin` remote,因此请先 push 该仓库,或者 显式传递一个:`make gitops AEGIS_REPO_URL=https://github.com//aegisllm.git`。 `make supply-chain-offline` 在完全没有 registry 和 Docker 的情况下 运行 pipeline,并在签名后停止 —— 这在 CI 环境和飞机上非常实用。 ## 支柱 1:实际发生了什么 ``` huggingface.co │ aegis ingest pinned to a commit SHA, never a branch ▼ artifacts/staging/ │ aegis scan modelscan + picklescan; non-zero exit on CRITICAL ▼ │ aegis convert torch .bin → .safetensors, tensor-equivalence checked ▼ │ aegis aibom CycloneDX 1.6 ML-BOM: license, source, revision, hashes ▼ │ aegis sign sigstore keyless (demo) or keyed cosign (CI / air-gap) ▼ localhost:5001/models/… aegis push — weights + AIBOM + signature bundle as one │ OCI artifact; the AIBOM attached as an OCI referrer ▼ │ aegis verify pull, re-hash, verify signature. Tamper ⇒ exit 1. ``` 运行时的任何操作都不会去调用 Hugging Face。该 registry 就是气隙隔离的镜像。 这个门禁不是摆设:`tests/test_scan.py` 构建了一个真正的恶意 pickle,其 `__reduce__` 会调用 `os.system`,并断言扫描器能标记它,同时 pipeline 会拒绝 继续执行。 ## 支柱 2:未经验证的一律不运行 ``` make cluster && eval $(make kubeconfig) make supply-chain # publish a signed model make verifier-image # build + sign the verifier init container make kyverno keys-secret # install Kyverno and the AegisLLM policies make demo-admission # the gate, proven ``` `make demo-admission` 输出: ``` ── compliant pod (must be ADMITTED and reach Running) ── → the serving container sees: serving verified model from /models: aibom.cdx.json pytorch_model.safetensors ── unpinned (must be REFUSED) ── ✓ blocked by rule: model-must-be-digest-pinned ── external (must be REFUSED) ── ✓ blocked by rule: model-must-come-from-the-internal-registry ── no-verifier (must be REFUSED) ── ✓ blocked by rule: verifier-init-container-must-be-present ``` 这些策略也有离线单元测试 —— `make test-policies` 会针对每条 规则,断言哪些示例 pod 必须通过,哪些必须失败。削弱任何一条规则都会导致 CI 变红。(已通过故意削弱一条规则进行了验证:测试套件捕获了它。)一个 悄悄停止执行的准入网关比没有更糟糕,因为所有人都会继续 假设它在正常工作。 **关于其工作原理的真实情况**,因为显而易见的设计其实行不通: Kyverno 的 `verifyImages` 会从 *pod spec* 中读取镜像引用,而 作为 OCI artifact 发布的模型永远不会出现在那里。Kyverno 无法从 annotation 中验证 模型签名,任何声称它可以的人描述的都是 该工具并未实现的功能。因此,强制执行被分开了 —— Kyverno 证明 pod 的 **结构** 使得验证必然发生(摘要锁定、内部 registry、 存在验证器、镜像签名有效),而 verifier init container 负责执行 **加密** 并在失败时安全关闭。两者单独使用都不够。 [docs/architecture.md](docs/architecture.md) 解释了为什么这种分离是被迫的 而不是主动选择的,并记录了两个版本不匹配的情况(cosign v3 ↔ Kyverno 1.18, oras 1.2 ↔ 1.3),这两者失败的表现都极具误导性,看起来就像 缺少签名一样。 ## 威胁覆盖范围 | OWASP LLM Top 10 (2025) | 控制措施 | 支柱 | |---|---|---| | LLM03 供应链 | 模型扫描、签名、AIBOM、已签名的 OCI registry、准入网关 | 1, 2 ✅ | | LLM04 数据与模型投毒 | 溯源验证、safetensors、revision 锁定、准入网关 | 1, 2 ✅ | | LLM01 提示词注入 | 输入 guardrails + 红队测试网关 | 3, 4 🚧 | | LLM02 敏感信息泄露 | 输出 PII/密钥扫描 + 审计日志 | 3, 5 🚧 | | LLM05 输出处理不当 | 输出 guardrails、schema 强制执行 | 3 🚧 | | LLM06 过度代理 | 范围化的 RBAC、最小权限 | 3 🚧 | | LLM07 系统提示词泄露 | 提示词隔离 + 红队探测 | 3, 4 🚧 | | LLM09 误导信息 | grounding + promptfoo 断言 | 4 🚧 | | LLM10 无限制消耗 | 频率/token 配额 + 成本仪表盘 | 3, 5 🚧 | ## 布局 ``` supplychain/ Pillar 1 — the model supply chain CLI (`aegis`) infra/terraform/ kind cluster, Zot OCI registry, ArgoCD gitops/ app-of-apps + workloads reconciled by ArgoCD policies/ Pillar 2 — Kyverno admission policies examples/ compliant and deliberately non-compliant model-serving pods .github/ CI (lint, test, scan gate) and release (Trivy, cosign, SLSA) gateway/ Pillar 3 — FastAPI inference gateway redteam/ Pillar 4 — garak / promptfoo suites ```
标签:AI供应链安全, DevSecOps, GitOps, Linux系统监控, 上游代理, 子域名突变, 模型安全, 签名校验, 软件物料清单(SBOM), 逆向工具