hackyshadab/secure-container-kubernetes-devsecops
GitHub: hackyshadab/secure-container-kubernetes-devsecops
一个端到端的 Kubernetes DevSecOps 平台,通过自动化构建、扫描、签名、GitOps 部署与运行时监控,解决安全孤岛与供应链风险问题。
Stars: 1 | Forks: 0
# 安全 Kubernetes DevSecOps 平台






一个生产级别的 Kubernetes 安全实现,将 **GitHub Actions、容器扫描、镜像签名、GitOps 部署、策略强制和运行时威胁检测** 整合到单一端到端工作流中。
该项目展示了现代团队如何在现实环境中保护容器化工作负载,确保速度、可追溯性和纵深防御共存。它反映了企业 DevSecOps 团队如何从构建阶段到生产阶段保护软件供应链和 Kubernetes 运行时。
## 执行摘要
大多数 Kubernetes 部署失败并非因为团队什么都不做,而是因为它们只保护了生命周期的单个阶段。容器可能在 CI 中被扫描,但随后未经验证就被手动部署。集群可能被加固,但仍接受未签名镜像。工作负载可能最初被安全准入,但运行时仍可能被滥用。
本项目填补了这一空白。
它实现了一个完整的 Kubernetes DevSecOps 控制平面,其中:
- 代码通过 GitHub Actions 构建,
- 镜像被扫描漏洞,
- 工件使用 Cosign 签名,
- 部署通过 ArgoCD 和 GitOps 管理,
- Kubernetes 准入通过 Kyverno 强制,
- 运行时威胁通过 Falco 监控。
结果是真实的、安全架构,保护容器生命周期覆盖 **构建、分发、部署、准入和运行时**。
## 问题陈述
Kubernetes 功能强大,但当安全被视为事后考虑时,它会显著扩大攻击面。
常见风险包括:
- 易受攻击的容器镜像进入生产环境,
- 未签名或被篡改的镜像被部署,
- 特权或 root 容器逃逸隔离,
- 不受控制的 Pod 到 Pod 通信,
- 绕过变更控制的直接 kubectl 操作,
- 仅在部署后才出现的恶意运行时行为。
在许多组织中,这些问题是容器事件、集群被入侵和合规审计失败的原因。
本项目建模了企业团队用于降低这些风险的控制措施。
## 解决方案概述
该解决方案使用分层安全控制,在每个阶段强制执行信任并减少爆炸半径:
- **CI** 构建并扫描容器镜像。
- **Cosign** 签名镜像以证明工件完整性。
- **ArgoCD** 通过 GitOps 部署,而非手动集群访问。
- **Kyverno** 阻止不安全的工作负载并验证镜像签名。
- **Falco** 监控运行时活动以检测可疑行为。
- **Kubernetes RBAC 和 Network Policies** 限制访问和横向移动。
这创建了纵深防御设计,其中一个控制不会替代另一个。
## 架构概述
架构将责任分离到软件生命周期的不同阶段:
1. **开发者推送代码** 到 GitHub。
2. **GitHub Actions** 构建容器镜像。
3. **Trivy 或 Grype** 扫描镜像中的已知漏洞。
4. **Cosign** 在构建和扫描成功后签名镜像。
5. 镜像推送到 **容器注册表**。
6. **ArgoCD** 监视 Git 仓库并同步 Kubernetes 清单。
7. **Kyverno** 在准入时验证工作负载。
8. 工作负载在 **Kubernetes** 中以受限权限运行。
9. **Falco** 持续观察运行时行为并对可疑活动发出警报。

此架构反映了真实的 enterprise 模式:**安全的供应链加上安全的运行时**。
## DevSecOps 流水线流程

