我正试图使用Spring Vault提供一个集中式服务,为我们的微服务生态系统提供存储和检索凭证信息的能力。然而,我们的组织目前正在使用cyber-ark来集中管理凭证,所以我想建立一个基于Spring Vault的抽象服务,并为Harshicorp Vault使用cyber-arkas存储引擎。
你可以使用Conjur(CyberArk Open Source and Entreprise)vault与Spring Boot。但是你必须使用这里提到的java Api。
https:/www.conjur.orgblogloading-your-database-credentials-at-runtime-with-conjur
1- 你必须从gitHub下载 conjur java-api。(构建它并在你的spring boot应用中作为依赖关系使用)
<!-- CONJUR CYBERARK -->
<dependency>
<groupId>net.conjur.api</groupId>
<artifactId>conjur-api</artifactId>
<version>2.2.1</version>
</dependency>
<!-- CONJUR CYBERARK -->
2- 确保你已经配置好了 conjur 服务器和 cli。https:/www.conjur.orgget-startedquick-startoss-environment
3- 将 conjur 属性添加为环境变量。
CONJUR_ACCOUNT=demo
CONJUR_AUTHN_LOGIN=host/demo-app
CONJUR_AUTHN_API_KEY=smzqbc31zk7gh2svfv8h3cvzy9a2059c399366jgk651343de79z6
CONJUR_APPLIANCE_URL=http://cyberark_conjur_1/api
注意:一旦你完成了步骤2中相关的conjur配置,你就会得到上述所有变量。
4- 在你的Spring Boot App中,你可以使用conjur来获取DB证书,而不是在application.propertiesyml中硬编码。
@Value("${CONJUR_AUTHN_LOGIN}")
private String conjurHostId;
@Value("${CONJUR_AUTHN_API_KEY}")
private String conjurAPIKey;
@Value("${spring.datasource.url}")
private String datasourceUrl;
@Value("${spring.datasource.driver-class-name}")
private String datasourceDriverClass;
@Bean
public DataSource dataSource() {
Conjur conjur = new Conjur(conjurHostId, conjurAPIKey);
String datasourceUsername =
conjur.variables().retrieveSecret("db/username");
String datasourcePassword =
conjur.variables().retrieveSecret("db/password");
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setUsername(datasourceUsername);
dataSource.setPassword(datasourcePassword);
dataSource.setUrl(datasourceUrl);
dataSource.setDriverClassName(datasourceDriverClass);
return dataSource;
}
之后你就可以运行你的Spring Boot应用程序,它将使用conjur进行验证,并获得数据库的用户名+密码。
如果你在 conjur 服务器中保存了其他的秘密,那么你可以将其访问为:。
public Optional<String> findSecret(final String secretKey) {
try {
Conjur conjur = new Conjur();
String secretFound = conjur.variables().retrieveSecret(secretKey);
return Optional.ofNullable(secretFound);
} catch (Exception e) {
e.printStackTrace();
throw new IllegalArgumentException(e.getMessage());
}
}
我不能用CyberArk和Spring Cloud Vault。使用Spring Cloud Vault,你有更好的金库抽象,但不幸的是只支持Hashicorp金库(AFAIK)。
任何其他的建议都将是非常感激的。