devsecforge/kubernetes-security-lab
GitHub: devsecforge/kubernetes-security-lab
一个在本地 kind 集群和 CI 中演示 Kubernetes 五层纵深防御加固实践的安全实验室项目。
Stars: 0 | Forks: 0
# ☸️ Kubernetes 安全实验室
**针对 Kubernetes 工作负载的动手实践五层纵深防御演示 —— 包含强化的 manifests、最小权限 RBAC、零信任网络和运行时检测,全部在 CI 中执行。**
[](https://github.com/devsecforge/kubernetes-security-lab/actions/workflows/k8s-security.yml)
[](LICENSE)



## 📖 概述
保护 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。这种拒绝就是演示的核心。开源 DevSecOps 作品集的一部分。如果觉得有用,请点个 ⭐ Star。
标签:DevSecOps, 上游代理, 子域名突变, 安全基线, 教学环境, 防御纵深