ByReisK/byreis
GitHub: ByReisK/byreis
一个零基础设施的 GitOps 密钥管理工具,使用非对称加密允许贡献者安全提交密钥而无需查看内容。
Stars: 0 | Forks: 0
# byreis
**传递密钥。而非窥见内容。**
友好的 GitOps 密钥管理,采用非对称访问控制 — 使用 Go 编写。
## 什么是 byreis?
byreis 允许团队在普通的 git 仓库中管理密钥,但有一个关键特点:
贡献者使用团队的管理员公钥对一个值进行加密,然后提交一个拉取请求。他们从不持有私钥,因此可以添加或更新密钥,但永远无法解密密钥——即使是他们刚刚提交的那个值也不行。管理员审阅解密后的值并合并。
```
# 贡献者 — 仅限写入,无需私钥
byreis submit --key STRIPE_API_KEY
# 管理员 — 审查真实价值,然后合并
byreis review --pr myorg/my-app-secrets#42
byreis admin merge --pr myorg/my-app-secrets#42 --expect
\
--project myapp --file secrets/production.enc.yaml
```
无需服务器。无需供应商后端。仅需 git 和现代公钥加密。
## 为什么选择 byreis?
现有工具迫使人们做出权衡:
- **SOPS + age** — 零基础设施且原生支持 git,但采用对称加密:任何拥有密钥的人都能读取所有内容,且无密钥的贡献者完全无法编辑共享的环境文件。
- **基于服务器的管理器** — 用户体验良好,但需要基础设施或供应商支持。
- **仅限 Kubernetes 的控制器** — 无法用于普通的本地或 CI 工作流。
byreis 填补了这一空白:这是唯一的零基础设施、纯 git 工具,让那些必须永远不能 _读取_ 密钥的人仍然可以安全地 _添加和更新_ 它们。
## 当前状态
稳定版本已发布至 **v0.9.0**。v0.9 增加了插件支持的管理员身份(YubiKey 认证);向使用插件管理员的项目提交内容的贡献者需要在 PATH 中有 `age-plugin-yubikey`,但 **不需要** YubiKey 硬件。请访问[版本发布](https://github.com/ByReisK/byreis/releases)页面,或浏览完整文档站点 [byreisk.github.io/byreis](https://byreisk.github.io/byreis/)。
## 安装
### 预构建二进制文件(推荐)
从[版本发布](https://github.com/ByReisK/byreis/releases)页面下载适用于您平台的二进制文件。
支持的平台:**linux/amd64**、**linux/arm64**、**darwin/amd64**、**darwin/arm64**。
Windows 可构建但非发布二进制目标;Windows 用户必须从源码构建。
```
# 示例:Linux amd64
curl -L https://github.com/ByReisK/byreis/releases/download/v0.5.0/byreis-linux-amd64 \
-o /usr/local/bin/byreis
chmod +x /usr/local/bin/byreis
```
### 从源码构建
需要 Go 1.26 或更高版本。
```
git clone https://github.com/ByReisK/byreis.git
cd byreis
make build # produces ./bin/byreis
```
或直接安装:
```
go install github.com/ByReisK/byreis/cmd/byreis@latest
```
## 2 分钟快速上手
### 贡献者:提交一个密钥
```
# 1. 初始化项目(仅首次 — 固定注册表信任锚点)
byreis init --project myapp --registry myorg/byreis-admins
# 2. 提交一个密钥 — 交互式收集值(掩码输入)
byreis submit --key DATABASE_URL
# byreis 针对项目密钥库提交一个 PR。
# 您将无法再次查看该值;它仅被加密至管理员公钥。
```
### 管理员:审阅并合并
```
# 1. 审查提交内容 — 解密并显示值
byreis review --pr myorg/my-app-secrets#42
# 输出包含一个 PinnedSHA。将其传递给合并以防止分支重新推送。
# 2. 合并已审查的提交
byreis admin merge --pr myorg/my-app-secrets#42 \
--expect \
--project myapp \
--file secrets/production.enc.yaml
```
在交互式终端中,`submit` 和 `review` 会打开一个交互式 TUI。
设置 `BYREIS_NON_INTERACTIVE=1` 或将标准输出重定向可以抑制 TUI 并使用纯 CLI 路径(适用于 CI)。
## 命令
| 命令 | 模式 | 描述 |
|---|---|---|
| `init` | 任意 | 初始化项目并固定注册表信任锚点 |
| `doctor` | 任意 | 健康检查:模式、信任锚点、注册表状态 |
| `submit` | 任意 | 加密并提交一个密钥(单个键或 `--file .env` 批量) |
| `review` | 管理员 | 审阅一个待处理的提交 PR |
| `admin merge` | 管理员 | 将审阅过的提交合并到活动密钥文件 |
| `get` | 管理员 | 解密并打印单个密钥值 |
| `decrypt` | 管理员 | 解密并打印密钥文件中的所有值 |
| `export` | 管理员 | 将密钥文件解密为 `env`/`dotenv` 流(仅管理员) |
| `run` | 管理员 | 运行一个命令,其环境变量来源于解密的密钥文件(仅管理员) |
| `edit` | 管理员 | 就地编辑一个密钥值(解密 → `$EDITOR` → 重新加密) |
| `rotate` | 管理员 | 轮换接收方集合并重新加密所有密钥文件 |
| `admin rotation reconcile` | 管理员 | 恢复一个部分轮换的项目 |
| `request-access` | 贡献者 | 开一个 PR,请求被添加为接收方 |
| `admin request list` | 管理员 | 列出待处理的 request-access PR |
| `admin request reject` | 管理员 | 关闭一个请求或提交 PR 并附上原因 |
| `admin audit show` | 管理员 | 显示(并可选验证)注册表审计日志 |
| `version` | 任意 | 打印版本号 |
关于标志和完整用法:`byreis --help`。
请参阅 **[完整用户指南](docs/guide.md)** 了解详细工作流、配置参考、CI 集成和安全模型。
## 管理员注册表要求
每个项目仓库中的管理员注册表仓库(由项目仓库中的 `.byreis.yaml` 指向)**必须** 在尝试任何 `byreis admin merge` 或反向写入操作之前,在 `main` 分支上具有以下分支保护规则:
- **需要签名提交(byreis 感知的状态检查)** — 注册表必须在 `main` 分支上运行一个 byreis 验证器作为 CI 门禁,以根据注册表的签名者名单验证每次反向提交中的 `byreis-signer:` / `byreis-sig:` 页脚。GitHub 原生的“要求签名提交”分支保护规则**不是**强制执行点,不应依赖,因为 byreis 将其 Ed25519 签名嵌入在提交信息正文中,而不是在提交对象的 `gpgsig` 头中。
- **线性历史记录** — 不允许合并提交;仅限变基。确保反向单调性。
- **禁止强制推送** — 普通的 `git push --force` 被拒绝。byreis 使用 `--force-with-lease`(CAS)来检测并发写入;如果远端接受强制推送,并发写入保护将失效。
- **禁止删除分支** — 保护签名提交验证和防回滚检查所依赖的历史记录。
反向写入会在推送时验证这些要求,如果远端拒绝推送,则会报告 `ErrRegistryWriteRejected` 错误。如果看到此错误,请验证上述分支保护配置。
## 贡献
请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 许可证
Apache License 2.0 — 请参阅 [LICENSE](LICENSE)。标签:EVTX分析, GitOps, Go语言, SOC Prime, Streamlit, YubiKey支持, 云配置检测, 公钥加密, 加密工具, 团队协作, 安全可观测性, 安全最佳实践, 密码学, 开发工具, 手动系统调用, 拉取请求管理, 数据隔离, 无服务器, 日志审计, 版本控制, 秘密存储, 秘密管理, 程序破解, 结构化查询, 网络安全研究, 自动化安全, 访问控制, 零基础设施, 非对称加密