본문 바로가기

DevOps/AWS

Secret Manager를 사용해서 Spring Boot 프로젝트의 property값 관리하기(1) - 로컬 환경

🔐 들어가며

Secret Manager란?

 

Secret Manager

Secret Manager는 AWS에서 제공해주는 비밀 값 관리 서비스로, 기존에 자바 환경설정 파일에 직접 하드 코딩해서 관리하는 방식을 벗어나 AWS에서 관리하는 방식입니다. 보안 정보당 월 0.4$의 저렴한 가격으로 이용이 가능합니다.

위의 사진에 있는 예시처럼 DB 정보를 저장할 수도 있고, 인증 정보를 저장할 수도 있고, API 키를 저장할 수도 있습니다.

이번 포스팅은 2가지 단계로 진행될 예정입니다. 이번 포스팅에서는 로컬에서 Secret Manager로 접근하는 방법에 대해 다룰 예정이며, 다음 포스팅에서는 서버에서 Secret Manager를 접근하는 방법에 대해 다룰 예정입니다!


🔑 AWS Secret Manager 만들기

Secret Manager 만들기

Secret Manager에 들어간 뒤에 새 보안 암호 저장 버튼을 눌러줍니다.

 

키의 종류는 '다른 유형의 보안 암호'를 선택한 뒤에, 테스트할 값들을 넣어줍니다.

 

보안 암호 이름의 prefix는 /secret/으로 하고, 프로젝트의 이름을 작성해줍니다.


🍂 AWS Configuration

로컬에서 secret manger를 접속하기 위해서는 AWS의 Access Key를 로컬에 등록해야 합니다.

IAM에서 Role을 추가해주어야 하는데, 이때 SecretsManagerReadWrite는 필수적으로 들어가야 합니다. 생성이 완료되면 발급받을 수 있는 Access Key와 Secret Key를 저장해둡니다.

그 뒤에 AWS cil가 설치되어있으면 설치를 하고, 명령어를 입력하여 인증 정보를 등록해줍니다. (참고)

$ aws configure  

AWS Access Key ID [None]: 발급 받은 Access Key 
AWS Secret Access Key [None]: 발급 받은 Secret Access Key 
Default region name [None]: us-west-2 
Default output format [None]: json

🌱 Spring Boot 연결하기

의존성 추가하기

 dependencies {     
    implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap:3.0.3'     
    implementation 'org.springframework.cloud:spring-cloud-starter-aws-secrets-manager-config:2.2.6.RELEASE' 
 }

 

설정 파일 추가하기

프로젝트 상단에 bootstrap.yml파일을 추가해주고, 아래와 같은 설정을 해줍니다.

aws:
    secretsmanager:
        name: clelab #프로젝트 이름
cloud:
    aws:
        region:
            static: ap-northeast-2

 

코드 확인

이제 설정이 잘 되었는지 확인하기 위해 확인하는 코드를 추가해보도록 하겠습니다! @PostConstructor로 애플리케이션이 띄워질 때 값을 잘 가져오는지 테스트해봅니다.

@SpringBootApplication
public class CurriculumApplication {

  @Value("${sunyoung.test}")
  private String test;

  @PostConstruct
  public void test() {
    System.out.println(">>> " + test);
  }


  public static void main(final String[] args) {
    SpringApplication.run(CurriculumApplication.class, args);
  }

}

 

Secret Manager에 설정해두었던 내용이 잘 나오는 것을 확인할 수 있습니다! 🙂


💛 맺으며

로컬에서는 이런 방법을 사용해서 Secret Manager와 연동을 할 수 있습니다. 서버에 올릴 때에도 크게 다르지 않지만, 추가적으로 설정을 해주어야 하는 게 몇 가지 있습니다. 그 내용은 다음 포스팅에서 다룰 예정입니다.

혹시 글을 읽으면서 잘못된 내용이 있으면 댓글로 알려주시면 감사하겠습니다! 읽어주셔서 감사합니다! 😊


👏 참고