본문 바로가기
web

Spring Cloud with Aws Secrets Manager

by Younji! 2020. 2. 3.

애플리케이션 프로퍼티에 DB 계정 정보를 하드코딩된 상태로 사용하지 않기 위해 AWS Secrets manager 를 사용하게 되었다. KMS 에 저장된 암호화 키로 secrets manager 에 자격 증명을 해서 필요한 보안 정보를 복호화해서 반환해주는 서비스이다.

 

 aws java sdk를 사용하려다 Spring Cloud에서 스프링 프로퍼티 소스를 이용해서 AWS Secrets manager 매커니즘을 사용할 수 있기에 org.springframework.cloud:spring-cloud-starter-aws-secrets-manager-config 를 간단하게 라이브러리를 추가해서 활성화시켰다. 스프링 부트에서 제공하는 환경별로 프로퍼티를 구성하는 것처럼 동일하게 프로필을 명시해주면 모든 서비스 간에 공유가 가능해진다.

 

Spring Cloud는 bootstrap.yml(or properties)에서 설정을 로드하게 된다. 스프링 클라우드에서 부트스트랩 컨텍스트를 스프링 컨텍스트의 부모로 먼저 생성되므로 applicaiton.yml 보다 먼저 프로퍼티를 로드하게 된다. 부트스트랩 컨텍스트는 외부 구성을 찾아 기존 애플리케이션 컨텍스트와는 다르게 convention을 적용하는데, 기존 컨텍스트와 다르게 외부 구성을 분리해서 유지하기에 부트스트랩을 사용하는 것을 권장한다. `spring.application.name`을 설정해서 특정 앱-프로퍼티를 구성하기 위해 아래처럼 명시하면 된다.

 

aws-secrets-manager-config 살펴보게 되면 PropertySourceLocator 를 커스터마이징 한 AwsSecretsManagerPropertySourceLocator 가 있는데, bootstrap context를 생성하고 PropertySourceLocator가 있으면 ApplicationContext 완료 후에 높은 우선순위를 둔 CompositePropertySource를 실행시킨다.

보다 자세한 건 아래 코드를 참고하면 된다. 

bootstrap propertysourcelocator에 프로퍼티를 compositeproperty에 높은 우선순위로 등록 (PropertySourceBootstrapConfiguration.java)

 

추가로 local 환경에선 aws secretsmanager를 사용할 필요가 없어 bootstrap-local.yml에 위의 yml 파일처럼 spring.profiles.active: local로 환경을 기본으로 명시해주고 `aws.secretsmanager:enabled: false`를 지정해주면 된다. 

 

 

참고 URL : 

https://raymondhlee.wordpress.com/2019/10/11/using-aws-secrets-manager-to-manage-secrets-in-spring-boot-applications/

https://cloud.spring.io/spring-cloud-static/spring-cloud-aws/2.1.0.RELEASE/multi/multi__cloud_environment.html

https://cloud.spring.io/spring-cloud-static/spring-cloud-aws/2.1.0.RELEASE/single/spring-cloud-aws.html#_integrating_your_spring_cloud_application_with_the_aws_secrets_manager

https://shortstories.gitbook.io/studybook/spring_ad00_b828_c815_b9ac/cloud

'web' 카테고리의 다른 글

ElasticSearch Index 질의(w/ python)  (0) 2022.06.07
ThreadPoolTaskExecutor RejectedException 발생  (0) 2017.05.31
대용랑 데이터 조회 처리  (0) 2016.04.28

댓글