Spring Cloud Azure シークレット管理
この記事は、✅ バージョン 4.19.0 ✅ バージョン 5.19.0 に適用されます。
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
がある場合、SystemEnvironmentPropertySource
KeyVaultPropertySource
よりも優先度が高くなります。つまり、環境変数を使用して、アプリケーションの 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.19.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 | 30m | すべての 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 で