Spring Cloud Azure 비밀 관리
이 문서는✅ 버전 4.19.0 ✅ 버전 5.19.0에 적용됩니다.
Spring Cloud Azure는 Azure Key Vault 비밀에 저장된 비밀을 보유하는 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 키, 비밀 및 인증서 개요Vault 이름 및 개체 이름 섹션을 참조하세요. 속성 이름에 다른 문자가 포함된 경우 다음 섹션에 설명된 해결 방법을 사용할 수 있습니다.
비밀 이름에 -
대신 .
사용
.
비밀 이름에서 지원되지 않습니다. 애플리케이션에 .
같은 spring.datasource.url
포함하는 속성 이름이 있는 경우 Azure Key Vault에서 비밀을 저장할 때 .
-
바꿉니다. 예를 들어 Azure Key Vault에 spring-datasource-url
저장합니다. 애플리케이션에서 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 우선 순위
키가 여러 PropertySources에 있는 경우 우선 순위에 따라 적용됩니다.
-
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
빈을 등록할 수 있습니다. 이 기능은 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 | false | 비밀 키가 대/소문자를 구분하는지 여부입니다. |
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를 |
관련 속성을 다시 시도합니다. |
- Microsoft Entra ID 액세스 권한 부여를 참조하여 보안 주체 Azure Key Vault 비밀에 액세스할 수 있는 충분한 권한이 부여되었는지 확인합니다.
-
client
,credential
,profile
,proxy
,retry
같은 공통 속성이spring.cloud.azure.keyvault.secret.property-sources[].xxx
구성되지 않은 경우spring.cloud.azure.xxx
사용됩니다. 이러한 일반적인 속성에 대한 자세한 내용은 Spring Cloud Azure 구성 참조하세요. - 중첩된 속성에 대한 자세한 내용은 Spring Cloud Azure 구성 속성 참조하세요.
샘플
GitHub에서 spring-cloud-azure-starter-keyvault-secrets 샘플