dsaedsae/cloudsec-policy-stack
GitHub: dsaedsae/cloudsec-policy-stack
一个在本地 kind 集群上实现的 Kubernetes 防御纵深安全栈,结合自动评分的重构学习路线,帮助开发者通过亲手实现多层安全控制来学习云原生安全策略。
Stars: 0 | Forks: 0
# cloudsec-policy-stack
[](https://github.com/dsaedsae/cloudsec-policy-stack/actions/workflows/ci.yml)
[](LICENSE)
[](https://codespaces.new/dsaedsae/cloudsec-policy-stack)
这是一个运行在免费本地 `kind` 集群上的防御纵深(defense-in-depth)Kubernetes 安全栈,以及一个通过亲手重新实现每一项控制来进行自我评估的学习路线。它是**教育与作品集参考**,而非生产级部署;它既不是法律/金融建议,也不是正式的 FSC 合规性映射。
单个请求将依次通过网络 -> HTTP -> 应用授权 -> 运行时的独立策略层,每一层都由你亲自运行的脚本执行和验证。
```
a single request: web ──▶ api ──▶ (resource)
─────────────────────────────────────────────────────────────────────────
Terraform │ kind cluster + Cilium (CNI), as code │ IaC
Identity │ RBAC + label↔SA admission + SPIFFE mutual auth │ who is web/api
Cilium L3 │ default-deny in+out; only web→api→db; egress locked │ no exfil
Cilium L7 │ only GET/POST on /accounts/* reach api (Envoy) │ path/method
Cedar │ api PDP authorizes every call: owner? limit? role? │ authz-as-code
Tetragon │ eBPF runtime: SIGKILLs ALL exec in the db pod (0-exec)│ detect+prevent
Data │ WireGuard in-transit + Secret encryption at-rest │ protect the data
─────────────────────────────────────────────────────────────────────────
checkov │ shift-left scan of Terraform + K8s (CI gate, 0 fail) │ + gitleaks
```
## 亲自动手实现
这是本 repo 的核心。每一项控制都附带可执行的验证,而[重构路线](labs/README.md)将验证器翻转为**自动评分器**:它将某项控制留作一个空白骨架,你仅根据规范重新编写它,现有的测试框架就会通过 PASS/FAIL 进行评分。这不是在抄写标准答案,而是亲手编写并检查哪里出了错。
核心路线为 **M0–M6**,进阶为 **M7–M11**。无集群模块(M0·M1·M6·M7)仅需 Python;集群模块(M2–M5·M8·M9·M10·M11)通过 `up` -> `down` 一次会话启动本地栈来运行。
| 模块 | 控制 | 集群 |
|------|------|----------|
| M0 | Cedar 授权:所有者 / 限制 / 角色 / 冻结 | 不需要 |
| M1 | 左移扫描分类(triage) | 不需要 |
| M2 | 身份:标签 <-> ServiceAccount admission | 需要 |
| M3 | 网络:Cilium L3/L7/egress | 需要 |
| M4 | 运行时:Tetragon 拦截 shell (eBPF) | 需要 |
| M5 | 加密:WireGuard + etcd 静态加密 | 需要 |
| M6 | 代理委托 + ReBAC 图 | 不需要 |
| M7 (进阶) | 跨层一致性 (formal, z3) | 不需要 |
| M8 (进阶) | 运行时 kill 边界 (detection!=prevention) | 需要 |
| M9 (进阶) | 假设泄露 · 爆炸半径封锁 (零日视角) | 需要 |
| M10 (进阶) | GitOps 完整性: drift 自动修正 · reconciler=新身份-TCB | 需要 |
| M11 (进阶) | BPF-LSM exec 允许列表:加载时镜像身份 (arg0/caller 陷阱) | 需要 |
请从[环境准备 (SETUP)](labs/SETUP.md)开始查看并进入 [M0](labs/m0/README.md) —— 从空白的 Cedar 策略到**首次评分约需 5 分钟**,完成 M0(11/11)需要 **~3–6h**,且不需要集群。如果你想先从概念读起,[概念实验室](docs/)会优先讲解相同的控制。
## 技术栈构成
- **IaC** — 使用声明式 Terraform 管理集群和 Cilium CNI。在 CI 中执行 `terraform validate`。
- **零信任网络 (Cilium / eBPF)** — 默认拒绝 ingress·egress,仅允许最小权限的跳板。`web->api` 使用 L7 (Envoy),因此只有账户 API 能够到达,egress 被锁定到下一跳 + DNS,从而防止被攻陷的 pod 接触互联网·云元数据·API server。
- **授权即代码 (Cedar)** — `api` 是一个在每个请求上调用 Cedar 的 PDP:所有者检查、转账限制、拒绝冻结账户 (forbid)、角色层级。可移植到 Amazon Verified Permissions。
- **运行时 (Tetragon / eBPF)** — 在内核中对 db 层的*所有* exec 执行 SIGKILL 的 **zero-exec** `TracingPolicy`(数据存储层完全不需要执行 exec — 仅保留 PID1)。在 M4·M8 实验中,你将亲手编写和测量可选的 shell-kill 原语及其绕过->zero-exec 的过程。
- **身份** — 每层独立的 ServiceAccount,将 `app` 标签绑定到 SA 的 `ValidatingAdmissionPolicy`,以及作为工作负载身份标准的 SPIFFE 双向认证(这是一种手动验证的 configured 状态,而非持续运行的套件)。
- **数据** — WireGuard pod 间传输中加密 + etcd 内 Secret 静态加密。
- **CI 门控** — GitHub Actions 运行 Cedar 测试·checkov·`terraform validate`·gitleaks,而 kind 作业启动该栈以重新执行实时验证。
## 快速开始
**免安装(浏览器):** GitHub **Code ▸ Codespaces ▸ Create** — 无集群实验(M0/M1/M6/M7)将实现 0 安装即时评分(使用 `make progress` 查看进度)。如用于企业内部培训,请参阅[培训指南](docs/using-for-training.md)。
前置条件(本地):Python 3.12。集群路径还需要 Docker、`kind`、`kubectl`、`helm`、`cilium-cli`、`terraform`,以及 Git for Windows(.sh 脚本·评分器是在 Git Bash 中运行,而不是在 PowerShell 中)。
```
# Windows (PowerShell)
python -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements-dev.txt
.venv\Scripts\python.exe cedar\authz.py # 인가 단위테스트, 클러스터 불필요 -> 8/8
powershell -File scripts\up.ps1 # kind + Cilium 프로비저닝, api 빌드, 배포
bash scripts/verify.sh # (Git Bash) 계층들을 라이브로 증명
powershell -File scripts\down.ps1 # 정리
```
```
# Linux / macOS / CI
python -m venv .venv && ./.venv/bin/python -m pip install -r requirements-dev.txt
./.venv/bin/python cedar/authz.py
bash scripts/up.sh && bash scripts/verify.sh && bash scripts/down.sh
```
## 工具 — `cross-layer-lint`
它超越了单独验证 6 个层级的做法,旨在查看**当各层级组合在一起时**,策略是否会相互矛盾。它通过 z3 有限域模型对 Cilium L7(哪些路径是*可达*的)和 Cedar PDP(哪些行为是*已授权*的)进行交叉检查,从而分类出两种缺陷:
- **shadowed(dead) 规则** — Cedar 允许,但 L7 阻止了该路径,导致通过 `web->api` 无法到达的 permit(这是有意的带外策略,还是意外造成的?— 需要审查)
- **ungated 路径** — 可通过 L7 到达,但没有 Cedar 门控的实际缺口 -> **exit 1**
输入:Cedar 判定来自 `cedar/`(cedarpy,实时),路由级门控来自 `app/api/main.py` AST(实时)。L7 可达性是**手动转译** `k8s/netpol.yaml` 中 HTTP 块的规则 — 它不会解析文件本身(诚实范围:hand-translation,非实时数据平面)。
```
make report # -> outputs/cross-layer/report.{html,json,sarif}
python formal/cross_layer.py # 텍스트 리포트 (ungated일 때만 exit 1)
python formal/cross_layer.py --sarif x.sarif # GitHub code scanning용 SARIF 2.1.0
python formal/cross_layer.py --open-auditlogs # 반증: L7 경로를 열면 shadow가 사라진다
```
输出 3 种格式 — **HTML** 用于人类阅读的报告,**JSON** 用于程序集成,**SARIF 2.1.0** 用于上传至 GitHub code scanning。(`make site` 也将 HTML 报告包含在部署包中。)
| 工具 | 检查内容 | 关系 |
|------|---------|------|
| kubescape · trivy | misconfig · CVE · RBAC 图 | 单一层级 — 被本工具补充 |
| kubesplaining | RBAC 权限图 | 〃 |
| **cross-layer-lint** | L7 可达性 × Cedar 授权的**组合** | 跨层 shadow/ungated |
**诚实范围:** 当前域是对演示 3 个动作的**有限域检查**,因此 z3 仅*演示了该技术*,它并不是针对任意集群的通用扫描器。Cedar 判定是具体值(cedarpy),而无限域扩展则是 [cedar-policy-symcc](https://github.com/cedar-policy/cedar)(编译为 SMT 的 Cedar 符号编译器)的正统方法(路线图)。它揭示的不是 CVE,而是*需要验证的层级间交互* — 由于单/双层验证已是公开技术,其贡献度诚实地处于其下。
## 状态
- `scripts/verify.sh` — 在 kind + Cilium + Tetragon 上进行实时验证 21/21(本地·CI 通用)。
- Cedar — 核心授权 8/8,代理委托 17/17(confused-deputy + ASI08 委托深度 cap·逐跳 clamp·来源门控)。ReBAC — 11/11 (`fga model test`)。
- checkov — 452 pass / 0 fail / 5 项已记录的 skip。
- MLS 可验证性覆盖率 — 82.5% (33/40);缺口在 [`docs/mls-coverage.csv`](docs/mls-coverage.csv) 中公开。
各层级的详细信息·验证说明·路线图可在 [`docs/`](docs/) 中找到(在本地通过 `pip install -r requirements-docs.txt && mkdocs serve` 也可作为网站查看)。
## 结构
```
terraform/ kind + Cilium + Tetragon (helm) app/api/ FastAPI Cedar PDP (api 이미지)
cedar/ schema + policies + 단위테스트 k8s/ app, netpol, tracingpolicy, probes
labs/ 재구현 트랙 (M0–M11) docs/ 개념 랩 + 매핑
scripts/ up / verify / scan / down (.ps1+.sh) .github/ CI 워크플로 + kind 설정
```
## 注意事项
由于是本地 `kind` 集群,因此没有云成本。Cedar 策略可移植到 Amazon Verified Permissions,Cilium 策略可移植到任意 Cilium 集群(EKS / GKE / AKS)。`X-User` 身份是未经验证的演示输入(带有防止注入的字符集检查),在实际系统中,principal 将从已验证的 JWT `sub` 中派生。实体是预烧录至镜像中的静态 fixture。许可证:[MIT](LICENSE)。
商标声明:Cilium·Hubble·Tetragon(Isovalent/CNCF)、Cedar·Amazon Verified Permissions·AWS(Amazon)、Kyverno·OpenFGA·SPIFFE(CNCF)、WireGuard(Jason A. Donenfeld)等本文中提及的第三方产品·商标均为各自所有者的资产。本项目作为学习用作品集,与它们没有任何隶属关系,也不存在任何保证或赞助关系。
标签:Docker镜像, JSONLines, 后端开发, 子域名突变, 教学实验, 纵深防御, 请求拦截, 逆向工具, 零信任