ESC
开源 1 分钟阅读

OpenBao:管理、存储和分发机密信息、证书与密钥的开源软件解决方案

OpenBao 是一款用于管理、存储和分发机密信息、证书和密钥等敏感数据的开源软件,由 OpenSSF 社区以开放治理模式维护。它提供安全机密存储、动态机密、数据加密、租约与吊销等核心功能,支持 PostgreSQL 等多种持久化后端,并详细介绍了基于 Go 的开发、构建与测试方法。

来源:GitHub日榜

OpenBao


请注意:我们非常重视 OpenBao 的安全性以及用户的信任。如果您认为在 OpenBao 中发现了安全问题,请通过负责任的披露方式 联系我们:openbao-security@lists.openssf.org。


OpenSSF Scorecard OpenSSF Best Practices

OpenBao 吉祥物

OpenBao 是一款用于管理、存储和分发机密信息、证书和密钥等敏感数据的软件解决方案。OpenBao 社区致力于在 OSI 认证的开源许可证下提供该软件,并由遵循开放治理原则、由社区主导运营。

现代系统需要访问大量机密信息:数据库凭据、外部服务的 API 密钥、面向服务架构通信的凭据等。了解谁在访问哪些机密信息本身就非常困难,且高度依赖具体平台。若没有定制化解决方案,再叠加密钥轮换、安全存储和详细审计日志几乎是不可能完成的任务。这正是 OpenBao 的用武之地。

OpenBao 的主要特性包括:

  • 安全的机密存储:任意键/值形式的机密信息都可以存储在 OpenBao 中。OpenBao 在将机密信息写入持久化存储之前会对其进行加密,因此获取原始存储的访问权限并不足以读取您的机密信息。OpenBao 可以写入磁盘、PostgreSQL 等多种后端。

  • 动态机密:OpenBao 可以为某些系统(如 AWS 或 SQL 数据库)按需生成机密信息。例如,当应用程序需要访问 S3 存储桶时,它会向 OpenBao 请求凭据,OpenBao 会按需生成一个具有有效权限的 AWS 密钥对。在创建这些动态机密后,OpenBao 还会在租约到期后自动吊销它们。

  • 数据加密:OpenBao 可以在不存储数据的情况下对数据进行加密和解密。这使安全团队能够定义加密参数,而开发者可以将加密后的数据存储在诸如 SQL 数据库等位置,无需自行设计加密方法。

  • 租约与续期:OpenBao 中的所有机密信息都关联一个 租约(lease)。租约到期后,OpenBao 会自动吊销该机密。客户端可以通过内置的续期 API 续约租约。

  • 吊销:OpenBao 内置了对机密吊销的支持。OpenBao 不仅可以吊销单个机密,还可以吊销整棵机密树,例如,某个特定用户读取的所有机密,或某种特定类型的所有机密。吊销功能有助于密钥轮换,以及在发生入侵时锁定系统。

文档与快速上手

文档可在 OpenBao 网站 上获取。

开发 OpenBao

[!WARNING] 在向 OpenBao 提交 pull request 之前,请确保您已阅读并理解 CONTRIBUTING.md 中描述的贡献指南。否则,您的 pull request 很可能会被拒绝。

如果您希望参与 OpenBao 本身或其任何内置系统的开发,首先需要在您的机器上安装 Go。CI 和发布中使用的 Go 工具链版本固定在 .go-version 文件中,但在本地开发中使用最新可用的工具链通常没有问题。

OpenBao 使用 Go Modules,因此建议将仓库克隆到 GOPATH 之外。

构建 bao 二进制文件:

$ mkdir -p bin
$ go build -o bin/bao .

以开发模式运行 OpenBao 服务器:

$ go run . server -dev # 如果已构建二进制文件,也可以使用 `./bin/bao server -dev`。

由于 OpenBao 是一个大型代码库,在冷缓存状态下编译需要一些时间,因此在构建命令中附加 -v 标志有助于更好地了解编译进度。

测试某个包:

$ go test ./some/package

关于开发的一些补充说明:

  • 还有一个 Makefile 可用于高级构建配置和维护任务。在大多数情况下,构建、运行和调试 OpenBao 并不需要它,但值得一看。
  • 该仓库还包含 OpenBao 的网站和文档页面,以及 OpenBao 的 Web UI 应用程序,分别位于 website 和 ui 子目录中。开发说明见 website/README.md 和 ui/README.md。

导入 OpenBao

该仓库发布了两个可供其他项目导入的库:github.com/openbao/openbao/api/v2 和 github.com/openbao/openbao/sdk/v2。

请注意,该仓库还包含 OpenBao(应用程序本身),与大多数 Go 项目一样,OpenBao 使用 Go modules 来管理其依赖项。实现这一机制的文件是 go.mod。碰巧的是,该文件的存在也使得理论上可以将 OpenBao 作为依赖项导入其他项目。一些其他项目已经习惯这样做,以便利用为测试 OpenBao 本身而开发的测试工具。这不是、也从来都不是 OpenBao 项目支持的使用方式。我们不会修复将 github.com/openbao/openbao 导入您的项目失败相关的 bug,也不会为方便此类导入而重构内部代码。