yankawai/kube-shipguard

GitHub: yankawai/kube-shipguard

一款开源的 Kubernetes 发布就绪扫描器,在部署前检查清单配置并拦截高风险工作负载。

Stars: 0 | Forks: 0

# Kube ShipGuard [![CI](https://github.com/yankawai/kube-shipguard/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/yankawai/kube-shipguard/actions/workflows/ci.yml) [![Go](https://img.shields.io/badge/Go-1.26-00ADD8?logo=go&logoColor=white)](go.mod) [![SARIF](https://img.shields.io/badge/SARIF-enabled-2E3440)](.github/workflows/ci.yml) [![许可证](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) Kube ShipGuard 是一款开源的 Kubernetes 发布就绪扫描器,专为平台和 DevOps 团队设计。它会在部署前检查渲染后的清单,并在 CI 中拦截高风险工作负载。 该扫描器主要关注审查者通常需要手动检查的生产环境信号:探针、资源、非根容器、只读文件系统、镜像标签、PodDisruptionBudgets、NetworkPolicies 以及有风险的 Secret/ConfigMap 模式。 ![Kube ShipGuard 终端审查](https://raw.githubusercontent.com/yankawai/kube-shipguard/main/docs/assets/kube-shipguard-review.png) ## 为什么开发它 Kubernetes 清单通常能通过语法验证,但直接部署仍然不安全。Kube ShipGuard 添加了一个发布门控,它能回答一个更具实际意义的问题: ## 功能 - 扫描普通的 Kubernetes YAML 和多文档文件。 - 支持 `Deployment`、`StatefulSet`、`DaemonSet`、`Pod`、`Service`、`Secret`、`ConfigMap`、`PodDisruptionBudget` 和 `NetworkPolicy`。 - 检测缺失的探针、缺失的资源 requests/limits、不安全的 security contexts、可变的镜像标签、单副本工作负载、缺失的 PDB 以及缺失的 NetworkPolicies。 - 输出 text、JSON 和 SARIF 格式的结果。 - 包含用于本地清单审查的交互式终端审查模式。 - 支持基于风险评分的发布结论:`SHIP`、`REVIEW` 或 `BLOCK`。 - 通过 `--changed-from` 支持感知差异的 PR 扫描。 - 支持为遗留扫描结果设置基线,并为已接受的例外情况设置过期的抑制规则。 - 扫描渲染后的 Helm 和 Kustomize 输出。 - 支持根据严重程度进行 CI 失败门控。 - 附带可复用的 GitHub Action。 ## 快速开始 ``` go run ./cmd/kube-shipguard scan examples/secure --format text --fail-on high ``` 构建二进制文件: ``` make build ./bin/kube-shipguard scan examples/secure ``` 为 GitHub 代码扫描生成 SARIF: ``` go run ./cmd/kube-shipguard scan deploy --format sarif --output kube-shipguard.sarif ``` 在 Pull Request 中仅扫描已更改的清单: ``` go run ./cmd/kube-shipguard scan deploy --changed-from origin/main --fail-on high ``` 为现有扫描结果创建基线,然后仅针对新风险失败: ``` go run ./cmd/kube-shipguard baseline deploy --output .kube-shipguard-baseline.yaml go run ./cmd/kube-shipguard scan deploy --baseline .kube-shipguard-baseline.yaml --fail-on high ``` 扫描渲染后的清单: ``` go run ./cmd/kube-shipguard scan --helm-chart charts/api --helm-values values-prod.yaml go run ./cmd/kube-shipguard scan --kustomize overlays/prod ``` 运行不安全示例且不让进程失败: ``` make demo ``` 打开交互式终端审查: ``` go run ./cmd/kube-shipguard review examples/unsafe ``` 审查模式快捷键: - `1`、`2`、`3`、`a` 过滤高、中、低或所有发现; - `/` 搜索规则 ID、文件、资源、消息和修复文本; - `?` 打开帮助覆盖层; - `j/k`、方向键、`home` 和 `end` 导航发现项; - `q` 退出。 ## 输出示例 ``` Kube ShipGuard found 7 findings HIGH KSG004 default/api Deployment/api container api allows privilege escalation HIGH KSG006 default/api Deployment/api container api uses mutable image tag latest MED KSG001 default/api Deployment/api container api has no readiness probe ``` ## 退出行为 `--fail-on` 控制返回非零退出代码的最低严重程度: - `none` 永不失败; - `low` 在低、中或高风险时失败; - `medium` 在中或高风险时失败; - `high` 仅在高风险发现项时失败。 ## GitHub Action ``` name: kube-shipguard on: pull_request: jobs: scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - uses: yankawai/kube-shipguard@v1 with: path: deploy changed-from: origin/main baseline: .kube-shipguard-baseline.yaml config: .kube-shipguard.yaml fail-on: high format: sarif output: kube-shipguard.sarif ``` 如需上传 SARIF,请添加: ``` - uses: github/codeql-action/upload-sarif@v4 with: sarif_file: kube-shipguard.sarif ``` ## 检查 | 规则 | 严重程度 | 描述 | | --- | --- | --- | | KSG001 | Medium | 容器没有 readiness probe | | KSG002 | Medium | 容器没有 liveness probe | | KSG003 | Medium | 容器的 CPU/memory requests 或 limits 不完整 | | KSG004 | High | 容器允许特权提升 | | KSG005 | Medium | 容器根文件系统可写 | | KSG006 | High | 容器使用了可变的镜像标签 | | KSG007 | High | 工作负载可以以 root 身份运行 | | KSG008 | Medium | 容器未丢弃 Linux capabilities | | KSG009 | Medium | 多副本工作负载的副本数少于两个 | | KSG010 | Medium | 工作负载没有匹配的 PodDisruptionBudget | | KSG011 | Medium | 工作负载没有匹配的 NetworkPolicy | | KSG012 | High | Secret 清单存储在仓库的 YAML 中 | | KSG013 | High | ConfigMap 键看起来像 secret | | KSG014 | Low | Service 直接暴露 LoadBalancer | ## 文档 - [配置](docs/configuration.md) - [SARIF 集成](docs/sarif.md) - [安全策略](SECURITY.md)
标签:EVTX分析, Go, Ruby工具, 日志审计, 错误基检测, 静态代码分析