|
该版本仍在开发中,尚未被视为稳定。最新稳定版请使用Spring Vault 4.0.0! |
VaultTemplate 简介
该级别VaultTemplate,位于包中org.springframework.vault.core,
是 Spring Vault 支持的核心类别,提供了丰富的功能集
与Vault互动。该模板提供了便捷的作,方便读取、写入和
删除 Vault 中的数据,并提供你的域对象与 Vault 数据之间的映射。
一旦配置好,VaultTemplate是线程安全的,可以重复使用
多次。 |
Vault 文档与域类之间的映射通过委派至Rest模板.Spring Web 支持提供了映射基础设施。
这VaultTemplate类实现了该接口金库运营.
尽可能地,方法在金库运营以方法命名
在 Vault API 上提供,使现有 Vault 开发者熟悉该 API
他们习惯了API和CLI。例如,你会找到以下方法
“写”、“删除”、“阅读”和“撤销”。
设计目标是尽可能方便地过渡
Vault API 的使用金库运营.两者之间的一个主要区别
这两个API是金库运营可以传递域对象,而不是
JSON 键值对。
使用的路径VaultTemplate(以及从那里访问的接口)都被考虑
相对于VaultEndpoint.可以使用完全合格的URI路径
在认证上下文中访问 Vault 集群成员。为了防止不受欢迎
完全访问URI,确保在传递路径前对路径进行净化VaultTemplate.
引用 的首选作方式VaultTemplate实例
是通过其接口金库运营. |
虽然有许多便利方法,但VaultTemplate方便地帮你
如果需要直接访问Vault API,则执行常见任务
未被VaultTemplate你可以用其中之一
其中几个执行回调方法以访问底层API。执行回调
会给你一个参考休息运营对象。
更多信息请参阅“执行回访”部分。
现在让我们看看如何在 Spring 容器的背景下使用 Vault 的示例。
注册和配置Spring Vault豆子
使用 Spring Vault 不需要 Spring 上下文。然而,以下实例VaultTemplate和会话管理器注册在受管上下文中的 将参与
在春季IoC容器提供的生命周期事件中。这对于处理活跃的Vault会话非常有用
应用关闭。你也可以从重复使用中受益VaultTemplate在你的应用中实例。
Spring Vault 自带一个支持的配置类,提供 bean 定义
用于 Spring 上下文。应用配置
类别通常从摘要Vault配置并且必须
提供针对特定环境的额外细节。
从摘要Vault配置需要实现VaultEndpoint vaultEndpoint()和客户端认证 clientAuthentication()方法。
@Configuration
public class AppConfig extends AbstractVaultConfiguration {
/**
* Specify an endpoint for connecting to Vault.
*/
@Override
public VaultEndpoint vaultEndpoint() {
return new VaultEndpoint(); (1)
}
/**
* Configure a client authentication.
* Please consider a more secure authentication method
* for production use.
*/
@Override
public ClientAuthentication clientAuthentication() {
return new TokenAuthentication("…"); (2)
}
}
| 1 | 创建一个新的VaultEndpoint默认指向https://localhost:8200. |
| 2 | 此示例使用Tokens认证赶紧开始。
有关支持的认证方法详情,请参见 [vault.core.authentication]。 |
@Configuration
public class AppConfig extends AbstractVaultConfiguration {
@Value("${vault.uri}")
URI vaultUri;
/**
* Specify an endpoint that was injected as URI.
*/
@Override
public VaultEndpoint vaultEndpoint() {
return VaultEndpoint.from(vaultUri); (1)
}
/**
* Configure a Client Certificate authentication.
* {@link RestOperations} can be obtained from {@link #restOperations()}.
*/
@Override
public ClientAuthentication clientAuthentication() {
return new ClientCertificateAuthentication(restOperations()); (2)
}
}
| 1 | VaultEndpoint可以通过各种工厂方法构建,例如来自(URI uri)或VaultEndpoint.create(String host, int port). |
| 2 | 的依赖关系客户端认证方法可以通过以下方式获得摘要Vault配置或者由你的配置提供。 |
在某些情况下,创建自定义配置类可能会很繁琐。
看看EnvironmentVaultConfiguration允许配置,方法是使用
现有房产来源及斯普林的房产环境.阅读更多
在用EnvironmentVaultConfiguration. |
会话管理
春季金库需要客户端认证登录并访问Vault。
关于认证的详细信息请参见 [vault.core.authentication]。
Vault 登录不应在每次认证后的 Vault 交互中发生,但
必须在整个会话中重复使用。这一方面由会话管理器实现。一个会话管理器决定它多频繁
获得一个关于撤销和续期的Tokens。Spring Vault 包含两种实现方式:
-
SimpleSessionManager:只需从提供的客户端认证无更新和撤销 -
LifecycleAwareSessionManager:这会话管理器Schedules Tokens 如果Tokens可续期,则在处理时撤销登录Tokens。 续期安排在异步任务执行器.LifecycleAwareSessionManager如果使用摘要Vault配置.
用EnvironmentVaultConfiguration
春季金库包括EnvironmentVaultConfiguration从 Spring 配置 Vault 客户端环境以及一组预定义的
财产钥匙。EnvironmentVaultConfiguration支持频繁应用的配置。其他配置可由最合适的配置类推导而来。
包括EnvironmentVaultConfiguration跟@Import(EnvironmentVaultConfiguration.class)现存
基于 Java 的配置类,并通过 Spring 的任何一个提供配置属性地产来源s.
@PropertySource("vault.properties")
@Import(EnvironmentVaultConfiguration.class)
public class MyConfiguration{
}
vault.uri=https://localhost:8200
vault.token=00000000-0000-0000-0000-000000000000
属性键
-
Vault URI:
Vault.uri -
SSL 配置
-
钥匙库资源:
vault.ssl.key商店(可选) -
密钥存储密码:
vault.ssl.key-store-password(存储密码)(可选) -
密钥存储类型:
vault.ssl.key商店类型(通常是可选的开玩笑的,支持也PEM) -
Truststore资源:
vault.ssl.trust-store(可选) -
Truststore 密码:
vault.ssl.trust-store-password(可选) -
Truststore 类型:
vault.ssl.trust-store-type(通常是可选的开玩笑的,支持也PEM) -
启用SSL/TLS协议:
vault.ssl.enabled-protocols(自2.3.2起,可选协议以逗号分隔) -
启用SSL/TLS密码套件:
vault.ssl.enabled-cipher-suites(自2.3.2起,可选密码套件用逗号分隔)
-
-
认证方式:
vault.authentication(默认为Tokens支持的认证方法包括:Tokens,应用,AWS_EC2,AWS_IAM,天蓝色,证书,格子间,库贝尔内特斯)
认证专用属性密钥
-
金库Tokens:
vault.token(金库Tokens)
-
AppRole 路径:
vault.app-role.app-角色路径(默认为应用) -
RoleId:
vault.app-role.role-id -
SecretId:
vault.app-role.secret-id(可选)
-
AWS EC2 路径:
vault.aws-ec2.aws-ec2-path(默认为AWS-EC2) -
角色:
vault.aws-ec2.role -
RoleId:
vault.aws-ec2.role-id(已弃用:使用vault.aws-ec2.role代替) -
身份证明网址:
vault.aws-ec2.identity-document(默认为169.254.169.254/latest/dynamic/instance-identity/pkcs7)
-
角色:
vault.aws-iam.role
-
Azure MSI path:
vault.azure-msi.azure-path(默认为天蓝色) -
角色:
vault.azure-msi.role -
元数据服务网址:
vault.azure-msi.metadata-service(默认为169.254.169.254/metadata/instance?API-version=2017-08-01) -
身份Tokens服务网址:
vault.azure-msi.identity-token-service(默认为169.254.169.254/metadata/identity/oauth2/token?resource=https://vault.hashicorp.com&api-version=2018-02-01)
没有配置选项。
-
初始金库Tokens:
vault.token(金库Tokens)
-
Kubernetes 路径:
vault.kubernetes.kubernetes-path(默认为Kubernetes) -
角色:
vault.kubernetes.role -
服务账户Tokens文件的路径:
vault.kubernetes.service-account-token-file(默认为/var/run/secrets/kubernetes.io/serviceaccount/token)
执行回调
所有 Spring 模板类的一个共同设计特征是所有功能都被路由到某个模板执行回调方法中。
这有助于确保异常和可能需要的资源管理执行一致。
虽然JDBC和JMS在这方面的需求远大于Vault,但它仍然提供了一个单一的访问和日志记录点。
因此,使用执行回调是访问 Vault API 的首选方式
执行我们未公开的方法的罕见作VaultTemplate.
以下是执行回调方法的列表。
-
<T> TdoWithVault(RestOperationsCallback<T>回调)执行给定的休息作回调,允许通过以下方式与Vault交互。休息运营不需要进行治疗。 -
<T> TdoWithSession(RestOperationsCallback<T>回调)执行给定的休息作回调允许在认证会话中与Vault交互。
这里有一个使用以下条件的例子客户回调初始化Vault:
vaultOperations.doWithVault(new RestOperationsCallback<VaultInitializationResponse>() {
@Override
public VaultInitializationResponse doWithRestOperations(RestOperations restOperations) {
ResponseEntity<VaultInitializationResponse> exchange = restOperations
.exchange("/sys/init", HttpMethod.PUT,
new HttpEntity<Object>(request),
VaultInitializationResponse.class);
return exchange.getBody();
}
});