norviq-dev/norviq
GitHub: norviq-dev/norviq
Norviq 是一个部署在 Kubernetes 上的运行时安全平台,通过 OPA/Rego 策略引擎对 LLM agent 的每一次工具调用进行拦截、身份验证和执行决策。
Stars: 1 | Forks: 1
collect policy tiers + overlays Engine->>OPA: evaluate OPA-->>Engine: decision Engine-->>PEP: allow / block / escalate / audit
+ rule_id + reason PEP-->>Agent: enforced decision Engine->>Engine: audit log · trust score · asset/attack graph ``` - **拦截** — 注入的 sidecar(或 SDK)将每个工具调用转发到引擎的 `/evaluate`。 - **身份** — 决策被限定为调用工作负载的 SPIFFE 身份(SPIRE SVID),而不是共享密钥,因此策略是基于 agent 类别和 namespace 的。 - **策略** — Rego 策略按层级划分(agent 类别 → namespace 基准 → cluster 基准),并带有“仅允许收紧”的覆盖规则;最严格且匹配的规则将最终生效。 - **模式** — `block`(拒绝并给出原因)、`escalate`(上报)、`audit`(仅记录 / 监控模式),因此你可以在正式启用前,以可观测的方式推行执行策略。 ### 部署组件 ``` flowchart LR subgraph tenant["Agent namespace"] pod["Agent pod
+ Norviq sidecar (PEP)"] end subgraph norviq["norviq namespace"] api["API
+ OPA sidecar"] engine["Engine
+ OPA sidecar"] pg[("PostgreSQL")] redis[("Redis")] ui["Console UI"] webhook["Admission
webhook"] end pod -->|POST /api/v1/evaluate| api api --> pg api --> redis engine --> pg engine --> redis webhook -. injects sidecar .-> pod webhook -. syncs NrvqPolicy/NrvqClass .-> api ui --> api ``` API 和 Engine 都会针对它们各自的 OPA sidecar(每个副本一个 OPA,绑定到 `127.0.0.1`)进行**进程内**评估——两者互不代理。在默认的注入模式(`webhook.injection.sidecarMode: proxy`)下,被注入的 sidecar 会将每个工具调用 POST 到中央 API,因此 Postgres、Redis 和策略加载都保持集中化,不会在单个 pod 中进行评估。Engine Deployment 将同样的评估器作为独立的 cluster 工作负载运行(`NRVQ_SIDECAR_MODE=embedded`,通过 `norviq-engine:8282` 暴露),供希望在不经过 API 的情况下直接进行评估的调用方使用。 ## 兼容你的 agent 框架 上文的 sidecar 是零代码修改的。如果你需要进程内拦截——即不使用 sidecar,而是用你自己的事件循环——SDK(`norviq/sdk/`)会包装这些框架的工具调用点,使得 block/escalate 决策能在工具运行前抛出。请参阅 **[docs/guides/integrating-agents.md](docs/guides/integrating-agents.md)** 了解配置和代码片段。 - **LangChain** — `norviq.sdk.langchain.adapter.protect(tools, interceptor)` - **LangGraph** — `norviq.sdk.langgraph.adapter.GuardedToolNode(tools, interceptor)` - **CrewAI** — `norviq.sdk.crewai.adapter.protect(tools, interceptor)` - **AutoGen** — `norviq.sdk.autogen.adapter.protect(tools, interceptor)` - **Azure / Semantic Kernel** — `norviq.sdk.semantic_kernel.adapter.policy_filter(interceptor)` **[`examples/chatbot/`](examples/chatbot/)** 是一个可运行的 LangChain/LangGraph chatbot(Groq),在其中由真实的模型决定工具调用,而 Norviq 会在危险操作运行前将其拦截——内附 `Dockerfile` 和 `k8s/` 清单文件,用于在 cluster 内通过注入的 sidecar 运行。 ## 功能特性 - **策略执行** — 针对每次工具调用评估 OPA/Rego,亚秒级响应,默认失败即拒绝。 -**Kubernetes 原生** — 包含 `NrvqPolicy` / `NrvqClass` / `NrvqConfig` CRD,用于注入执行 sidecar 的 mutating webhook,以及一个 Helm chart。 - **工作负载身份** — 支持 SPIFFE/SPIRE SVID(并为非 SPIRE cluster 提供了 mock 模式)。 - **控制台 UI** — 提供策略目录与编辑器、攻击图、资产图、agent 信任度以及审计流。 - **红队测试套件** — 内置对抗性测试(如 prompt 注入、编码/嵌套绕过、SQLi、PII/PCI 数据窃取),用于证明策略确实起到了拦截作用。 - **合规性映射** — 覆盖 MITRE ATLAS 和 OWASP LLM Top-10,并提供“生成执行策略”的修复方案。 - **高可用性** — 支持多副本,具备跨副本策略传播和 DB 权威删除;为多节点 cluster 提供 HPA/PDB/反亲和性。 - **多集群管理** — 支持在中心集群与边缘集群间分发已签名的策略包。 ## 快速开始 **前置条件:** 一个 Kubernetes 集群 (1.30+)、`kubectl` 以及 Helm 3。 ``` git clone https://github.com/norviq-dev/norviq.git cd norviq # 1. 安装 CRDs kubectl apply -f helm/norviq/crds/ # 2. 安装 Norviq(默认从 ghcr.io/norviq-dev 拉取 public images) kubectl create namespace norviq helm install norviq ./helm/norviq -n norviq \ --set 'policyQuotaNamespaces={default}' \ --set config.dbSslMode=disable # the bundled Postgres has no TLS; omit if you point at an external TLS DB ``` `policyQuotaNamespaces` 是将要运行 agent 的租户 namespace 列表——它是**必填的**,而非可选项。该 chart 会为每个条目安装一个失败即拒绝的 `strict` namespace 基准,因此如果列表为空,出于安全设计会导致安装失败,而不是在集群中留下没有基准防护的状态。请添加你计划使用的每一个 agent namespace。 该 chart 会部署 API、Engine、控制台 UI、mutating webhook 以及内置的 PostgreSQL + Redis + OPA。 使用端口转发访问控制台: ``` kubectl -n norviq port-forward svc/norviq-ui 8080:80 # 打开 http://localhost:8080 ``` 以 `admin` 身份登录。Chart 在安装时会生成一个随机的初始密码(只有当你自己设置了 `auth.adminPassword` 时,它才会使用字面量密码)——请读取出该密码,并在控制台提示时进行修改: ``` kubectl get secret norviq-secrets -n norviq -o jsonpath='{.data.NRVQ_AUTH_ADMIN_PASSWORD}' | base64 -d ``` Sidecar 注入默认是**关闭**的(`webhook.injection.enabled: false`)。请将其开启,然后为你刚才在 `policyQuotaNamespaces` 中列出的 namespace 添加标签——在 webhook 启用之前,单靠标签是没有任何作用的: ``` helm upgrade norviq ./helm/norviq -n norviq --reuse-values --set webhook.injection.enabled=true kubectl label namespace
标签:DLL 劫持, Lerna, OPA/Rego, Streamlit, 人工智能安全, 合规性, 大语言模型, 子域名突变, 搜索引擎查询, 日志审计, 测试用例, 策略执行, 访问控制, 逆向工具