openbao/openbao

GitHub: openbao/openbao

OpenBao 是一款社区驱动的开源密钥管理解决方案,旨在安全地存储、分发和轮换敏感数据,是 Vault 的开源替代品。

Stars: 5635 | Forks: 366

# OpenBao **请注意**:我们高度重视 OpenBao 的安全性和用户的信任。如果您认为在 OpenBao 中发现了安全问题,请通过 [openbao-security@lists.openssf.org](mailto:openbao-security@lists.openssf.org) _负责地披露_。 [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/openbao/openbao/badge)](https://scorecard.dev/viewer/?uri=github.com/openbao/openbao) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/9126/badge)](https://www.bestpractices.dev/projects/9126) - [网站](https://www.openbao.org) - [邮件列表](https://lists.openssf.org/g/openbao) - [GitHub Discussions](https://github.com/openbao/openbao/discussions) - [聊天服务器](https://linuxfoundation.zulipchat.com/) - [`#openssf-openbao-discussion`](https://linuxfoundation.zulipchat.com/#narrow/channel/529890-openssf-openbao-discussion) - [`#openssf-openbao-support`](https://linuxfoundation.zulipchat.com/#narrow/channel/530381-openssf-openbao-support) - [`#openssf-openbao-tsc`](https://linuxfoundation.zulipchat.com/#narrow/channel/530382-openssf-openbao-tsc) - 工作组: - [`#openssf-openbao-wg-namespaces`](https://linuxfoundation.zulipchat.com/#narrow/channel/532995-openssf-openbao-wg-namespaces) - [`#openssf-openbao-wg-pkcs11`](https://linuxfoundation.zulipchat.com/#narrow/channel/532994-openssf-openbao-wg-pkcs11) - [`#openssf-openbao-wg-scalability`](https://linuxfoundation.zulipchat.com/#narrow/channel/532998-openssf-openbao-wg-scalability) - [`#openssf-openbao-wg-supply`](https://linuxfoundation.zulipchat.com/#narrow/channel/532999-openssf-openbao-wg-supply) - [`#openssf-openbao-wg-ui`](https://linuxfoundation.zulipchat.com/#narrow/channel/532997-openssf-openbao-wg-ui)

OpenBao Mascot

