OpenBao 是一个基于身份的密钥和加密管理系统。
密钥是指任何需要严格控制访问权限的信息,例如 API 加密密钥、密码和证书。OpenBao 提供通过身份验证和授权机制进行访问控制的加密服务。通过 OpenBao 的用户界面 (UI)、命令行界面 (CLI) 或 HTTP API,可以安全地存储和管理密钥及其他敏感数据的访问,并对其进行严格控制(限制)和审计。
OpenBao 在向客户端(用户、机器、应用程序)提供对密钥或存储的敏感数据的访问权限之前,会对其进行验证和授权。
OpenBao的核心工作流程由四个阶段组成:
- **身份验证:**OpenBao 中的身份验证是指客户端提供信息,OpenBao 使用这些信息来确定客户端是否是其声称的身份。客户端通过身份验证方法验证后,系统会生成一个令牌并将其与策略关联。
- **验证:**OpenBao 会根据 GitHub、LDAP、AppRole 等第三方可信来源验证客户端。
- 授权:系统会将客户端与 OpenBao 安全策略进行匹配。该策略是一组规则,定义了客户端可以使用其 OpenBao 令牌访问哪些 API 端点。策略提供了一种声明式的方法来授予或禁止对 OpenBao 中特定路径和操作的访问权限。
- 访问权限:OpenBao 通过根据与客户端身份关联的策略颁发令牌来授予对密钥、机密信息和加密功能的访问权限。客户端随后可以使用其 OpenBao 令牌进行后续操作。
OpenBao 的主要特点包括:
- 安全密钥存储:OpenBao 可以存储任意键值对密钥。OpenBao 会在将这些密钥写入持久存储之前对其进行加密,因此即使获得原始存储的访问权限,也无法访问您的密钥。
- 动态密钥:OpenBao 可以为某些系统(例如 Kubernetes 或 SQL 数据库)按需生成密钥。例如,当应用程序需要访问 Kubernetes 集群时,它会向 OpenBao 请求凭据,OpenBao 将按需生成具有有效权限的 Kubernetes 服务帐户令牌。创建这些动态密钥后,OpenBao 还会在租约到期后自动撤销它们。
- 数据加密:OpenBao 无需存储数据即可对其进行加密和解密。这使得安全团队能够定义加密参数,开发人员可以将加密数据存储在诸如 SQL 数据库之类的位置,而无需自行设计加密方法。
- 租约与续租:OpenBao 中的所有密钥都关联着一个租约。租约到期后,OpenBao 会自动撤销该密钥。客户端可以通过内置的续租 API 来续租。
- 撤销:OpenBao 内置了密钥撤销功能。OpenBao 不仅可以撤销单个密钥,还可以撤销密钥树,例如撤销特定用户读取的所有密钥,或者撤销特定类型的所有密钥。撤销功能有助于密钥轮换,并在发生入侵时锁定系统。