遥遥领先
VMware 提供培训和认证,以加速您的进步。
了解更多我代表社区宣布两个新的 Spring Vault 里程碑:1.1.0 M1 和 2.0.0 M2。1.1.0 M1 版本完成了 24 个工单,2.0.0 M2 版本解决了 7 个工单,并且可以从里程碑存储库获得。
自之前的版本以来,以下功能已进入当前的里程碑
通过 AWS IAM 使用 Vault 登录
基于其租期轮换通用密钥
引入 VaultEndpointProvider
以动态配置端点
此外,2.0.0 M2 版本还包含
声明身份验证流程的身份验证 DSL
基于 Spring Framework 5 WebClient
和 Project Reactor 的响应式支持
通过添加 @NonNullApi
和 @Nullable
注解来增强工具支持,以便您喜欢的 IDE 可以识别它们
身份验证步骤提供常用身份验证活动的可重用性。 通过 AuthenticationSteps
创建的步骤以函数式风格描述身份验证流程,并将实际的身份验证执行留给特定的执行器。
// Static token use
AuthenticationSteps.just(VaultToken.of(…));
// AppRole authentication
AuthenticationSteps.fromSupplier(
// Construct login body
() -> Collections.singletonMap("role_id", options.getRoleId()))
// post the payload to Vault to log in
.login("auth/{mount}/login", options.getPath());
身份验证流程需要执行器来执行实际的登录。 我们为根据支持的执行模型提供两个执行器
AuthenticationStepsExecutor
作为同步 ClientAuthentication
的直接替代品。
AuthenticationStepsOperator
用于反应式执行。
ClientAuthentication
附带静态工厂方法,用于为其身份验证特定选项创建 AuthenticationSteps
CubbyholeAuthenticationOptions options = …
RestOperations restOperations = …
AuthenticationSteps steps = CubbyholeAuthentication.createAuthenticationSteps(options);
AuthenticationStepsExecutor executor = new AuthenticationStepsExecutor(steps, restOperations);
VaultToken token = executor.login();
身份验证 DSL 是反应式 Vault 客户端的先决条件,用于将身份验证步骤与其实际执行分离。
Spring Vault 的反应式客户端支持构建在身份验证 DSL 和 Spring Framework 5 的 WebClient
之上。 反应式支持涵盖通过 ReactiveVaultTemplate
进行的读取/写入/列表和删除操作,以及用于会话管理的缓存 VaultToken
提供程序。 您可以使用几乎所有身份验证机制来获取 Vault 令牌。 以下机制实现了 AuthenticationStepsFactory
并为非阻塞登录提供了 AuthenticationSteps
AppId
AppRole
AWS-EC2
客户端证书
Cubbyhole
静态令牌
创建一个配置类以开始使用反应式支持
public class Foo extends AbstractReactiveVaultConfiguration {
@Override
public VaultEndpoint vaultEndpoint() {
return VaultEndpoint.from(URI.create("https://localhost:8200"));
}
@Override
public ClientAuthentication clientAuthentication() {
return new AwsEc2Authentication(restOperations());
}
}
AbstractReactiveVaultConfiguration
的配置支持将实现 AuthenticationStepsFactory
的身份验证调整为反应式身份验证方法,并配置命令式和反应式客户端。 会话不在两个客户端之间共享,但那是未来的任务。 您可以单独使用 ReactiveVaultTemplate
reactiveVaultTemplate.write("secret/mykey", Collections.singletonMap("hello", "world"))
.thenMany(vaultOperations.list("secret"))
.subscribe(item -> System.out.println(item));
或在反应式运行时基础设施(例如 Spring WebFlux)中使用
@RestController
public class SecretsController {
private final ReactiveVaultOperations operations;
// Constructor omitted for brevity
@GetMapping("secrets")
Flux<List> listSecrets() {
return vaultOperations.list("secret");
}
}
如果没有社区,我们不可能成为今天这样成功的项目。 我要感谢所有创建问题并提供反馈的人。
有关完整的更改列表,请参见 1.1.0 M1 和 2.0.0 M2 的更改日志。
项目页面 | GitHub | 问题 | 1.1.0 M1 文档 | 2.0.0 M2 文档 | Stack Overflow