**OpenBao 旨在提供一种软件解决方案,用于管理、存储和分发敏感数据,包括 secrets、证书和密钥。OpenBao 社区打算在 OSI 批准的开源许可证下提供此软件,并由一个在开放治理原则下运行的社区领导。** 现代系统需要访问众多的 secrets:数据库凭证、外部服务的 API 密钥、面向服务架构通信的凭证等。了解谁正在访问哪些 secrets 已经非常困难且具有平台特异性。如果没有自定义的解决方案,加上密钥轮换、安全存储和详细的审计日志,这几乎是不可能的。这正是 OpenBao 的用武之地。 OpenBao 的主要特性包括: * **安全的 Secret 存储**:任意的键值对 secrets 可以存储在 OpenBao 中。OpenBao 在将 secrets 写入持久存储之前会对其进行加密,因此仅访问原始存储并不足以访问您的 secrets。OpenBao 可以写入磁盘、[PostgreSQL](https://www.postgresql.org/) 等。 * **动态 Secrets**:OpenBao 可以为某些系统按需生成 secrets,例如 AWS 或 SQL 数据库。例如,当应用程序需要访问 S3 存储桶时,它会向 OpenBao 请求凭证,OpenBao 将按需生成具有有效权限的 AWS 密钥对。在创建这些动态 secrets 之后,OpenBao 还会在租约到期后自动撤销它们。 * **数据加密**:OpenBao 可以在不存储数据的情况下对其进行加密和解密。这允许安全团队定义加密参数,开发人员将加密数据存储在诸如 SQL 数据库之类的位置,而无需设计自己的加密方法。 * **租约和续订**:OpenBao 中的所有 secrets 都有一个与之关联的_租约_。在租约结束时,OpenBao 将自动撤销该 secret。客户端可以通过内置的续订 API 续订租约。 * **撤销**:OpenBao 内置支持 secret 撤销。OpenBao 不仅可以撤销单个 secret,还可以撤销 secret 树,例如,特定用户读取的所有 secret,或特定类型的所有 secret。撤销有助于密钥轮换以及在发生入侵时锁定系统。 ## 文档、入门指南和认证考试 文档可在 [OpenBao 网站](https://www.openbao.org/docs/)上获取。 ## 开发 OpenBao 如果您希望开发 OpenBao 本身或其任何内置系统,首先需要在您的机器上安装 [Go](https://www.golang.org)。 对于本地开发,首先确保已正确安装 Go,包括设置 [GOPATH](https://golang.org/doc/code.html#GOPATH)。确保 `$GOPATH/bin` 位于您的路径中,因为某些发行版捆绑了旧版本的构建工具。接下来,克隆此存储库。OpenBao 使用 [Go Modules](https://github.com/golang/go/wiki/Modules),因此建议您将存储库克隆到 GOPATH ***之外***。 然后,您可以通过引导您的环境来下载任何所需的构建工具: ``` $ make bootstrap ... ``` 要编译 OpenBao 的开发版本,请运行 `make` 或 `make dev`。这会将 OpenBao 二进制文件放入 `bin` 和 `$GOPATH/bin` 文件夹中: ``` $ make dev ... $ bin/bao ... ``` 要编译带有 UI 的 OpenBao 开发版本,请运行 `make static-dist dev-ui`。这会将 OpenBao 二进制文件放入 `bin` 和 `$GOPATH/bin` 文件夹中: ``` $ make static-dist dev-ui ... $ bin/bao ... ``` 要运行测试,请输入 `make test`。注意:这需要安装 Docker。如果以退出状态 0 退出,则一切正常! ``` $ make test ... ``` 如果您正在开发特定的包,可以通过指定 `TEST` 变量来仅运行该包的测试。例如,在下面的示例中,仅运行 `vault` 包测试。 ``` $ make test TEST=./vault ... ``` ### 导入 OpenBao 此存储库发布了两个可由其他项目导入的库: `github.com/openbao/openbao/api/v2` 和 `github.com/openbao/openbao/sdk/v2`。 请注意,此存储库还包含 OpenBao(产品),并且与大多数 Go 项目一样,OpenBao 使用 Go modules 来管理其依赖项。执行此操作的机制是 [go.mod](./go.mod) 文件。实际上,该文件的存在也使得理论上可以将 OpenBao 作为依赖项导入到其他项目中。其他一些项目已经这样做了,以便利用为测试 OpenBao 本身而开发的测试工具。这不是,也从来不是使用 OpenBao 项目的受支持方式。我们不太可能修复与将 `github.com/openbao/openbao` 导入您的项目失败相关的错误。 另请参阅下面的“基于 Docker 的测试”部分。 ### 验收测试 OpenBao 拥有全面的[验收测试](https://en.wikipedia.org/wiki/Acceptance_testing),涵盖了 secret 和 auth 方法的大部分功能。 如果您正在开发 secret 或 auth 方法的功能,并希望验证其是否正常工作(并且没有破坏其他任何东西),我们建议运行验收测试。 **警告**:验收测试会创建/销毁/修改*真实资源*,在某些情况下可能会产生实际费用。在存在 bug 的情况下,技术上可能存在损坏的后端留下孤立数据的可能性。因此,请自担风险运行验收测试。至少,我们建议在您正在测试的任何后端的自己的私有帐户中运行它们。 要运行验收测试,请调用 `make testacc`: ``` $ make testacc TEST=./builtin/logical/pki ... ``` `TEST` 变量是必需的,您应该指定后端所在的文件夹。建议使用 `TESTARGS` 变量过滤到特定资源进行测试,因为一次测试所有资源有时会花费很长时间。 验收测试通常需要设置其他环境变量,例如访问密钥。测试本身应该会尽早报错并告诉您要设置什么,因此这里没有记录。 ### 基于 Docker 的测试 我们创建了一种受 NewTestCluster 启发的实验性新测试机制。 如何使用它的示例: ``` import ( "testing" "github.com/openbao/openbao/sdk/v2/helper/testcluster/docker" ) func Test_Something_With_Docker(t *testing.T) { opts := &docker.DockerClusterOptions{ ImageRepo: "openbao/openbao", ImageTag: "latest", } cluster := docker.NewTestDockerCluster(t, opts) defer cluster.Cleanup() client := cluster.Nodes()[0].APIClient() _, err := client.Logical().Read("sys/storage/raft/configuration") if err != nil { t.Fatal(err) } } ``` 以下是我们如何在实践中使用它的更现实的示例。 `DefaultOptions` 使用 `hashicorp/vault:latest` 作为 repo 和 tag,但它也会查看环境变量 `BAO_BINARY`。如果已填充,它会将 `BAO_BINARY` 引用的本地文件复制到容器中。这在测试本地更改时很有用。 或者您可以设置 `COMMIT_SHA`,它将附加到我们构建的镜像名称中,作为调试便利。 ``` func Test_Custom_Build_With_Docker(t *testing.T) { opts := docker.DefaultOptions(t) cluster := docker.NewTestDockerCluster(t, opts) defer cluster.Cleanup() } ``` 最后,这是一个使用自定义二进制文件运行现有 OSS docker 测试的示例: ``` $ GOOS=linux make dev $ VAULT_BINARY=$(pwd)/bin/bao go test -run 'TestRaft_Configuration_Docker' ./vault/external_tests/raft/raft_binary ok github.com/openbao/openbao/vault/external_tests/raft/raft_binary 20.960s ```
标签:DevSecOps, EVTX分析, Go语言, HashiCorp Vault Fork, IAM, JSONLines, KMS, OpenBao, SIEM, StruQ, 上游代理, 令牌管理, 敏感数据保护, 数据加密, 数据隔离, 日志审计, 测试用例, 秘密管理, 程序破解, 证书管理, 请求拦截, 身份识别与访问管理, 零信任