OpenBao:集中管理密钥、证书与动态凭据
一个给后端团队管密钥和凭据的 Go 服务,能按 lease 生成并自动撤销 AWS、SQL 等动态秘密。
GitHub openbao/openbao 更新 2026-09-26 分支 main 星标 7.7K 分叉 585
Go 密钥管理 AWS PostgreSQL Go Modules

🧭 决策指南

适合,如果你

  • 你的服务需要按请求获取 AWS 或 SQL 数据库临时凭据
    README 的 Dynamic Secrets 章节明确说明可按需生成 AWS 或 SQL 数据库 secrets,并在 lease 到期后自动撤销。
  • 你要把加密数据放进 PostgreSQL,而不想自行设计加密方法
    README 的 Data Encryption 章节说明 OpenBao 可加解密而不存储数据,Secure Secret Storage 章节列出 PostgreSQL 后端。
  • 你的 Go 项目需要使用 github.com/openbao/openbao/api/v2 或 sdk/v2
    README 的 Importing OpenBao 章节将这两个库列为可供其他项目导入的库。
  • 你需要按用户或秘密类型批量撤销凭据
    README 的 Revocation 章节说明可撤销单个 secret,也可撤销特定用户读取的 secrets 树或某类 secrets。

不适合,如果你

  • 你计划直接导入 github.com/openbao/openbao 根模块作为应用依赖
    README 的 Importing OpenBao 章节明确表示这种用法 NOT supported,项目不会修复相关 bug。
  • 你准备提交 OpenBao PR,但不打算阅读 CONTRIBUTING.md
    README 的 Developing OpenBao 章节警告,未阅读并理解 CONTRIBUTING.md 可能导致 pull request 被拒。

前置条件

  • 开发 OpenBao 本身需要安装 Go;CI 和 releases 使用的工具链版本固定在 .go-version。
  • 项目使用 Go Modules,README 建议将仓库克隆到 GOPATH 之外。
  • 构建 bao binary 的 README 命令使用 `go build -o bin/bao .`。
  • 仓库同时包含 website 和 ui 子树,分别有 website/README.md 与 ui/README.md 开发说明。

第一步命令(README 原文)

$ go run . server -dev # Or `./bin/bao server -dev` if you've built the binary already.

要注意

  • 不要把 github.com/openbao/openbao 根模块当作受支持 SDK 使用
    README 的 Importing OpenBao 章节只支持 github.com/openbao/openbao/api/v2 与 github.com/openbao/openbao/sdk/v2,并明确拒绝根模块依赖用法。
  • 冷缓存编译时可使用 -v 查看较长的 Go 编译进度
    README 的 Developing OpenBao 章节说明大型代码库冷缓存编译需要一段时间,并建议构建命令附加 -v。
  • 修改 website 或 ui 时不能只看 Go 项目说明
    README 说明仓库还包含 website 与 ui,并分别指向 website/README.md 和 ui/README.md。

材料未说明

  • README 未说明生产部署的高可用拓扑、节点数量或故障切换方式。
  • README 未提供 AWS、SQL 或 PostgreSQL 动态凭据支持的完整系统清单与版本兼容矩阵。
  • README 未给出吞吐量、延迟、密钥数量或 lease 并发规模指标。
  • README 未说明 v2.7.0 相比此前 4 个版本的具体变更。
  • README 未提供与其他 secrets 管理产品的功能、迁移或兼容性对比。
  • README 未说明 api/v2 与 sdk/v2 的 API 稳定性、认证方式和升级兼容策略。

💡 深度解析

6
不适合 我维护 Go 微服务,想直接 import github.com/openbao/openbao 复用 OpenBao 的内部测试工具;这种集成方式受项目支持吗?
适合读者: 维护 Go 微服务、计划直接导入 OpenBao 仓库模块以复用内部测试工具的 Go 工程师

不适合,因为 README 明确拒绝把整个 github.com/openbao/openbao 作为应用依赖导入;受支持的是公开的 api/v2 和 sdk/v2。

  • 仓库发布了 github.com/openbao/openbao/api/v2 与 github.com/openbao/openbao/sdk/v2 两个可供其他项目导入的库。
  • README 明确写道,导入整个仓库是 “NOT, and has NEVER been, a supported way”。
  • 项目不会修复因这种导入方式产生的 bug,也不会为此重构内部代码。
  • OpenBao 核心以 Go 实现,因此 Go 客户端集成有明确入口,但不能把应用本身当作稳定的普通依赖。

第一步应改为评估 api/v2 或 sdk/v2 是否覆盖所需能力;README 没有说明这两个库的 API 稳定性承诺和版本兼容矩阵。

  • README「Importing OpenBao」:"This repository publishes two libraries ... api/v2 and sdk/v2"
  • README「Importing OpenBao」:"This is NOT, and has NEVER been, a supported way to use the OpenBao project"
  • 项目数据:main_language 为 Go
