类,位于包中,
是 Spring 的 Vault 支持的核心类,提供丰富的功能集
与 Vault 交互。该模板提供了读取、写入和
删除 Vault 中的数据,并提供域对象和 Vault 数据之间的映射。VaultTemplate
org.springframework.vault.core
配置后,是线程安全的,可以跨
多个实例。VaultTemplate |
Vault 文档和域类之间的映射是通过委托给 来完成的。Spring Web 支持提供了映射基础结构。RestTemplate
该类实现接口 。
在尽可能的情况下,上的方法都以方法命名
在 Vault API 上可用,使现有 Vault 开发人员熟悉 API
习惯了 API 和 CLI 的人。例如,您将找到诸如
“写入”、“删除”、“读取”和“撤销”。
设计目标是尽可能轻松地在
Vault API 的使用和 .两者之间的主要区别
这两个 API 是可以传递域对象而不是
JSON 键值对。VaultTemplate
VaultOperations
VaultOperations
VaultOperations
VaultOperations
引用实例上的操作的首选方式
是通过它的接口。VaultTemplate VaultOperations |
虽然有许多方便的方法可以轻松帮助您
如果您需要直接访问 Vault API 才能访问,请执行常见任务
您可以使用以下之一的未显式公开的功能
多个执行回调方法来访问底层 API。execute 回调
将为您提供对对象的引用。
有关详细信息,请参阅执行回调部分。VaultTemplate
VaultTemplate
RestOperations
现在,让我们看一下如何在 Spring 容器的上下文中使用 Vault 的示例。
配置后,是线程安全的,可以跨
多个实例。VaultTemplate |
引用实例上的操作的首选方式
是通过它的接口。VaultTemplate VaultOperations |
注册和配置 Spring Vault bean
使用 Spring Vault 不需要 Spring Context。但是,托管上下文中注册的实例将参与其中
在 Spring IoC 容器提供的生命周期事件中。这对于在以下情况下处置活动 Vault 会话非常有用
应用程序关闭。您还可以从在应用程序中重用同一实例中受益。VaultTemplate
SessionManager
VaultTemplate
Spring Vault 附带了一个支持配置类,该类提供 Bean 定义
用于 Spring 上下文。应用程序配置
类通常扩展自 并且需要
提供特定于环境的其他详细信息。AbstractVaultConfiguration
从需求扩展到实现
“VaultEndpoint vaultEndpoint()”和方法。AbstractVaultConfiguration
ClientAuthentication 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 | 此示例用于快速入门。
有关支持的身份验证方法的详细信息,请参阅 [vault.core.authentication]。TokenAuthentication |
@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 可以使用各种工厂方法(例如 或 .from(URI uri) VaultEndpoint.create(String host, int port) |
2 | 方法可以从配置中获取方法的依赖关系,也可以由配置提供。ClientAuthentication AbstractVaultConfiguration |
在某些情况下,创建自定义配置类可能很麻烦。
看看允许使用
来自现有财产来源和 Spring 的 .阅读更多
在使用 EnvironmentVaultConfiguration 中。EnvironmentVaultConfiguration Environment |
1 | 创建一个默认指向 的新建。VaultEndpoint https://localhost:8200 |
2 | 此示例用于快速入门。
有关支持的身份验证方法的详细信息,请参阅 [vault.core.authentication]。TokenAuthentication |
1 | VaultEndpoint 可以使用各种工厂方法(例如 或 .from(URI uri) VaultEndpoint.create(String host, int port) |
2 | 方法可以从配置中获取方法的依赖关系,也可以由配置提供。ClientAuthentication AbstractVaultConfiguration |
在某些情况下,创建自定义配置类可能很麻烦。
看看允许使用
来自现有财产来源和 Spring 的 .阅读更多
在使用 EnvironmentVaultConfiguration 中。EnvironmentVaultConfiguration Environment |
会话管理
Spring Vault 需要登录和访问 Vault。
有关身份验证的详细信息,请参阅 [vault.core.authentication]。
Vault 登录不应在每次经过身份验证的 Vault 交互中发生,但
必须在整个会话中重复使用。这方面由实现处理。A 决定多久一次
获取关于吊销和续订的令牌。Spring Vault 提供了两种实现:ClientAuthentication
SessionManager
SessionManager
-
SimpleSessionManager
:仅从提供的令牌中获取令牌,无需刷新和吊销ClientAuthentication
-
LifecycleAwareSessionManager
:这计划令牌 如果令牌可续期,则续订,并在处置时撤销登录令牌。 续订计划使用 . 如果使用 .SessionManager
AsyncTaskExecutor
LifecycleAwareSessionManager
AbstractVaultConfiguration
用EnvironmentVaultConfiguration
Spring Vault 包括从 Spring 配置 Vault 客户端和一组预定义的
属性键。 支持经常应用的配置。通过从最合适的配置类派生来支持其他配置。包括到现有
基于 Java 的配置类,并通过任何 Spring 的 s 提供配置属性。EnvironmentVaultConfiguration
Environment
EnvironmentVaultConfiguration
EnvironmentVaultConfiguration
@Import(EnvironmentVaultConfiguration.class)
PropertySource
@PropertySource("vault.properties")
@Import(EnvironmentVaultConfiguration.class)
public class MyConfiguration{
}
vault.uri=https://localhost:8200
vault.token=00000000-0000-0000-0000-000000000000
属性键
-
保管库 URI:
vault.uri
-
SSL 配置
-
密钥库资源:(可选)
vault.ssl.key-store
-
密钥库密码:(可选)
vault.ssl.key-store-password
-
密钥库类型:(可选,通常,也支持
vault.ssl.key-store-type
jks
pem
) -
信任库资源:(可选)
vault.ssl.trust-store
-
信任库密码:(可选)
vault.ssl.trust-store-password
-
信任库类型:(可选,通常,还支持
vault.ssl.trust-store-type
jks
pem
) -
已启用的 SSL/TLS 协议:(从 2.3.2 开始,可选,协议以逗号分隔)
vault.ssl.enabled-protocols
-
已启用的 SSL/TLS 密码套件:(从 2.3.2 开始,可选,密码套件以逗号分隔)
vault.ssl.enabled-cipher-suites
-
-
认证方式:(默认为 ,支持的认证方式有:、、、、
vault.authentication
TOKEN
TOKEN
APPID
APPROLE
AWS_EC2
AWS_IAM
AZURE
CERT
CUBBYHOLE
KUBERNETES
)
特定于身份验证的属性键
-
Vault Token(金库令牌):
vault.token
-
AppId 路径:(默认为
vault.app-id.app-id-path
app-id
) -
AppId:
vault.app-id.app-id
-
用户 Id:。 并使用 ,各自的用户 ID 机制。 任何其他值都与 一起使用。
vault.app-id.user-id
MAC_ADDRESS
IP_ADDRESS
MacAddressUserId
IpAddressUserId
StaticUserId
-
AppRole 路径:(默认为
vault.app-role.app-role-path
approle
) -
角色 ID:
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
-
身份证件 URL:(默认为
vault.aws-ec2.identity-document
169.254.169.254/latest/dynamic/instance-identity/pkcs7
)
-
角色:
vault.aws-iam.role
-
Azure MSI 路径:(默认为
vault.azure-msi.azure-path
azure
) -
角色:
vault.azure-msi.role
-
元数据服务 URL:(默认为
vault.azure-msi.metadata-service
169.254.169.254/metadata/instance?api-version=2017-08-01
) -
标识令牌服务 URL:(默认为
vault.azure-msi.identity-token-service
169.254.169.254/metadata/identity/oauth2/token?resource=https://vault.hashicorp.com&api-version=2018-02-01
)
没有配置选项。
-
初始保管库令牌:
vault.token
-
Kubernetes 路径:(默认为
vault.kubernetes.kubernetes-path
kubernetes
) -
角色:
vault.kubernetes.role
-
服务帐户令牌文件的路径:(默认为
vault.kubernetes.service-account-token-file
/var/run/secrets/kubernetes.io/serviceaccount/token
)
执行回调
所有 Spring 模板类的一个共同设计特性是所有功能都路由到其中一个模板执行回调方法中。
这有助于确保执行异常和可能需要的任何资源管理的一致性。
虽然 JDBC 和 JMS 比 Vault 更需要这样做,但它仍然为访问和日志记录提供了单一位置。
因此,使用 execute 回调是访问 Vault API 的首选方式
执行我们尚未公开为方法的不常见操作。VaultTemplate
下面是执行回调方法的列表。
-
<T> T
doWithVault 执行给定的,允许在不需要会话的情况下与Vault进行交互。(RestOperationsCallback<T> callback)
RestOperationsCallback
RestOperations
-
<T> T
doWithSession 执行给定的 ,允许在经过身份验证的会话中与 Vault 进行交互。(RestOperationsCallback<T> callback)
RestOperationsCallback
下面是一个使用 初始化 Vault 的示例:ClientCallback
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();
}
});