다음을 통해 공유


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.urlspring-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-keys3개 비밀 이름을 나열할 수 있습니다.

새로 고침 간격 설정

기본적으로 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 있는 경우 SystemEnvironmentPropertySourceKeyVaultPropertySource보다 우선 순위가 높습니다. 즉, 환경 변수를 사용하여 애플리케이션에서 Key Vault 비밀 값을 재정의할 수 있습니다.
  • PropertySource 목록에 여러 키 자격 증명 모음 속성 원본이 있는 경우 정의 순서가 우선 순위 순서입니다. 위의 샘플을 예로 들어 key-vault-property-source-1 우선 순위가 key-vault-property-source-2.

Key Vault 속성 원본에 대한 토큰 자격 증명 구성

Key Vault PropertySource지정된 토큰 자격 증명을 사용해야 하는 경우 TokenCredentialConfigurableBootstrapContextKeyVaultEnvironmentPostProcessor 빈을 등록할 수 있습니다. 이 기능은 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 샘플 참조하세요.