前言
Spring Vault 项目将核心 Spring 概念应用于使用 HashiCorp Vault 开发解决方案。我们提供了一个“模板”作为用于存储和查询文档的高级抽象。您会注意到与 Spring Framework 中的 REST 支持有相似之处。
本文档是 Spring Vault 的参考指南。它解释了 Vault 概念和语义以及语法。
参考文档的这一部分解释了 Spring Vault 提供的核心功能。
Vault 支持引入了 Vault 模块功能集。
1. 文档结构
本节提供 Spring 和 Vault 的基本介绍。 它包含有关后续开发以及如何获得支持的详细信息。
文档的其余部分引用了 Spring Vault 特性并假设 用户熟悉 HashiCorp Vault 以及 Spring 概念。
2. 认识Spring
Spring Vault 使用 Spring 框架的核心功能,例如 IoC 容器。虽然了解 Spring API 并不重要,但了解它们背后的概念很重要。至少,无论您选择使用什么 IoC 容器,IoC 背后的概念都应该熟悉。
Vault 支持的核心功能可以直接使用,无需调用 Spring Container 的 IoC 服务。这很像RestTemplate
它可以“独立”使用,无需 Spring 容器的任何其他服务。要利用 Spring Vault 文档的所有功能(例如会话支持),您需要使用 Spring 配置库的某些部分。
要了解有关 Spring 的更多信息,您可以参考详细解释 Spring 框架的全面(有时是撤防)文档。有很多关于这个问题的文章、博客条目和书籍 - 查看 Spring 框架主页了解更多信息。
3. 了解金库
安全性和使用机密是每个使用数据库、用户凭据或 API 密钥的开发人员都关心的问题。Vault 通过提供与访问控制、吊销、密钥滚动和审计相结合的安全存储来介入。简而言之:Vault 是一种用于安全访问和存储机密的服务。密钥是您想要严格控制访问的任何内容,例如 API 密钥、密码、证书等。
学习 Vault 的起步是 www.vaultproject.io。以下是有用资源的列表:
-
该手册介绍了 Vault,并包含指向入门指南、参考文档和教程的链接。
-
联机 shell 提供了一种与 Vault 实例交互的便捷方式,并结合联机教程。
Spring Vault 为访问、存储和撤销密钥提供客户端支持。 借助 HashiCorp 的 Vault,您可以有一个中心位置 管理所有环境中应用程序的外部机密数据。 Vault 可以管理静态和动态密钥,例如应用程序数据、 远程应用程序/资源的用户名/密码,并提供凭据 适用于 MySQL、PostgreSQL、Apache Cassandra、Consul、AWS 等外部服务。
4. 要求
Spring Vault 2.x 二进制文件需要 JDK 级别 8.0 及更高版本,以及 Spring Framework 6.0.11 及更高版本。
就 Vault 而言,Vault 至少是 v0.9.6。
5. 其他帮助资源
学习新框架并不总是一帆风顺的。在本节中,我们尝试提供我们认为易于遵循的 Spring Vault 模块入门指南。但是,如果您遇到问题或只是在寻求建议,请随时使用以下链接之一:
5.1. 支持
有几个支持选项可用:
5.1.1. 社区论坛
在 Stackoverflow 上发布有关 Spring Vault 的问题,以共享信息并互相帮助。请注意,只有过帐才需要注册。
5.1.2. 专业支持
Spring Vault 和 Spring 背后的公司 Pivotal Software, Inc. 提供专业的源头支持,并保证响应时间。
5.2. 跟随开发
有关 Spring Vault 源代码存储库、夜间构建和快照工件的信息,请参阅 Spring Vault 主页。您可以通过 Stackoverflow 上的社区与开发人员进行交互,帮助使 Spring Vault 最好地满足 Spring 社区的需求。如果您遇到错误或想要提出改进建议,请在 Spring Vault 问题跟踪器上创建一个工单。要了解 Spring 生态系统的最新消息和公告,请订阅 Spring 社区门户。最后,你可以关注 Spring 博客或 Twitter 上的项目团队(SpringCentral)。
6. 新奇且值得注意
6.2. Spring Vault 2.4 中的新功能
-
支持用户名/密码、LDAP、Okta 和 RADIUS 身份验证的用户名/密码身份验证。
-
支持保险库存储库的版本控制键/值密钥引擎。
6.3. Spring Vault 2.3 中的新功能
-
支持用于密钥库和信任库使用的 PEM 编码证书。
-
ReactiveVaultEndpointProvider
用于非阻塞查找VaultEndpoint
. -
VaultKeyValueMetadataOperations
用于键值元数据交互。 -
对
transform
secrets 引擎(企业功能)。 -
每次登录尝试都会重新加载 Kubernetes 和 PCF 身份验证的登录凭据。
-
SecretLeaseContainer
出版SecretLeaseRotatedEvent
而不是SecretLeaseExpiredEvent
和SecretLeaseCreatedEvent
成功进行机密轮换时。 -
AbstractVaultConfiguration.threadPoolTaskScheduler()
bean 类型更改为TaskSchedulerWrapper
而不是ThreadPoolTaskScheduler
. -
从 2.3.2 开始:
GcpIamCredentialsAuthentication
6.4. Spring Vault 2.2 中的新功能
-
通过
@VaultPropertySource
. -
SpEL 支持
@Secret
. -
添加对 Jetty 作为响应式 HttpClient 的支持。
-
LifecycleAwareSessionManager
和ReactiveLifecycleAwareSessionManager
立即发出AuthenticationEvent
s. -
弃用
AppIdAuthentication
. 用AppRoleAuthentication
而是按照 HashiCorp Vault 的建议。 -
CubbyholeAuthentication
并包裹AppRoleAuthentication
现在使用sys/wrapping/unwrap
端点。 -
Kotlin 协程支持
ReactiveVaultOperations
.
6.6. Spring Vault 2.0 中的新增功能
-
身份验证步骤 DSL 用于组成身份验证流。
-
响应式 Vault 客户端通过
ReactiveVaultOperations
. -
基于 Spring Data KeyValue 的 Vault 存储库支持。
-
传输批量加密和解密支持。
-
存储为 JSON 的策略的策略管理。
-
支持CSR签名、证书吊销和CRL检索。
-
RoleId/SecretId 展开以进行 AppRole 身份验证。
-
Spring Security 与基于传输机密引擎的集成
BytesKeyGenerator
和BytesEncryptor
.
6.7. Spring Vault 1.1.0 中的新增功能
-
配置传输密钥的加密/解密版本。
-
AppRole 身份验证的拉取模式。
-
传输批量加密和解密支持。
-
基于 TTL 的通用机密轮换。