### 1. 开发者提交
开发者将应用程序代码推送到仓库。
### 2. 构建阶段
GitHub Actions 从 Dockerfile 构建容器镜像。
### 3. 漏洞扫描
镜像使用 Trivy 或 Grype 扫描,以检测操作系统层和应用依赖项中的已知 CVE。
### 4. 镜像签名
Cosign 签名镜像,在构建系统和工件之间建立加密信任关系。
### 5. 注册表推送
签名镜像被推送到容器注册表。
### 6. GitOps 更新
Kubernetes 清单更新以引用新的镜像标签。
### 7. ArgoCD 同步
ArgoCD 检测到 Git 变更并将更新后的清单应用到集群。
### 8. 准入强制
Kyverno 在工作负载被准入集群之前进行验证。
### 9. 运行时监控
Falco 监控系统调用和容器行为以检测可疑活动。
## 安全层级
| 层级 | 工具 | 目的 |
|---|---|---|
| 源码控制 | GitHub | 代码变更跟踪与审查 |
| 构建 | GitHub Actions | 自动化容器构建 |
| 漏洞扫描 | Trivy / Grype | 检测已知 CVE |
| 供应链完整性 | Cosign | 签名容器镜像 |
| 部署自动化 | ArgoCD | 基于 GitOps 的交付 |
| 准入控制 | Kyverno | 阻止不安全工作负载 |
| 集群加固 | RBAC、NetworkPolicy | 限制访问与移动 |
| 运行时安全 | Falco | 检测实时威胁 |
| 审计与可追溯性 | Git + Kubernetes 事件 | 跟踪每一次变更 |
## 威胁模型
本项目围绕最相关的容器和 Kubernetes 威胁设计。
### 已解决的威胁
- **未签名镜像部署**
- 通过 Kyverno 签名验证阻止。
- **注册表中的被篡改镜像**
- 通过 Cosign 签名和准入验证降低风险。
- **特权容器执行**
- 通过非 root 强制执行和安全上下文限制降低风险。
- **集群内部的横向移动**
- 通过 Network Policies 降低风险。
- **未经授权的集群变更**
- 通过 GitOps 和 ArgoCD 降低风险。
- **运行时妥协**
- 通过 Falco 检测。
- **集群配置错误**
- 通过 Kubernetes 策略强制和 RBAC 降低风险。
### 安全假设
- Git 仓库受控并经过审查。
- 注册表受信任,但仍需验证镜像完整性。
- 集群管理员访问被严格限制。
- 运行时检测是必要的,因为构建时扫描无法阻止所有攻击。
## 之前与之后的安全对比
| 场景 | 本项目之前 | 本项目之后 |
|---|---|---|
| 部署镜像 | 手动或松散控制 | 已签名并验证 |
| Kubernetes 变更 | 直接 kubectl 访问 | GitOps 控制 |
| root 容器 | 通常默认允许 | 通过策略被阻止 |
| 镜像真实性 | 无法保证 | 通过 Cosign + Kyverno 验证 |
| 运行时可见性 | 最小 | Falco 检测可疑行为 |
| 审计追踪 | 分散 | 在 Git 和 Kubernetes 事件中集中 |
## 工具与技术栈
- **Kubernetes / Minikube** 用于本地集群部署
- **Docker** 用于镜像打包
- **GitHub Actions** 用于 CI 自动化
- **Trivy / Grype** 用于漏洞扫描
- **Cosign** 用于镜像签名
- **ArgoCD** 用于 GitOps 部署
- **Kyverno** 用于准入控制和策略即代码
- **Falco** 用于运行时威胁检测
## 实现细节
### Kyverno 策略
Kyverno 在准入时强制集群策略。本项目包含以下策略:
- 阻止 root 容器,
- 限制不安全的安全上下文,
- 验证只有已签名镜像才被准入。
这很重要,因为如果攻击者仍能部署不受信任的镜像,构建时的安全措施就毫无意义。
### 镜像签名
Cosign 用于在构建和扫描阶段成功后对镜像进行加密签名。签名建立来源证明,并帮助防止未签名或被篡改的镜像进入生产环境。
### Falco 运行时检测
Falco 监控运行时活动并检测可疑行为,例如:
- 容器内的 shell 执行,
- 意外的文件访问,
- 异常进程行为,
- 以及类似权限提升或妥协的操作。
Falco 在绕过构建时控制后提供了最后一道防线。
## 仓库结构
```
secure-container-kubernetes-devsecops/
│
├── .github/
│ └── workflows/
│ └── ci.yaml
│
├── argocd/
│ └── application.yaml
│
├── app/
│ ├── app.py
│ ├── Dockerfile
│ └── requirements.txt
│
├── k8s/
│ ├── base/
│ │ ├── deployment.yaml
│ │ └── service-account.yaml
│ │
│ └── security/
│ ├── kyverno-policy.yaml
│ ├── network-policy.yaml
│ └── rbac.yaml
│
├── security/
│ ├── falco/
│ │ └── falco-rules.yaml
│ │
│ └── kube-bench/
│ └── job.yaml
│
├── .gitignore
├── Architecture.md
└── README.md
```
##运行
### 1. 启动集群
```
minikube start
```
### 2. 安装 ArgoCD
```
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
```
### 3. 安装 Kyverno
```
kubectl create namespace kyverno
kubectl apply -f https://github.com/kyverno/kyverno/releases/latest/download/install.yaml
```
### 4. 安装 Falco
```
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm install falco falcosecurity/falco --namespace falco --create-namespace
```
### 5. 应用集群策略
```
kubectl apply -f k8s/security/
```
### 6. 与 ArgoCD 同步
```
kubectl apply -f argocd/application.yaml
```
## 截图
### 🔹 Kubernetes 集群概览

