devsecforge/kubernetes-security-lab

GitHub: devsecforge/kubernetes-security-lab

一个在本地 kind 集群和 CI 中演示 Kubernetes 五层纵深防御加固实践的安全实验室项目。

Stars: 0 | Forks: 0

# ☸️ Kubernetes 安全实验室 **针对 Kubernetes 工作负载的动手实践五层纵深防御演示 —— 包含强化的 manifests、最小权限 RBAC、零信任网络和运行时检测,全部在 CI 中执行。** [![K8s Security](https://static.pigsec.cn/wp-content/uploads/repos/cas/07/077c421980be17d569959f60d9a548f1e9bca9c1a5f1f33ccb07ebae48e0a033.svg)](https://github.com/devsecforge/kubernetes-security-lab/actions/workflows/k8s-security.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) ![Kubernetes](https://img.shields.io/badge/Kubernetes-326CE5?logo=kubernetes&logoColor=white) ![Falco](https://img.shields.io/badge/Falco-00AEC7?logo=falco&logoColor=white) ![Trivy](https://img.shields.io/badge/Trivy-1904DA?logo=aqua&logoColor=white)
## 📖 概述 保护 Kubernetes 不是单一的设置,而是**多层防御**,每一层都能捕获其他层遗漏的威胁。本实验室在一个简单的 Web 工作负载周围实施了五个独立的控制措施,提供了一个**故意不安全的反例**让你了解什么是“不安全”,并**在 CI 中执行所有检查**。在本地通过 `kind` 启动它,并实时观察 Pod Security Admission 拒绝不安全的 pod。 ## ✨ 功能 - 🛡️ **第 1 层 — 准入:** 带有 Pod Security Admission `restricted` 的 namespace。 - 🌐 **第 2 层 — 网络:** 默认拒绝 ingress **和** egress 的 NetworkPolicies + 限定的允许规则。 - 🔒 **第 3 层 — Pod 加固:** 非 root 用户、只读文件系统、丢弃 `ALL` 权限、seccomp、资源限制。 - 🪪 **第 4 层 — 身份:** 专用 ServiceAccount、最小权限 RBAC、不自动挂载 token。 - 👁️ **第 5 层 — 运行时:** 自定义 Falco 规则(shell 生成、意外写入、egress)。 - ⚠️ **不安全的反例** — 附带文档、被扫描器标记、被 PSA 拒绝。 - 🤖 **CI 强制执行** — kubeconform + kube-linter + Trivy → 将 SARIF 输出到 Security 选项卡。 ## 🖼️ 截图 ## 🏛️ 架构 完整图表请见 **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)**。 ``` PSA restricted namespace → NetworkPolicy (default-deny) → Hardened Deployment (admission) (network) (non-root, RO-FS, no caps) ↘ least-priv RBAC (no token) ↙ + Falco runtime rules ``` ## ⚙️ 安装 **前置条件:** `docker`、`kind`、`kubectl`(用于现场演示);`trivy`、`kube-linter`、`kubeconform`(用于本地扫描)。 ``` git clone https://github.com/devsecforge/kubernetes-security-lab.git cd kubernetes-security-lab ``` ## 🚀 用法 ``` make up # create a kind cluster + apply the hardened manifests make insecure # try the insecure pod — Pod Security Admission REJECTS it (that's the lesson) make scan # run local security scans (mirrors CI) make down # tear down the cluster ``` 检查正在运行的内容: ``` kubectl -n secure-demo get pods,netpol,role,rolebinding,sa ``` ## 📁 目录结构 ``` kubernetes-security-lab/ ├── manifests/ │ ├── 00-namespace.yaml # PSA restricted │ ├── 01-rbac.yaml # least-privilege SA + Role │ ├── 02-network-policy.yaml # default-deny + allows │ ├── 03-deployment-hardened.yaml # the secure workload │ └── insecure/ │ └── vulnerable-deployment.yaml # ⚠️ intentionally insecure ├── policies/falco/custom-rules.yaml # runtime detection ├── scripts/ │ ├── scan-manifests.sh # local scan (mirrors CI) │ └── setup-kind.sh # local cluster demo ├── docs/ │ ├── ARCHITECTURE.md · THREAT_MODEL.md · HARDENING-CHECKLIST.md ├── .github/workflows/k8s-security.yml ├── .kube-linter.yaml · Makefile └── SECURITY · CONTRIBUTING · CODE_OF_CONDUCT · CHANGELOG · LICENSE ``` ## 🧰 技术栈 `Kubernetes` · `Pod Security Admission` · `NetworkPolicy` · `RBAC` · `Falco` · `Trivy` · `kube-linter` · `kubeconform` · `kind` · `GitHub Actions` ## 🔐 安全与威胁模型 报告:**[SECURITY.md](SECURITY.md)**。STRIDE 分析及被阻止的攻击路径: **[docs/THREAT_MODEL.md](docs/THREAT_MODEL.md)**。可重用的检查清单: **[docs/HARDENING-CHECKLIST.md](docs/HARDENING-CHECKLIST.md)**。 ## 🗺️ 路线图 - [ ] 镜像签名/验证 (Cosign) - [ ] 策略引擎示例 (Kyverno / OPA Gatekeeper) - [ ] kube-bench (CIS Benchmark) 节点加固 - [ ] Helm chart 打包 ## ❓ 常见问题
为什么不安全的 pod 会被拒绝? secure-demo namespace 被标记为 Pod Security Admission enforce: restricted,因此 API server 拒绝准入特权/root/主机 namespace 的 pod。这种拒绝就是演示的核心。
我需要一个真实的集群吗? 不需要 —— make up 使用了 kind (Kubernetes in Docker),因此所有内容都在本地运行。
## 📄 许可证 [MIT](LICENSE) © 2026 devsecforge
开源 DevSecOps 作品集的一部分。如果觉得有用,请点个 ⭐ Star。
标签:DevSecOps, 上游代理, 子域名突变, 安全基线, 教学环境, 防御纵深