Spring Vault Harshicorp和Cyber​​-ark集成

时间:2018-08-31 03:32:55

标签: spring-boot spring-cloud hashicorp-vault spring-vault cyber-ark

我正在尝试使用Spring Vault提供集中服务,该服务为我们的微服务生态系统提供存储和检索凭据信息的功能。但是,我们的组织当前使用Cyber​​-ark来集中凭证,因此,我要寻找的是基于Spring Vault构建抽象服务,并为Harshicorp Vault使用Cyber​​-arkas存储引擎。

任何建议都非常感谢。

1 个答案:

答案 0 :(得分:0)

您可以在Spring Boot中使用Conjur(Cyber​​Ark开源和企业版)保管库。但是,您必须使用此处提到的java Api:

https://www.conjur.org/blog/loading-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.org/get-started/quick-start/oss-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中相关的配置配置后获得。

4-在Spring Boot App中,您可以使用conjur来获取数据库凭证,而不是将其硬编码为application.properties/yml:

@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());
        }
    }

我不能将Cyber​​Ark与Spring Cloud Vault一起使用。使用Spring cloud Vault,您可以更好地抽象保管库,但不幸的是,仅支持Hashicorp保管库(AFAIK)。

任何其他建议将不胜感激。