cognis-digital/admitd

GitHub: cognis-digital/admitd

admitd 是一个纯 Python 实现的 Kubernetes 准入控制引擎,通过声明式策略在 CI 和集群中统一执行 CIS/NSA 加固基线,提供允许、拒绝和自动变更三种决策模式。

Stars: 0 | Forks: 0

# admitd — Kubernetes 策略即代码准入引擎 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/7458ce363f055159.svg)](https://github.com/cognis-digital/admitd/actions) [![License: COCL 1.0](https://img.shields.io/badge/License-COCL%201.0-2b6cb0.svg)](LICENSE) [![Suite](https://img.shields.io/badge/Cognis-Neural%20Suite-6b46c1.svg)](https://github.com/cognis-digital) **Kubernetes 准入的声明式允许 / 拒绝 / 变更 —— 内置了 CIS / NSA-CISA 加固策略库。** `admitd` 根据一组声明式策略对 Kubernetes 对象(`Pod`、`Deployment`、`DaemonSet` 等)或完整的 `AdmissionReview` 进行评估,并为每个违规行为返回 **允许**、**拒绝** 或 **变更** (JSONPatch) 决定,同时附带人类可读的原因。它可以通过两种方式使用: - **在 CI 中** —— 当清单违反策略时,`admitd eval manifests/ ` 会导致流水线失败,并提供用于代码扫描的 SARIF 输出。 - **在集群中** —— `admitd serve` 是一个基于标准库 HTTPS 的 `ValidatingWebhookConfiguration` / `MutatingWebhookConfiguration` 后端。 仅使用标准库。无需代理,无需安装 CRD,没有第三方引擎 —— 一个完全可自托管的 Python 包。 ## 用法 —— 逐步指南 1. 从源码**安装**(Python 3.9+): pip install . 2. 根据内置策略对清单或 AdmissionReview 进行**评估**: admitd eval deployment.yaml 3. **列出**活动策略(内置 + 从目录中加载的任何策略): admitd policies --policies ./policies --format json 4. **使用输出**:输出 SARIF 或 JSON 以用于代码扫描仪表板: admitd eval manifests/ --policies ./policies --format sarif --out admitd.sarif 5. **在 CI 中设门禁 / 作为 webhook 服务** —— 遇到发现项时失败,或运行实时准入 webhook: admitd eval manifests/ --format json --fail-on high admitd serve --port 8443 --tls-cert tls.crt --tls-key tls.key --mutate 此外:`admitd draft ""`(可选的 AI 策略草稿)和 `admitd mcp`。 ## 为什么还要另一个准入工具 - **一个工件,两个界面。** 相同的策略同时为 CI *和* 实时准入把关 —— “Linter 检查的内容”与“集群执行的内容”之间没有偏差。 - **可读的判定。** 每个拒绝决定都包含违规的 JSON 路径、映射的加固控制措施以及具体的修复建议。 - **开箱即用的加固。** 十个内置策略重新表达了广泛发布的 Kubernetes 加固指南(CIS Benchmark、NSA/CISA Kubernetes Hardening Guidance)。 - **标准库,可编写脚本,可审计。** 没有 pip 依赖;整个引擎都是您可以阅读的纯 Python 代码。 ## 领域 **主要领域:** 网络与安全 · **JTF MERIDIAN 部门:** NULLBYTE · SPECTER **主题:** `cognis` `security` `infosec` `cybersecurity` `blue-team` `kubernetes` **Cognis Neural Suite** 的一部分 —— 包含 300 多个源码可用工具,组织在 JTF MERIDIAN 指挥结构下的 12 个领域中。请参阅 [GitHub 上的套件](https://github.com/cognis-digital) 和 [jtf-meridian](https://github.com/cognis-digital/jtf-meridian) 以了解各部分如何协同工作。 ## 安装 ``` pip install -e ".[dev]" # from this repo # 或者直接就地运行: python -m admitd --version ``` ## 快速开始 ``` # 在 CI 中评估 manifest(deny 时非零退出): python -m admitd eval demos/01-basic/insecure-pod.yaml # -> DENY, exit 1 python -m admitd eval demos/01-basic/hardened-pod.yaml # -> ALLOW, exit 0 # 支持 code-scanning 的机器可读格式 + SARIF: python -m admitd eval manifests/ --format json python -m admitd eval manifests/ --format sarif --out admitd.sarif --fail-on high # 列出内置 + 已加载的 policies: python -m admitd policies # 运行 admission webhook(真实集群使用 HTTPS): python -m admitd serve --tls-cert tls.crt --tls-key tls.key --port 8443 --mutate # 作为本地 MCP server 暴露(Cognis.Studio / Claude Desktop / Cursor): python -m admitd mcp ``` ## 策略语言 策略是一个小型的声明式文档(JSON 或 YAML 子集): ``` id: ADMITD-PRIV-001 title: Deny privileged containers severity: critical control: NSA-CISA K8s Hardening / CIS 5.2.1 action: deny # deny | warn | mutate match: kinds: [Pod, Deployment, DaemonSet, StatefulSet, Job, CronJob] rules: - forbid_field: {path: securityContext.privileged, equals: true} ``` 使用 `--policies ` 加载您自己的策略;通过 `--no-builtin` 与内置策略组合或替换它们。 ### 规则动词 | 动词 | 触发条件… | |------|-------------| | `forbid_field` | 任何容器设置了 `path`(可选 `==` 某个值) | | `require_field` | 任何容器缺少 `path`(或者它 `!=` 某个值) | | `forbid_pod_field` / `require_pod_field` | 同上,针对 PodSpec | | `forbid_image_tag` | 镜像使用了被禁止 / 隐式的(`:latest`)标签 | | `require_registry` | 镜像不是来自允许的 registry 前缀 | | `require_drop_caps` | 容器没有 drop 列出的 Linux capabilities | | `forbid_volume_type` | PodSpec 挂载了被禁止的卷类型(例如 `hostPath`) | | `require_resource_limits` | 容器缺少 CPU / 内存限制 | `mutate` 策略会将其 `require_*` 规则转换为 JSONPatch,以便 webhook 可以自动修复(例如注入 `runAsNonRoot: true`,`capabilities.drop: [ALL]`)。 ## 内置加固库 | 策略 | 严重程度 | 映射至 | |--------|----------|---------| | `ADMITD-PRIV-001` | critical | 拒绝特权容器 | | `ADMITD-PRIVESC-002` | high | 拒绝权限提升 | | `ADMITD-HOSTNS-003` | high | 拒绝 hostNetwork / hostPID / hostIPC | | `ADMITD-HOSTPATH-004` | high | 拒绝 hostPath 卷 | | `ADMITD-NONROOT-005` | high | 要求 `runAsNonRoot` | | `ADMITD-ROFS-006` | medium | 要求只读根文件系统 | | `ADMITD-DROPCAPS-007` | medium | 要求 drop `ALL` capabilities | | `ADMITD-LATEST-008` | medium | 拒绝 `:latest` / 未打标签的镜像 | | `ADMITD-LIMITS-009` | low | 要求 CPU + 内存限制 | | `ADMITD-SECCOMP-010` | medium | 要求 seccomp profile | 这些是对公开的 Kubernetes 加固概念(CIS Kubernetes Benchmark、NSA/CISA Kubernetes Hardening Guidance)的原创重新表达。未复制任何第三方的策略文本。 ## 输出格式 - **表格**(默认) —— 人类可读的单个对象判定。 - **JSON** —— 用于流水线的机器可读决策。 - **SARIF** —— 直接导入 GitHub 代码扫描 / IDE 问题面板。 ## 作为准入 webhook `admitd serve` 响应 `POST /validate` 并且(使用 `--mutate` 时)响应 `POST /mutate`,返回标准的 `AdmissionReview` 响应 —— 包含 `allowed`、列出了拒绝策略的 403 `status.message`,以及用于变更的 base64 JSONPatch。将 `ValidatingWebhookConfiguration` 指向它;API server 要求使用 TLS,因此请传入 `--tls-cert`/`--tls-key`。 在没有集群的情况下进行冒烟测试: ``` python -m admitd serve --self-test # binds localhost, posts a privileged Pod, asserts deny ``` ## 可选的 AI 策略起草(默认关闭) `admitd draft "deny any pod that mounts the docker socket"` 可以使用 Cognis 共享的 AI 后端,根据纯英文规则起草新策略。它**默认关闭**,并且只与您配置的**本地** fleet 端点(`COGNIS_AI_BACKEND` / `COGNIS_AI_ENDPOINT`)通信——不会有任何数据离开您的机器。草稿在打印之前始终会通过策略解析器进行验证,因此格式错误的建议永远不会成为可执行的策略。在使用前请审查每一个草稿。 ## 它如何融入 Cognis Neural Suite `admitd` 是 [Cognis Neural Suite](https://github.com/cognis-digital) 中的一个工具。每个工具都提供了一个 MCP server,因此 [Cognis.Studio](https://cognis.studio) 代理可以将它们作为具有作用域的能力进行调用。 ## 架构与路线图 - 设计文档:[`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) - 计划工作:[`ROADMAP.md`](ROADMAP.md) ## 互操作性 `admitd` 可以与包含 300 多个工具的 Cognis 套件组合使用 —— JSON 输入/输出和共享的、兼容 OpenAI 的 `/v1` 骨干网络。请参阅 **[INTEROP.md](INTEROP.md)** 以获取套件图谱、组合模式和参考技术栈。 ## 集成 通过 [`cognis-connect`](https://github.com/cognis-digital/cognis-connect) 将 `admitd` 的发现结果转发至 STIX/MISP/Sigma/Splunk/Elastic/Slack/webhook。请参阅 **[INTEGRATIONS.md](INTEGRATIONS.md)**。 ## 许可证 在 **Cognis Open Collaboration License (COCL) v1.0** 下源码可用 —— 可免费用于个人、内部评估、研究和教育用途;**商业 / 生产用途需要许可证** (licensing@cognis.digital)。请参阅 [LICENSE](LICENSE)。 ## 负责任的使用 这是安全治理软件。仅对您拥有或获得书面明示授权进行测试的集群、清单和身份使用它,并遵守适用法律。 ## 关于 **[Cognis Digital](https://cognis.digital)** — 美国怀俄明州 · *让明天更美好:高级网络安全、AI 创新和区块链专业知识。*
标签:子域名突变, 安全合规, 策略即代码, 网络代理, 聊天机器人安全, 逆向工具