👉 显示所有运行组件,包括 Kyverno、Falco、ArgoCD 和应用 Pod。
### 🔹 Kyverno 策略

👉 显示强制执行安全规则的活跃集群策略。
### 🔹 策略强制执行(阻止 root 容器) 🚫

👉 Kyverno 成功阻止不安全的部署尝试。
### 🔹 镜像签名验证失败 🚫

👉 未签名或不受信任的镜像在准入级别被拒绝。
### 🔹 ArgoCD GitOps 仪表板

👉 显示来自 Git 仓库的自动化部署和同步状态。
### 🔹 Falco 运行时警报 🔥

👉 实时检测可疑容器行为。
## 测试与验证
项目通过安全测试验证,证明了在多个阶段强制执行的能力。
### 准入控制测试
使用未签名或无效镜像的部署被 Kyverno 阻止。
### 非 root 强制执行测试
尝试在未设置所需安全上下文的情况下运行的工作负载被拒绝。
### 运行时安全测试
使用测试工作负载触发 Falco 警报,通过可疑容器活动。
这些测试证明流水线不仅仅是构建和部署,而是积极强制执行安全预期。
## 挑战与修复
### Docker Hub 速率限制
在测试镜像验证时,Docker Hub 速率限制影响了未认证的拉取。通过认证 Docker 访问解决。
### Kyverno 策略冲突
Falco 需要提升权限,这与严格非 root 策略冲突。解决方案是排除受信任的系统命名空间并仔细处理策略范围。
### Minikube 上 Falco 初始化
Falco 需要运行时驱动程序设置和 eBPF 兼容性。通过使用适当的 Falco 安装模式并验证集群兼容性解决。
这些是真实的操作问题,而非玩具项目问题,这使得项目在面试中更具相关性。
## 结果与影响
本项目展示了:
- 安全镜像生命周期控制,
- 基于策略的 Kubernetes 准入强制执行,
- GitOps 部署纪律,
- 运行时威胁检测,
- 以及分层集群加固。
它建模了企业团队如何在不影响部署速度或可追溯性的情况下降低风险。
## 实际使用案例
此架构适用于:
- **金融科技和银行平台**,其中信任和合规至关重要,
- **SaaS 平台**,其中快速交付必须保持安全,
- **医疗系统**,处理受监管的工作负载,
- **企业内部平台**,多个团队共享 Kubernetes 基础设施。
任何大规模运行容器的组织都可以使用这些模式来降低供应链和运行时风险。
## 后续增强
可能的下一步改进包括:
- 与 Slack、webhook 或 SIEM 告警集成,
- 使用 ELK 或 Splunk 进行集中日志聚合,
- 与 OPA Gatekeeper 比较策略评估,
- 镜像推广流程跨开发、暂存和生产,
- 多集群 GitOps,
- 以及运行时威胁的自动修复。
## 项目总结
本项目实现了一个安全的 Kubernetes 部署架构,使用 GitOps、容器签名、策略强制和运行时监控。它展示了一个企业风格的 DevSecOps 工作流,从代码提交到运行时执行保护容器生命周期。系统结合了 GitHub Actions、Trivy 或 Grype、Cosign、ArgoCD、Kyverno 和 Falco,在构建、供应链、部署、准入和运行时层强制执行安全。
标签:ArgoCD, Container Security, Cosign, DevSecOps, Falco, GitHub Actions, GitOps, Image Signing, Policy as Code, Runtime Security, Security Automation, Web截图, 上游代理, 企业级安全, 子域名突变, 安全左移, 安全架构, 容器安全, 持续安全, 敏感词过滤, 活动识别, 生产环境, 策略即代码, 聊天机器人安全, 自动笔记, 请求拦截, 软件供应链, 镜像扫描, 镜像签名