春天金库Harshicorp和Cyber-ark的整合

问题描述 投票:2回答:1

我正试图使用Spring Vault提供一个集中式服务,为我们的微服务生态系统提供存储和检索凭证信息的能力。然而,我们的组织目前正在使用cyber-ark来集中管理凭证,所以我想建立一个基于Spring Vault的抽象服务,并为Harshicorp Vault使用cyber-arkas存储引擎。

spring-boot spring-cloud hashicorp-vault spring-vault cyber-ark
1个回答
0
投票

你可以使用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)。

任何其他的建议都将是非常感激的。

© www.soinside.com 2019 - 2024. All rights reserved.