クライアントサポート

Spring Vault は、Vault の HTTP API にアクセスするためのさまざまな HTTP クライアントをサポートしています。Spring Vault は、Vault にアクセスするプライマリインターフェースとして RestTemplate を使用します。専用クライアントサポートは、Spring Vault のクライアントコンポーネントのみを対象とするカスタマイズされた SSL 構成から始まります。

Spring Vault は、次の HTTP 命令型クライアントをサポートしています。

  • Java の組み込み HttpURLConnection (他に利用可能なクライアントがない場合のデフォルトのクライアント)

  • Apache Http コンポーネント

  • OkHttp 3

Spring Vault のリアクティブ統合は、次のリアクティブ HTTP クライアントをサポートします。

  • Java の組み込みリアクティブ HttpClient (他に利用可能なクライアントがない場合のデフォルトのクライアント)

  • Reactor Netty

  • Apache Http コンポーネント

  • Jetty

特定のクライアントを使用するには、Spring Vault が Vault との通信に使用可能なクライアントを使用できるように、クラスパス上で使用可能な依存関係が必要です。

Java の組み込み HttpURLConnection

Java の組み込み HttpURLConnection は、追加の構成なしですぐに使用できます。HttpURLConnection の使用には、SSL 構成に関する制限があります。Spring Vault は、JVM の詳細な再構成が必要となるため、カスタマイズされた SSL 構成を適用しません。この構成は、デフォルトの SSL コンテキストに依存するすべてのコンポーネントに影響します。HttpURLConnection を使用して SSL 設定を構成するには、これらの設定をシステムプロパティとして指定する必要があります。詳細については、JSSE のカスタマイズ [Oracle] を参照してください。

外部クライアント

外部クライアントを使用して Vault の API にアクセスできます。次の依存関係のいずれかをプロジェクトに追加するだけです。Spring Vault の依存関係 BOM を使用する場合は、バージョン番号を省略できます。

例 1: Apache Http コンポーネントの依存関係
<dependency>
  <groupId>org.apache.httpcomponents.client5</groupId>
  <artifactId>httpclient5</artifactId>
</dependency>
Apache HttpClient のワイヤログ [Apache] (英語) は、ログ設定を通じて有効にできます。ログによってアプリケーションと Vault 間のトラフィック (トークンとシークレット) がプレーンテキストで公開される可能性があるため、誤ってワイヤログを有効にしないようにしてください。
例 2: スクエア OkHttp 3
<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
</dependency>
例 3: Reactor Netty
<dependency>
  <groupId>io.projectreactor.netty</groupId>
  <artifactId>reactor-netty</artifactId>
</dependency>
例 4: Apache Http コンポーネントのリアクティブ依存性
<dependency>
  <groupId>org.apache.httpcomponents.core5</groupId>
  <artifactId>httpcore5-reactive</artifactId>
</dependency>
例 5: Jetty
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-reactive-httpclient</artifactId>
</dependency>

Vault クライアント SSL 構成

SSL は、SslConfiguration を使用してさまざまなプロパティを設定することで構成できます。javax.net.ssl.trustStore を設定して JVM 全体の SSL 設定を構成することも、SslConfiguration を構成して Spring Vault のみの SSL 設定を設定することもできます。

SslConfiguration sslConfiguration = SslConfiguration.create(            (1)
		new FileSystemResource("client-cert.jks"), "changeit".toCharArray(),
		new FileSystemResource("truststore.jks"), "changeit".toCharArray());

SslConfiguration.forTrustStore(new FileSystemResource("keystore.jks"),  (2)
                                      "changeit".toCharArray())

SslConfiguration.forKeyStore(new FileSystemResource("keystore.jks"),    (3)
                                      "changeit".toCharArray())

SslConfiguration.forKeyStore(new FileSystemResource("keystore.jks"),    (4)
                                      "changeit".toCharArray(),
                                      KeyConfiguration.of("key-password".toCharArray(),
                                      "my-key-alias"))
1 完全な構成。
2 トラストストア設定のみを構成します。
3 キーストア設定のみを構成します。
4 キー構成を提供してキーストア設定のみを構成します。

SslConfiguration の提供は、Apache Http コンポーネントまたは OkHttp クライアントのいずれかがクラスパス上にある場合にのみ適用できることに注意してください。

SSL 構成は、Java キーストアの代替として PEM エンコードされた証明書もサポートします。

KeyStoreConfiguration keystore = KeyStoreConfiguration
        .of(new ClassPathResource("ca.pem")).withStoreType("PEM");
SslConfiguration configuration = SslConfiguration.forTrustStore(keystore);

PEM ファイルには 1 つ以上の証明書 ( -----BEGIN CERTIFICATE----- および -----END CERTIFICATE----- のブロック) が含まれる場合があります。基礎となる KeyStore に追加された証明書は、完全なサブジェクト名を別名として使用します。