材料未说明:README 未列出 api/v2 和 sdk/v2 分别覆盖的功能边界。;README 未说明这两个库的语义版本策略、兼容性承诺和升级迁移流程。
不适合 我有一个无法实现租约续期、只能长期缓存一次获取的数据库凭据的遗留应用;OpenBao 的动态秘密是否适合直接接入?
适合读者: 负责遗留应用接入的 SRE,应用无法实现租约续期,只能长期缓存一次获取的数据库凭据

不适合直接接入,因为 OpenBao 的动态秘密以 lease 为生命周期边界,而该应用无法续期、过期后也不能自动重新获取凭据。

  • README 说明所有秘密都有 lease,租约结束时 OpenBao 会自动撤销秘密。
  • 客户端需要通过内置 renew APIs 续期;不能续期的应用无法保证凭据持续有效。
  • 动态 AWS 或 SQL 凭据在租约到期后会自动撤销,长期缓存会导致应用继续使用失效凭据。
  • OpenBao 的价值正是把生成、续期和撤销纳入生命周期,因此绕过这些机制会削弱方案的设计目标。

除非遗留应用增加续期、过期重取或由外部代理代管这些逻辑,否则不应把动态秘密直接作为它的唯一凭据来源。README 未说明官方遗留应用代理或缓存组件。

  • README「Leasing and Renewal」:"All secrets in OpenBao have a lease associated with them"
  • README「Leasing and Renewal」:"At the end of the lease, OpenBao will automatically revoke that secret"
  • README「Dynamic Secrets」:"OpenBao will also automatically revoke them after the lease is up"
  • README「Leasing and Renewal」:"Clients are able to renew leases via built-in renew APIs"
材料未说明:README 未说明是否存在官方 sidecar、代理或客户端缓存机制来替遗留应用处理续期。;README 未说明租约过期时应用请求失败的具体错误格式和重试语义。
适合 我只想在本机用 Go 快速启动 OpenBao,验证秘密存储和 API 调用;README 提供了可直接执行的路径吗?
适合读者: 需要先在本机验证秘密 API 的 Go 开发者,使用 README 指定的 Go 工具链和开发模式

适合本机快速验证,因为 README 直接提供了 Go 构建和 server -dev 启动命令;但这条路径只证明开发环境可运行,不足以代表生产部署。

  • 项目核心使用 Go,README 要求先安装 Go,并说明 CI 和发布使用 .go-version 中固定的工具链版本。
  • 可以直接构建 bao 二进制,也可以不构建二进制而用 go run 启动。
  • README 明确给出 server -dev 作为开发模式启动方式,适合快速检查服务和 API 链路。
  • 生产环境所需的正式初始化、持久化、访问控制和高可用配置没有在这段快速入门中展开。

因此它适合本地验证,不应把开发模式默认当成生产配置。README 没有说明 dev 模式的认证、数据保留和安全边界。

  • README「Developing OpenBao」:"you'll first need Go installed"
  • README「Developing OpenBao」:"$ go run . server -dev"
  • README「Developing OpenBao」:"$ go build -o bin/bao ."
  • 项目数据:main_language 为 Go
$ go run . server -dev # Or `./bin/bao server -dev` if you've built the binary already.
材料未说明:README 未说明开发模式默认监听地址、认证方式和数据目录。;README 未说明从开发模式迁移到正式持久化部署的具体步骤。
适合 我同时维护 PostgreSQL 数据库和 AWS 资源,能否用 OpenBao 替代应用配置中的长期数据库密码和 AWS Access Key?
适合读者: 维护 PostgreSQL 数据库和 AWS 资源、希望让应用按需获得短期凭据的 DevOps/SRE 工程师

适合,因为 OpenBao 明确支持针对 AWS 和 SQL 数据库生成动态凭据,并以租约控制其生命周期。

  • 应用可以按需请求 AWS 凭据,OpenBao 会生成具有有效权限的 AWS keypair。
  • 动态凭据的租约到期后会自动撤销,减少长期静态凭据的暴露窗口。
  • 所有秘密都有 lease,客户端可通过内置 renew API 续期。
  • PostgreSQL 可作为 OpenBao 的持久化后端,但这不等于 OpenBao 已替应用完成数据库权限模型设计。

应用必须能够处理续期失败、租约过期和重新获取凭据;README 没有说明 PostgreSQL 动态角色和 AWS 权限模板的具体配置语法。

  • README「Dynamic Secrets」:"OpenBao can generate secrets on-demand for some systems, such as AWS or SQL databases"
  • README「Leasing and Renewal」:"Clients are able to renew leases via built-in renew APIs"
  • README「Secure Secret Storage」:"OpenBao can write to disk, PostgreSQL, and more"
