1概要


  • HashiCorp’s Vault

    ** は秘密を保存して保護するためのツールです。 Vaultは、一般的に、秘密の管理方法に関するソフトウェア開発のセキュリティ問題を解決します。詳細については、https://www.baeldung.com/vaultを参照してください。



Spring Vault


はHashiCorpのVaultにSpringによる抽象化を提供します。

このチュートリアルでは、Vaultから秘密を保存および取得する方法の例について説明します。


2 Mavenの依存関係

まず始めに、Spring Vaultを使い始めるために必要な依存関係を見てみましょう。

<dependencies>
    <dependency>
        <groupId>org.springframework.vault</groupId>
        <artifactId>spring-vault-core</artifactId>
        <version>2.0.1.RELEASE</version>
    </dependency>
</dependencies>


spring-vault-core

の最新版はhttps://search.maven.org/search?q=g:org.springframework.vault%20AND%20a:spring-vault-coreにあります

** 3 Vaultの設定

それでは、Vaultの設定に必要な手順を見ていきましょう。


3.1.

VaultTemplate


を作成する

秘密を守るために、

VaultEndpoint

および

TokenAuthentication

インスタンスが必要な

VaultTemplate

をインスタンス化する必要があります。

VaultTemplate vaultTemplate = new VaultTemplate(new VaultEndpoint(),
  new TokenAuthentication("00000000-0000-0000-0000-000000000000"));


3.2.

VaultEndpoint


を作成する


VaultEndpoint

をインスタンス化する方法はいくつかあります。それらのいくつかを見てみましょう。

1つ目は、デフォルトコンストラクタを使用して単純にインスタンス化することです。これにより、


http://localhost:8200

:

を指すデフォルトエンドポイントが作成されます。

VaultEndpoint endpoint = new VaultEndpoint();

もう1つの方法は、Vaultのホストとポートを指定して

VaultEndpoint

を作成することです。

VaultEndpoint endpoint = VaultEndpoint.create("host", port);

そして最後に、VaultのURLからも作成できます。

VaultEndpoint endpoint = VaultEndpoint.from(new URI("vault uri"));

ここで注意すべきことがいくつかあります – このアプリケーションを実行するために、Vaultは

00000000-0000-0000-0000-000000000000

のルートトークンで構成されます。

この例では

TokenAuthentication

を使用しましたが、他にもhttps://docs.spring.io/spring-vault/docs/current/reference/html/index.html#vault.core.authentication[認証方法]があります。同様にサポートされています。


4 Spring

を使用したVault Beansの設定

Springでは、Vaultをいくつかの方法で設定できます。 1つは

AbstractVaultConfigurationを拡張することによるもので、もう1つはSpringの環境プロパティを利用する

__EnvironmentVaultConfigurationを使うことによるものです。

私たちは今、両方の方法を見ていきます。


4.1.

AbstractVaultConfiguration


を使用する

Spring Vaultを設定するために__AbstractVaultConfigurationを拡張するクラスを作成しましょう。

@Configuration
public class VaultConfig extends AbstractVaultConfiguration {

    @Override
    public ClientAuthentication clientAuthentication() {
        return new TokenAuthentication("00000000-0000-0000-0000-000000000000");
    }

    @Override
    public VaultEndpoint vaultEndpoint() {
        return VaultEndpoint.create("host", 8020);
    }
}

このアプローチは前のセクションで見たものと似ています。

違いは、抽象クラス

AbstractVaultConfiguration.

を拡張することによって、Spring Vaultを使用してVault Beanを設定したことです。


VaultEndpoint



ClientAuthentication

を設定するための実装を提供するだけです。


4.2.

EnvironmentVaultConfiguration


を使用する


EnviromentVaultConfiguration

を使ってSpring Vaultを設定することもできます。

@Configuration
@PropertySource(value = { "vault-config.properties" })
@Import(value = EnvironmentVaultConfiguration.class)
public class VaultEnvironmentConfig {
}


EnvironmentVaultConfiguration

は、Springの

PropertySource

を使用してVault Beanを構成します。プロパティファイルに適切なエントリをいくつか指定する必要があります。

すべての定義済みプロパティの詳細については、https://docs.spring.io/spring-vault/docs/current/reference/html/index.html#vault.core.environment-vault-configuration[officialにあります。ドキュメンテーション]。

Vaultを設定するには、少なくともいくつかのプロパティが必要です。

vault.uri=https://localhost:8200
vault.token=00000000-0000-0000-0000-000000000000


5秘密を守る

ユーザー名とパスワードに対応する単純な

Credentials

クラスを作成します。

public class Credentials {

    private String username;
    private String password;

   //standard constructors, getters, setters
}

それでは、

VaultTemplateを使用して

Credentials__オブジェクトを保護する方法を見てみましょう。

Credentials credentials = new Credentials("username", "password");
vaultTemplate.write("secret/myapp", credentials);

これらの行が完成すると、私たちの秘密は保存されます。

次に、それらにアクセスする方法を説明します。


6. 秘密へのアクセス


VaultTemplate内の

__read()メソッドを使用して保護された秘密にアクセスできます。

VaultResponseSupport<Credentials> response = vaultTemplate
  .read("secret/myapp", Credentials.class);
String username = response.getData().getUsername();
String password = response.getData().getPassword();

私たちの秘密の価値観は今準備ができています。


7. 結論

この記事では、Spring Vaultの基本について学び、Vaultが典型的なシナリオでどのように機能するかを示す例を示しました


いつものように、ここに提示されているソースコードはhttps://github.com/eugenp/tutorials/tree/master/spring-vault[over on GitHub]にあります。