[AWS] 스프링부트 AWS Secrets Manager 적용하기!

 

 

프로젝트를 진행하다보면 gitignore 설정을 깜빡해
aws 관련 주요 키 값 등의 환경 변수를 github에 노출하게 되는 등

민감한 보안 문제가 발생한다.

 

주로 application.yml 이나 application.propertise가 깃 레퍼지토리에 커밋 되었을 때 이러한 문제가 발생하는데

 

저 두 가지 파일을 깃에 올려놓고 편하게 쓸 수 있는 방법이 있다.

 

바로  AWS SecretManager 

AWS secretmanger

 

시크릿매니저는 AWS에 프로젝트의 주요 키를 담아두고 관리할 수 있도록 도와주는 서비스이다.

 

사용법은 간단하다.

 

 


Secret Manager 생성

 

 

새 보안 암호 저장

 

Secret Manager에 들어가 "새 보안 암호 저장"을 선택한다.

 

SecretManager 설정(1)

"다른 유형의 보안 암호" 를 보안 암호 유형으로 선택하고

 

키/값 페어 설정

저장하고 싶은 키와 키값을 입력 후

 

다른 설정은 건드리지 않고 "다음"을 누른다.

 

 

SecretManager 설정(2)

 

보안 암호 이름을 '/secret/원하는이름' 으로 설정한다 (필수)

 

그리고 설명란에 secret에 대한 설명을 입력한다. (선택 사항)

 

SecretManager 설정(3)

 

그리고 마지막 페이지에서는 아무것도 건드리지 않고 "다음"을 선택한다.

 

SecretManager 설정(4)

마지막 저장페이지도 따로 설정을 하지 않고 "저장"을 누른다

 

생성된 secret

 

그럼 이렇게 시크릿 매니저를 생성할 수 있다.

 

 


IAM 설정

 

 

생성된 SecretManager의 키들을 사용하기 위해선 IAM에 권한을 부여해야 한다.

 

 

바로 위의 권한인데 SecretManager의 키들을 Read/Write 할 수 있는 권한이다.

 

이 권한을 갖고 있어야 시크릿 매니저를 사용할 수 있다.

 

자신이 사용하는 IAM에 꼭 부여하도록 하자.

 

추가로 IAM을 통해 RDS, EC2 접근 등 다른 기능에 대해서도 권한이 필요하다면
이 또한 IAM에 등록해주어야한다.

 

 

IAM을 생성하는 방법을 모른다면 아래 게시글을 참고!

 

[AWS] AWS IAM 생성하기

AWS IAM 생성법 오늘은 AWS의 IAM에 대해서 알아보려고 한다. IAM이란 무엇일까? 🤔 AWS Identity and Access Management(IAM)은 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스입니다. IAM을 사용

pgmjun.tistory.com

 


프로젝트 세팅

 

 

AWS CLI 설치


 

설정된 IAM을 적용하기 위해선 AWS CLI이 설치되어 있어야 한다.

 

설치가 안 되어 있다면 아래 링크를 참고하여 설치하도록 하자.

 

https://pgmjun.tistory.com/30

 

[AWS] AWS CLI 설치 및 aws configure 설정법

EC2, SecretManager등 AWS 관련 기술을 쓰기 위해서는 AWS CLI을 설치하고 git bash 에서 "aws configure" 명령어로 설정을 해주어야 한다. AWS CLI 이란 AWS 서비스를 관리하는 통합 도구다. 도구 하나만 다..

pgmjun.tistory.com

 

aws configure


 

aws configure 세팅

 

설정된 IAM을 적용하기 위해선 인텔리제이의 Terminal 혹은 프로젝트 폴더의 Git bash를 열어

 

IAM의 Access key ID, Secret access key를 등록해주어야 한다.

 

IAM credentials

 

해당 값은 위의 csv파일에서 확인이 가능하고 csv파일은 IAM 생성 후, 보안 자격 증명에서 얻을 수 있다.

위에 올려둔 IAM 관련 게시글을 참고!

 

aws configure
(Access key ID)
(Secret access key)
(region)
Enter 1번

입력창에는 위의 순서로 입력하면 된다.

 

 

bootstrap.yml 세팅


 

resources - bootstrap.yml

 

어떤 시크릿매니저를 사용하는지 IDE에 알려주기 위해서 bootstrap.yml을 설정한다.

 

bootstrap.yml

aws:
  secretsmanager:
    name: (시크릿매니저 이름)
cloud:
  aws:
    region:
      static: (region)

 

(시크릿매니저 이름)은 아까 생성한 "/secret/test"에서 test만 적어주는 형식으로 입력하면 된다.

 

즉 생성한 시크릿매니저의 이름이 /secret/test라면,
name 에는 test만 적으면 된다는 것이다.

 

 

(region)은 Secret Manager 설정(4)에 보이는 region을 적으면 된다.

 

나는 ap-northeast-2 로 적어주었다.

 

 

 

build.grade


 

// aws secrets (SpringBoot 2.7.7 기준)
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'

 

마지막으로 build.gradle에 해당 implement를 추가해주면 AWS SecretManger를 사용할 수 있다.

 

버전이 다르다고 오류가 나면 Maven Repository에서 찾아 업데이트 해주거나,
IntelliJ IDE를 사용 중이라면 노란 전구를 클릭하면 자동으로 버전에 맞춰 버전을 업그레이드 해준다.

 

 


적용

 

 

application.yml

 

이제 secrets Manager에 넣었던 값을 application.yml에 ${KeyName} 형태로 값을 넣어두면

 

AWS SecretManager에 설정되어있는 KeyValue가 이곳에 매핑된다.

 

이렇게 되면 암호키 값을 더이상 프로젝트에 저장하지 않아도 되기 때문에 민감한 설정 파일을 Github에 push해도 아무런 보안문제가 발생하지 않는다.