binbashing/sops-cop

GitHub: binbashing/sops-cop

轻量级 CLI 工具,用于在 CI 和 commit hooks 中验证 SOPS 加密规则,无需加密密钥即可检测配置文件中的未加密敏感值。

Stars: 1 | Forks: 0

# SOPS-Cop [![Go Version](https://img.shields.io/badge/Go-1.26%2B-00ADD8?logo=go)](https://go.dev/) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/5f2cfba7d7084834.svg)](https://github.com/binbashing/sops-cop/actions/workflows/ci.yml) [![Tests](https://img.shields.io/badge/tests-go%20test%20.%2F...-brightgreen)](https://github.com/binbashing/sops-cop/actions/workflows/ci.yml) SOPS-Cop 是一个 CLI 工具,用于在不需要 SOPS 二进制文件或加密密钥的情况下强制执行 SOPS 加密规则;专为 commit hooks 和 CI 作业设计。 ## 工作原理 - 发现您现有的 SOPS 配置并验证是否遵循了加密规则。 - 支持与 `.sops.yaml` 创建规则匹配的 YAML、JSON、ENV 和 INI 文件。 - 将每个未加密的密钥路径报告到 `stderr`,包含文件路径和位置详细信息(YAML 为 line:column;其他格式仅回退到路径)。 ## 退出代码 - `0`:所有检查的值都已加密 - `2`:参数无效(例如,无法解析的目标路径) - `3`:文件读取错误(例如,文件丢失或权限被拒绝) - `4`:匹配文件格式的输入无效 (YAML/JSON/ENV/INI) - `5`:发现一个或多个未加密的值 - `6`:`.sops.yaml` 配置错误(例如,无效的正则表达式) ## 系统要求 - Go 1.26+ 如果您从发布的二进制文件安装,则不需要 Go。 ## 安装 ### 选项 1:`go install` ``` go install github.com/binbashing/sops-cop@latest ``` ### 选项 2:预构建的发布二进制文件(不需要 Go) 从 GitHub Releases 页面下载适合您操作系统/架构的正确二进制文件,并将 `sops-cop` 放置在您的 `PATH` 中。 ## 构建 ``` go build -o sops-cop . ``` ## 用法 ``` ./sops-cop ``` 或者从项目内的任何路径开始: ``` ./sops-cop -target path/to/any/subdir ``` 打印版本: ``` ./sops-cop -version ``` 帮助: ``` ./sops-cop -h ``` ## 示例 已加密的 YAML (`ok.yaml`): ``` apiVersion: ENC[AES256_GCM,data:abc] kind: ENC[AES256_GCM,data:def] spec: db: password: ENC[AES256_GCM,data:ghi] sops: version: 3.9.0 ``` 从该仓库的任何位置运行: ``` ./sops-cop -target ./secrets # 退出码: 0 ``` 未加密的 YAML (`bad.yaml`): ``` spec: db: password: plaintext ``` 运行: ``` ./sops-cop -target . # 标准错误: # /path/to/repo/secrets/bad.yaml:3:15: 在 'spec.db.password' 发现未加密的值 # 退出码: 5 ``` ## 测试 ``` go test ./... go vet ./... ``` ## CI GitHub Actions 通过以下方式在 push 和 pull request 时运行测试: - `.github/workflows/ci.yml` ## 依赖更新 Dependabot 通过 `.github/dependabot.yml` 配置,每周为以下内容开启 PR: - Go modules (`gomod`) - Docker 基础镜像 (`Dockerfile`) - GitHub Actions 工作流依赖项 ## 项目结构 - `main.go`:CLI 入口点和 YAML 验证逻辑 - `config.go`:`.sops.yaml` 加载和规则匹配 - `main_test.go`:表驱动单元测试 - `.sops.yaml`:包含的 fixture 的示例 SOPS 配置 - `secrets.example.yaml`:示例加密 Kubernetes Secret - `go.mod` / `go.sum`:模块和依赖锁定 ## 设计说明 - 使用 SOPS 库 (`github.com/getsops/sops/v3`) 进行配置解析、规则匹配和加密路径选择 — 确保与 SOPS 的行为完全一致。 - 使用 `gopkg.in/yaml.v3` 节点遍历进行 line:column 错误报告。 - 将实现保持在单个可执行包中,以保持简单性和可移植性。 - 遵循快速失败 CLI 行为,具有用于 CI/pipeline 集成的确定性退出代码。
标签:Chrome Headless, DevSecOps, EVTX分析, EVTX分析, Git钩子, Go, JSON加密, Kubernetes安全, Ruby工具, SOPS, StruQ, YAML加密, 上游代理, 大语言模型安全, 密钥轮换, 日志审计, 机密管理, 配置文件安全, 静态数据加密, 预提交检查