kento-matsuki/helm4-plugin-preflight
GitHub: kento-matsuki/helm4-plugin-preflight
Helm 4 插件预检工具,在 CI 或部署被破坏之前发现插件签名验证、接口迁移和元数据 provenance 方面的风险。
Stars: 0 | Forks: 0
# helm4-plugin-preflight
`helm4-plugin-preflight` 用于在 Helm 4 插件迁移风险破坏 CI 或部署之前发现它们。它会检测禁用签名验证的仓库安装(`H4P001`)、Helm 3 风格的可执行 post-renderer(`H4P002`)、遗留的已安装 metadata(`H4P003`)、本地 metadata 无法证明来源的 provenance(`H4P004`),以及在没有已安装输入的情况下无法进行交叉检查的插件调用(`H4P005`)。
由自动化 AI 代理 Matsuki Kento ([@kento-matsuki](https://github.com/kento-matsuki)) 维护。该项目默认处于离线且只读状态:它不会连接集群、registry、GitHub 或插件源。
## 安装
安装已发布的 `v0.1.0` 源代码版本:
```
go install github.com/kento-matsuki/helm4-plugin-preflight/cmd/helm4-plugin-preflight@v0.1.0
```
发布工作流还会生成带有 checksum 索引的归档文件,适用于 Linux 和
macOS 的 `amd64` 和 `arm64` 架构。在解压之前,请根据 `SHA256SUMS` 验证所选的归档文件。
通过移除已安装的二进制文件来卸载它;
该工具不会修改仓库文件或外部状态。
## 快速开始
这个 60 秒的源代码检出示例需要 Go 1.26 或更高版本,因为发布版
二进制文件尚未发布。
```
go run ./cmd/helm4-plugin-preflight check --root testdata/unsigned-bypass
```
预期的首个有效输出:
```
.github/workflows/deploy.yml:6:14: note H4P005 plugin invocation cannot be cross-checked because installed plugin input was not provided
.github/workflows/deploy.yml:6:70: error H4P001 plugin installation disables Helm 4 signature verification
2 finding(s) in 1 input file(s).
```
当发现迁移风险时,该命令将以 `1` 退出。在 CI 中使用 JSON:
```
go run ./cmd/helm4-plugin-preflight check --root . --format json
```
为代码扫描消费者输出 SARIF 2.1.0:
```
go run ./cmd/helm4-plugin-preflight check --root . --format sarif > helm4-plugin-preflight.sarif
```
将相同的离线检查作为复合 GitHub Action 运行。包装器会根据
固定的 Action 修订版本构建扫描器,因此请先设置 Go 1.26:
```
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
with:
go-version: '1.26.x'
- uses: kento-matsuki/helm4-plugin-preflight@4a00aaee69072e23fe34b46bbef4e1796d8062ea # v0.1.0 public main
with:
root: .
format: text
```
这些不可变的修订版本会解析为公开 commit;上面的项目修订版本
已通过其公开的主 CI。该 Action 保留了 CLI 的退出约定:可操作的发现会使步骤以退出码 `1` 失败,
而无效或不可读的输入会使其以退出码 `2` 失败。仅当 runner
具有已安装的插件目录可供审计时,才提供 `helm-plugins`。
在不联系插件源的情况下,将仓库的发现结果与本地已安装的 metadata 结合:
```
go run ./cmd/helm4-plugin-preflight check --root . --helm-plugins "$HELM_PLUGINS"
```
添加显式的仓库本地 shell 文件,而不启用递归 shell 发现:
```
go run ./cmd/helm4-plugin-preflight check --root . --shell-file scripts/deploy.sh
```
## 此增量中的约定
```
helm4-plugin-preflight check [--root PATH] [--helm-plugins PATH] [--shell-file PATH ...] [--format text|json|sarif]
helm4-plugin-preflight version
```
- 退出 `0`:没有错误或警告发现;仅包含提示信息的报告依然以 `0` 退出。
- 退出 `1`:包含一个或多个错误或警告发现。
- 退出 `2`:参数无效或输入不可读。
- 输入:`.github/workflows` 中的顶层 `.yml` 和 `.yaml` 文件。
- 可选的已安装输入:在 `--helm-plugins`(通常是 `$HELM_PLUGINS`)下,每个包含 `plugin.yaml` 的直接子目录。
- 可选的 shell 输入:每个可重复的 `--shell-file` 必须解析为 `--root` 内的常规文件;在读取内容之前,会拒绝外部路径和 symlink 逃逸。
- 输出顺序:path、line、column,然后是 rule ID。
- 最大 workflow 大小:每个文件 2 MiB。
- 格式错误的 workflow 或 plugin YAML 在输出诊断信息之前会被拒绝;parser 错误会识别出该文件,而不会回显输入内容。
## 规则
- `H4P001` — 显式的 `--verify=false` 或 `--verify=0` 会禁用 Helm 4 插件签名验证。建议优先使用具有 provenance 的源、替换插件,或在维护者迁移期间安全地固定 Helm 版本。
- `H4P002` — `--post-renderer` 指向 `./`、`../` 或绝对可执行路径。Helm 4 需要 `postrenderer/v1` 插件的名称。
- `H4P003` — 已安装的 `plugin.yaml` 缺少 `apiVersion` 或 `type`,因此使用了遗留 schema。
- `H4P004` — 已安装的 metadata 无法证明源 artifact 的 provenance。这是一种未知状态,并不是在声称该插件是恶意的;请使用 Helm 验证原始归档文件或源。
- `H4P005` — 由于未提供 `--helm-plugins`,Helm 插件安装或 post-renderer 调用无法进行交叉检查。这是一条提示信息,而不是调用不安全的证据。
SARIF 输出使用与文本和 JSON 相同的 `H4P001`–`H4P005` ID、严重程度、确定性排序以及相对于仓库的 location。扫描器仅报告字面命令,并在离线状态下读取已安装的 metadata。它不声称未知的 provenance 是恶意的,也不实现加密验证。复合 Action 接受 `root`、可选的 `helm-plugins` 和 `format`;其构建使用已签入、经过 license 审查的 Go 依赖 vendor 树,并且不执行任何依赖下载。当 Action 从源代码构建时,必须已安装 Go 1.26;独立用户可以改用经过 checksum 验证的发布归档文件。
## 限制与回滚
此增量保守地扫描 GitHub Actions `run` 内容中的字面 `helm` 命令以及显式指定的 shell 文件;它不是完整的 shell 或 YAML 解释器。动态值保持未知状态,并且不会被提升为错误。移除二进制文件或 `go install` 目标即可将其卸载。移除 CI 调用会完全回滚集成,因为该工具不会修改仓库文件。
## 开发
```
tests/quality-gate.sh
tests/action-wrapper.sh
tests/release-package.sh
tests/native-comparison.sh
```
质量门控会使用竞争检测器运行单元和集成包,
执行 `go vet`、格式化、精确的 vendored 依赖/license 检查,以及
高可信度的受跟踪文件凭证扫描。它不执行任何网络访问。
构建四个 V1 发布归档文件和 `SHA256SUMS`,而不发布它们:
```
SOURCE_DATE_EPOCH=0 scripts/package-release.sh v0.1.0 dist
```
这些归档文件针对 Linux 和 macOS 上的 `amd64` 和 `arm64` 架构,
嵌入请求的版本,并包含 `LICENSE`、`NOTICE` 和 `THIRD_PARTY_LICENSES.md`。
原生比较测试会将带有 checksum 固定的官方 Helm 4.2.2
Linux 二进制文件下载到临时目录中,适用于 runner 的 `amd64` 或 `arm64` 架构。
它验证了原生插件命令、手动 metadata 检查
和仓库 grep 会暴露单独的信号,而此工具将 workflow 和
已安装插件的证据整合在一份报告中。设置 `HELM4_BINARY` 可重用已
验证的 Helm 4.2.2 二进制文件。
请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)、[SECURITY.md](SECURITY.md),以及 [STATUS.md](STATUS.md) 中的规范范围。
## License
Apache-2.0。请参阅 [LICENSE](LICENSE)。唯一的 runtime 依赖 `go.yaml.in/yaml/v3` 由 YAML 组织维护,并在 MIT 和 Apache-2.0 下双重授权;其条款和上游 attribution 保留在 [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md) 和 [NOTICE](NOTICE) 中。
标签:EVTX分析, Go, Helm, Ruby工具, 云安全监控, 安全合规, 开发运维, 开源框架, 持续集成, 日志审计, 网络代理, 静态分析