binbashing/sops-cop
GitHub: binbashing/sops-cop
轻量级 CLI 工具,用于在 CI 和 commit hooks 中验证 SOPS 加密规则,无需加密密钥即可检测配置文件中的未加密敏感值。
Stars: 1 | Forks: 0
# SOPS-Cop
[](https://go.dev/)
[](https://github.com/binbashing/sops-cop/actions/workflows/ci.yml)
[](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加密, 上游代理, 大语言模型安全, 密钥轮换, 日志审计, 机密管理, 配置文件安全, 静态数据加密, 预提交检查