본문 바로가기
DevOps/AWS

AWS Secrets Manager 적용하기

by wch_t 2024. 7. 17.

이전 프로젝트에서는 API 키를 private repo를 만들어, 메인 repo의 서브모듈로 두어 DB와 API 키 관리를 진행했었다.

(관련 글은 작성하지 않았지만, 추후에 사이드 프로젝트에서 다시 사용하게 된다면 정리해 봐야겠다!)

 

인턴 업무 중 프로젝트 하나를 AWS Secrets Manager를 적용해달라는 테스크를 받았다.

적용하는데 있어 크게 어려움이 없었지만, 개인적으로 Spring에서 의존하게 되는 라이브러리들에 대해서 공부하는 과정이 도움이 되어 간략히 정리할 겸 글을 작성하게 되었다.

 

 


 

1. AWS 설정

* IAM 사용자 권한 설정에서 'SecreatsManagerReadWrite'를 반드시 넣어주어야 한다.

 

 

1) 'AWS Secrets Managersec > 보안 암호' 로 들어간다.

 

 

 

2) 보안 암호 유형을 선택하고, 프로젝트에서 암호화 할 값들의 "key(이름), value(암호화 할 값)"를 입력한다.

 

 

 

3) 보안 암호 이름의 형식은 "/secret/'프로젝트 이름'"으로 한다.

 

 

 

3) 나머지는 기본값으로 적용한 뒤 저장을 한다.

(암호 교체와 복제본과 같은 설정은 필요에 따라 별도로 커스텀을 하도록 한다.)

 

 

 

4) 다음과 같이 저장한 보안 암호가 보인다.

 

 


 

2. AWS Secrets Manager와 Spring 프로젝트 연결 

*로컬에서 빌드한 파일을 EC2에 실행할 때, 이와 같은 과정을 다시 거쳐주어야 한다.

 

위에서 생성한 Aws와 통신하여 Secrets manager의 값을 받아오기 위해, Spring 프로젝트와 연결하는 작업이 필요하다.

그러한 방법이 AWS CLI 설치이다.

 

 

 

1) 하단 링크에서 OS에 맞는 CLI 설치를 하도록 한다.

 

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

 

최신 버전의 AWS CLI설치 또는 업데이트 - AWS Command Line Interface

이전 버전에서 업데이트하는 경우 unzip 명령을 실행하면 기존 파일을 덮어쓸지 묻는 메시지가 표시됩니다. 스크립트 자동화와 같은 경우에 이러한 프롬프트를 건너뛰려면 unzip에 대한 -u 업데이

docs.aws.amazon.com

 

설치 완료 체크

$ aws --version
aws-cli/2.17.5 Python/3.11.9 Darwin/23.5.0 source/arm64

 

 

 

2) CLI 인증을 위해 IAM 사용자를 생성했을 때, 발급받은 AWS Access Key ID와 AWS Secret key 입력한다.

$ aws configure
AWS Access Key ID [None] : [발급받은 IAM의 Access Key ID]
AWS Secret Access Key [None] : [발급받은 IAM의 Secret Access Key]
Default region name [None] : ap-northeast-2[서울 리전]
Default output format [None] : text / json / table

 

 


 

3. Spring 프로젝트 설정

 

1) `build.gradle`에서 필요한 라이브러리를 받아준다.

 

💡 spring-cloud-starter-bootstrap

: 스프링 부트 애플리케이션이 시작될 때, 애플리케이션의 주요 컨텍스트가 설정되기 전부트스트랩 컨텍스트(bootstrap.yml)가 초기화 및 실행되어 Spring Cloud Config Server, AWS Secrets Manager 와 같은 외부 소스 에 관한 설정을 불러온다.

 

💡 spring-cloud-starter-aws-secrets-manager-config

: AWS Secrets Manager와 직접적으로 통신 및 설정을 로드하여 애플리케이션 컨텍스트에 추가한다.

// aws secrets manager
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap:3.1.3'
implementation 'org.springframework.cloud:spring-cloud-starter-aws-secrets-manager-config:2.2.6.RELEASE'

 

 

 

2) `application.yml` 파일에 aws secret manager에 등록한 key 적용한다.

--- #aws secret manager

spring:
  datasource:
    url: ${project_db_url}
    username: ${project_db_username}
    password: ${project_db_password}
    driver-class-name: com.mysql.cj.jdbc.Driver

  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        format_sql: true
        show_sql: true

logging:
  level:
    org.springframework.jdbc: DEBUG


api:
  naver:
    clientId: ${api_naver_clientId}
    clientSecret : ${api_naver_clientSecret}

  kakao:
    secretKey : ${api_kakao_secretKey}

 

 

 

3) `bootstrap.yml` 파일을 생성한다.

aws:
  secretsmanager:
    name: project_name
cloud:
  aws:
    region:
      static: ap-northeast-2

 

 


 

참고문헌.

1) https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-%EC%9E%A5%EA%B8%B0-%EC%9E%90%EA%B2%A9-%EC%A6%9D%EB%AA%85-%EC%9E%84%EC%8B%9C-%EC%9E%90%EA%B2%A9-%EC%A6%9D%EB%AA%85-Access-Key-Secret-Access-Key#1._iam_user_%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0

 

2) https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-AWS-CLI-%EC%84%A4%EC%B9%98-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%89%BD%EA%B3%A0-%EB%B9%A0%EB%A5%B4%EA%B2%8C

'DevOps > AWS' 카테고리의 다른 글

Linux에서의 swap 메모리 설정  (0) 2024.07.23