Azure에서 제공하는 key vault 기능은 local이나 소스에 key - value 값을 두지 않고
azure 서버를 통해서 불러와 사용할 수 있도록 해준다.
---------------------
spring boot : 3.0.9
jdk : 17
IDE : STS
build : gradle
---------------------
------------------------------------------------------------------------------
[AZURE PORTAL]에서 app 등록 및 key vault의 secret을 생성해 둔 상태
secret 생성 방법 [AZURE] Key Vault 참고
------------------------------------------------------------------------------
아래 key vault 등의 버전은 스프링 부트 버전에 따라 지정을 해야 한다.
해당 프로젝트에서는 스프링 부트 버전이 3.x.x 버전이므로 azure 관련 dependencies는 5.x.x버전을 사용했으며 스프링 부트 버전이 2.x.x 버전인 경우에는 dependencies는 4.x.x 등으로 맞추면 된다.
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'com.azure.spring:spring-cloud-azure-starter-keyvault:5.0.0'
implementation 'com.azure.spring:spring-cloud-azure-dependencies:5.0.0'
implementation 'com.azure.spring:spring-cloud-azure-starter-keyvault-secrets:5.0.0'
// 생성된 key vault의 '개요' 항목에서 자격 증명 모음 URI를 사용
endpoint={URI}
// 앱 등록에서 생성한 application 정보 (예)
clientId={applicationId(clientId)}
clientSecret={clientSecret} // client secret은 앱 생성할때 확인하지 않으면 조회 안됨
tenantId={directoryId(tenentId)}
(예)
@Value("${endpoint}")
private String endpoint;
@Value("${clientId}")
private String clientId;
@Value("${clientSecret}")
private String clientSecret;
@Value("${tenentId}")
private String tenentId;
public String getSecret(String name) {
// 자격증명
ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
.clientId(clientId)
.clientSecret(clientSecret)
.tenantId(tenantId)
.build();
// SecretClient
SecretClient secretClient = new SecretClientBuilder()
.vaultUrl(endpoint)
.credential(clientSecretCredential)
.buildClient();
// azure portal의 key valut에서 생성한 secret의 이름으로 값 호출
KeyVaultSecret keyVaultSecret = secretClient.getSecret(name);
return keyVaultSecret.getValue();
}