Azure Key Vault シークレットに格納されているシークレットを保持する Spring Cloud Azure コンストラクト PropertySource。
依存関係のセットアップ
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId>
</dependency>
先端
また、Key Vault のすべての機能をサポートするための spring-cloud-azure-starter-keyvault も提供しています。 これを使用する場合、spring.cloud.azure.keyvault.enable は構成するプロパティであり、既定値は trueです。 その後、spring.cloud.azure.keyvault.<keyvault-service>.enable を使用して不要なサービスを無効にすることができます。
基本的な使用方法
client-id および client-secretによる認証を行う場合は、次のプロパティが必要です。
構成プロパティ
spring:
cloud:
azure:
keyvault:
secret:
property-sources:
- name: key-vault-property-source-1
endpoint: ${ENDPOINT_1}
- name: key-vault-property-source-2
endpoint: ${ENDPOINT_2}
Java コード
@SpringBootApplication
public class SampleApplication implements CommandLineRunner {
@Value("${sampleProperty1}")
private String sampleProperty1;
@Value("${sampleProperty2}")
private String sampleProperty2;
@Value("${samplePropertyInMultipleKeyVault}")
private String samplePropertyInMultipleKeyVault;
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
public void run(String[] args) {
System.out.println("sampleProperty1: " + sampleProperty1);
System.out.println("sampleProperty2: " + sampleProperty2);
System.out.println("samplePropertyInMultipleKeyVault: " + samplePropertyInMultipleKeyVault);
}
}
高度な使用方法
プロパティ名の特殊文字
Key Vault シークレット名では、[0-9a-zA-Z-]内の文字のみがサポートされます。 詳細については、Azure Key Vault キー、シークレット、証明書の概要の「
シークレット名に - の代わりに . を使用する
. はシークレット名ではサポートされていません。 アプリケーションに .を含むプロパティ名 (spring.datasource.urlなど) がある場合は、Azure Key Vault にシークレットを保存するときに . を - に置き換えます。 たとえば、spring-datasource-url を Azure Key Vault に保存します。 アプリケーションでは、引き続き spring.datasource.url を使用してプロパティ値を取得できます。
手記
このメソッドは、spring.datasource-urlなどの要件を満たすことはできません。 Key Vault に spring-datasource-url を保存する場合、プロパティ値の取得は spring.datasource.url と spring-datasource-url のみがサポートされますが、spring.datasource-url はサポートされていません。 このケースを処理するには、「プロパティ プレースホルダーの使用」 セクションを参照してください。
プロパティ プレースホルダーを使用する
たとえば、application.properties ファイルでこのプロパティを設定するとします。
property.with.special.character__=${propertyWithoutSpecialCharacter}
アプリケーションは propertyWithoutSpecialCharacter キー名を取得し、その値を property.with.special.character__に割り当てます。
大文字と小文字が区別されます
大文字と小文字を区別するモードを有効にするには、次のプロパティを設定します。
spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive=true
Key Vault 内のすべてのシークレットを取得しない
Key Vault に 1000 個のシークレットを格納していて、そのうちの 3 つを使用するだけの場合。
spring.cloud.azure.keyvault.secret.property-sources[].secret-keysして 3 つのシークレット名を一覧表示できます。
更新間隔の設定
既定では、KeyVaultPropertySource 内のシークレットは 30 分ごとに更新されます。
spring.cloud.azure.keyvault.secret.property-sources[].refresh-intervalで時刻を構成できます。 たとえば、spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval=60m は 60 分ごとに更新を意味します。 自動更新を無効にするには、0 に設定します。
PropertySource の優先度
キーが複数の PropertySource に存在する場合、有効になるのは優先度によって決まります。
-
SystemEnvironmentPropertySourceリストにPropertySourceがない場合は、KeyVaultPropertySourceが最も優先度が高くなります。 -
SystemEnvironmentPropertySourceリストにPropertySourceがある場合、SystemEnvironmentPropertySourceKeyVaultPropertySourceよりも優先度が高くなります。つまり、環境変数を使用して、アプリケーションの Key Vault シークレット値をオーバーライドできます。 -
PropertySourceリストに複数のキー コンテナー プロパティ ソースがある場合、定義順序は優先順位になります。 上記のサンプルを例として取ると、key-vault-property-source-1はkey-vault-property-source-2よりも優先度が高くなります。
Key Vault プロパティ ソースのトークン資格情報を構成する
Key Vault PropertySourceに指定されたトークン資格情報を使用する必要がある場合は、TokenCredentialの ConfigurableBootstrapContext に KeyVaultEnvironmentPostProcessor Bean を登録できます。この機能は Spring Cloud Azure 5.16.0 からサポートされています。
AzureCliCredentialを使用する例を次に示します。
public static void main(String[] args) {
SpringApplication application = new SpringApplication(PropertySourceApplication.class);
application.addBootstrapRegistryInitializer(registry ->
registry.register(TokenCredential.class, context -> new AzureCliCredentialBuilder().build()));
application.run(args);
}
構成可能なすべてのプロパティ
| 財産 | 既定値 | 形容 |
|---|---|---|
| spring.cloud.azure.keyvault.secret.property-source-enabled の |
真 | Key Vault プロパティ ソースを有効にするかどうかを指定します。 |
| spring.cloud.azure.keyvault.secret.property-sources[].name | このプロパティ ソースの名前。 | |
| spring.cloud.azure.keyvault.secret.property-sources[].endpoint | Azure Key Vault エンドポイント。 | |
| spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive | 偽 | 秘密鍵で大文字と小文字が区別されるかどうか。 |
| spring.cloud.azure.keyvault.secret.property-sources[].secret-keys を |
このプロパティ ソースでサポートされているシークレット キー。 このプロパティが見つからない場合は、すべてのキーを取得します。 | |
| spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval | 30メートル | すべての Key Vault シークレットを更新する時間間隔。 |
| spring.cloud.azure.keyvault.secret.property-sources[].service-version | API 要求を行うときに使用されるシークレット サービスのバージョン。 | |
| spring.cloud.azure.keyvault.secret.property-sources[].client | クライアント関連のプロパティ。 | |
| spring.cloud.azure.keyvault.secret.property-sources[].credential を |
資格情報関連のプロパティ。 | |
| spring.cloud.azure.keyvault.secret.property-sources[].profile を |
プロファイル関連のプロパティ。 | |
| spring.cloud.azure.keyvault.secret.property-sources[].proxy | プロキシ関連のプロパティ。 | |
| spring.cloud.azure.keyvault.secret.property-sources[].retry を |
関連するプロパティを再試行します。 |
- セキュリティ プリンシパル に Azure Key Vault シークレットにアクセスするための十分なアクセス許可が付与されていることを確認するには、「Microsoft Entra ID を使用してアクセスを承認する」を参照してください。
-
client、credential、profile、proxy、retryなどの一般的なプロパティがspring.cloud.azure.keyvault.secret.property-sources[].xxxで構成されていない場合は、spring.cloud.azure.xxxが使用されます。 これらの一般的なプロパティの詳細については、Spring Cloud Azure 構成 のを参照してください。 - 入れ子になったプロパティの詳細については、Spring Cloud Azure 構成プロパティ
を参照してください。
サンプル
GitHub で