我试图连接到Spring保管库使用基于角色的身份验证(Spring引导项目)。
根据留档,我应该能够连接到Spring保险库只使用约(拉动模式)。但是,我在应用程序启动时得到secrect-id缺失异常。
http://cloud.spring.io/spring-cloud-vault/single/spring-cloud-vault.html#_approle_authentication
当我通过secret id时,我也能够连接,并且属性/值得到正确的自动连接。
是否有任何方法可以使用“令牌角色/角色id”和spring在运行时使用上述信息自动为我生成机密id来连接vault。
spring.cloud.vault:
scheme: http
host: <host url>
port: 80
token : <token>
generic.application-name: vault/abc/pqr/test
generic.backend: <some value>
generic.default-context: vault/abc/pqr/test
token: <security token>
authentication: approle
app-role:
role-id: <role-id>
POM:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-vault-starter-config</artifactId>
<version>1.0.0.BUILD-SNAPSHOT</version>
</dependency>
如果需要其他信息,请告诉我。
@mp911de,我按照您的建议进行了尝试,但是SpringCloudVault正在选择引导中设置的属性。yml和“onApplicationEvent”中没有一个集合,因此解决方案不起作用。我尝试通过“System.setProperty”方法设置属性,但该事件不起作用。
但是,如果我在运行前的main方法中设置属性,它会按预期工作。但是我需要先加载application.properties(需要从那里选择一些配置),因此不想在那里编写逻辑。
我的做法有什么不对吗??
@Component public class LoadVaultProperties implements ApplicationListener<ApplicationEnvironmentPreparedEvent> {
private RestTemplate restTemplate = new RestTemplate();
@Override
public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
try {
String roleId = getRoleIdForRole(event); //helper method
String secretId = getSecretIdForRoleId(event); //helper method
Properties properties = new Properties();
properties.put("spring.cloud.vault.app-role.secret-id", secretId);
properties.put("spring.cloud.vault.app-role.role-id", roleId);
event.getEnvironment().getPropertySources().addFirst(new PropertiesPropertySource(
PropertySourceBootstrapConfiguration.BOOTSTRAP_PROPERTY_SOURCE_NAME, properties));
} catch (Exception ex) {
throw new IllegalStateException(ex);
}
}
Spring Vault的AppRole身份验证支持两种模式,但不支持拉模式:
secret_id
role_id
而无需secret_id
进行身份验证。此模式需要创建角色,而不需要在创建角色时设置bind_secret_id=false
secret_idVault文档中提到的拉动模式要求客户端了解从包装响应中获得的机密id
。SpringVault无法获取经过包装的机密id
,但我认为这是一个不错的增强。
更新:在应用程序启动之前设置系统属性:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
System.setProperty("spring.cloud.vault.app-role.role-id", "…");
System.setProperty("spring.cloud.vault.app-role.secret-id", "…");
SpringApplication.run(MyApplication.class, args);
}
参考资料:
目前,我正在连接到一个公司vault服务,在这里我使用一个vault令牌,并通过我的spring cloud config服务中的下面标题传递它,所有微服务的属性都保存在该标题下。 哪里http://localhost:8080是我的spring云配置服务,s.myvaulttoken是我的vault令牌。这是工作绝对好。 我想知道这个令牌的有效性。我所阅读的留档令牌可以是两种类型:服务或批处理。
守则 @RestController的代码:
我按照在Spring Boot上使用GCP设置秘密管理器的说明,在Google Cloud中创建了一个秘密,并在application.properties中添加了以下内容 但是,它不起作用,如果我使用,我可以通过
基本上我们可以有一个只能读取一次的金库密钥吗?
我想使用vault服务器来存储机密并将其部署在openshift上。 我编写了这个 dockerfile,构建了映像并将其推送到 openshift 注册表,并从此映像流创建了一个部署: 以下是配置: 我创建了一条到8200端口的路径。当我从vault-server pod内部使用vault CLI时,它工作正常,我可以登录、配置等。当我在本地计算机上使用openshift cli将端口8200转
我正在尝试使用JDBC连接到托管在云中的MongoDB。但是,认证失败。 以下是我的Java代码: 当我执行时,我得到以下异常: 我能够通过mLab web界面以相同的用户id和密码成功登录,并且工作正常。 但是,只有JDBC尝试失败。 有人能帮忙吗,这里有什么问题?