材料未说明:README 未说明 PostgreSQL 动态凭据角色的配置步骤、默认权限和兼容的 PostgreSQL 版本。;README 未说明 AWS 动态凭据覆盖哪些 AWS 服务以及权限模板如何定义。
适合 我们需要集中管理数据库凭据、API keys、证书和加密密钥,并且要求采用 OSI 批准的开源许可证;OpenBao 是否符合这个约束?
适合读者: 负责企业秘密存储的安全团队,要求采用 OSI 批准许可证并避免供应商绑定

适合,因为项目同时覆盖秘密、证书和密钥管理,并明确以 OSI 批准的 MPL 2.0 许可证和社区治理为定位。

  • README 将数据库凭据、外部服务 API keys、服务间认证凭据列为典型需求。
  • 任意键值秘密会在写入持久化存储前加密,底层存储被读取并不直接等于获得明文。
  • OpenBao 提供不持久化明文数据的数据加解密能力,应用可把密文保存到自己的 SQL 数据库。
  • 项目数据标明许可证为 Mozilla Public License 2.0,README 说明目标是 OSI-approved open-source license 和 community-run governance。

不过许可证合规、证书生命周期、审计留存和主密钥保护的企业落地细节不能仅由许可证或 README 推断。

  • README 开头:"manage, store, and distribute sensitive data including secrets, certificates, and keys"
  • README「Secure Secret Storage」:"OpenBao encrypts these secrets prior to writing them to persistent storage"
  • README「Data Encryption」:"OpenBao can encrypt and decrypt data without storing it"
  • 项目数据:license 为 Mozilla Public License 2.0
材料未说明:README 未列出证书签发、续期和吊销的具体引擎或配置方法。;README 未规定企业审计日志的格式、留存周期和外部 SIEM 集成方式。;需要法务确认 MPL 2.0 对内部修改、分发和组合使用的具体义务。
视情况 我希望业务数据继续存放在自己的 SQL 数据库,同时不自行设计加密算法;OpenBao 的 Data Encryption 能否满足这个架构约束?
适合读者: 希望在自有 SQL 数据库中保存密文、由安全团队集中控制加密参数的应用开发团队

视情况,因为 OpenBao 可以提供不持久化明文的数据加解密服务,但 README 没有证明它会自动完成密钥轮换、历史密文重加密和灾难恢复设计。

  • README 明确说 OpenBao 能加密和解密数据而不存储数据。
  • 应用可以把密文保存到自己的 SQL 数据库,从而把业务数据持久化与加密服务分开。
  • 安全团队可以集中定义加密参数,开发者不必自行设计加密方法。
  • 但加密接口不是完整的数据安全方案;密文版本、密钥轮换、备份恢复和旧数据解密兼容性仍需架构设计。

如果需求只是集中调用加解密服务并自行管理密文存储,它符合约束;如果要求系统自动承担完整密钥生命周期,当前 README 信息不足以确认。

  • README「Data Encryption」:"OpenBao can encrypt and decrypt data without storing it"
  • README「Data Encryption」:"developers to store encrypted data in a location such as a SQL database"
  • README「Data Encryption」:"security teams to define encryption parameters"
材料未说明:README 未说明加密算法、密钥版本、轮换接口和旧密文迁移方式。;README 未说明 OpenBao 加密服务在备份、恢复、不可用和跨环境迁移时的行为。;README 未说明是否会持久化密钥材料以及密钥解封流程如何配置。

✨ 核心亮点

  • 动态生成 AWS 与 SQL 凭据并按 lease 自动撤销
  • 支持 PostgreSQL 持久化与加密存储密钥
  • 提供无需存储数据的加解密能力
  • Go 项目提供 api/v2 与 sdk/v2 库
  • 拥有 7,731 星、v2.7.0 与 10 位贡献者

🔧 工程化

  • Secure Secret Storage 加密后保存任意 key/value 密钥
  • Dynamic Secrets 按需生成 AWS 或 SQL 数据库凭据
  • lease 到期自动撤销,并支持 renew APIs 续租
  • 支持按用户或类型撤销一棵 secrets 树

⚠️ 风险

  • 根模块 github.com/openbao/openbao 导入明确不受支持
  • 大型 Go 代码库冷缓存编译需要一段时间
  • 提交 PR 未阅读 CONTRIBUTING.md 可能被拒
  • 安全问题应通过 [email protected] 负责披露

👥 适合谁?

  • 需要 AWS 或 SQL 动态凭据的后端服务团队
  • 要把加密数据存入 PostgreSQL 等数据库的开发团队
  • 需要 Go api/v2 或 sdk/v2 集成的项目
  • 维护密钥轮换、审计与撤销流程的安全团队