이전 프로젝트에서는 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 --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
참고문헌.
'DevOps > AWS' 카테고리의 다른 글
Linux에서의 swap 메모리 설정 (0) | 2024.07.23 |
---|