프로젝트를 진행하다보면 gitignore 설정을 깜빡해
aws 관련 주요 키 값 등의 환경 변수를 github에 노출하게 되는 등
민감한 보안 문제가 발생한다.
주로 application.yml 이나 application.propertise가 깃 레퍼지토리에 커밋 되었을 때 이러한 문제가 발생하는데
저 두 가지 파일을 깃에 올려놓고 편하게 쓸 수 있는 방법이 있다.
바로 AWS SecretManager 다
시크릿매니저는 AWS에 프로젝트의 주요 키를 담아두고 관리할 수 있도록 도와주는 서비스이다.
사용법은 간단하다.
Secret Manager 생성
Secret Manager에 들어가 "새 보안 암호 저장"을 선택한다.
"다른 유형의 보안 암호" 를 보안 암호 유형으로 선택하고
저장하고 싶은 키와 키값을 입력 후
다른 설정은 건드리지 않고 "다음"을 누른다.
보안 암호 이름을 '/secret/원하는이름' 으로 설정한다 (필수)
그리고 설명란에 secret에 대한 설명을 입력한다. (선택 사항)
그리고 마지막 페이지에서는 아무것도 건드리지 않고 "다음"을 선택한다.
마지막 저장페이지도 따로 설정을 하지 않고 "저장"을 누른다
그럼 이렇게 시크릿 매니저를 생성할 수 있다.
IAM 설정
생성된 SecretManager의 키들을 사용하기 위해선 IAM에 권한을 부여해야 한다.
바로 위의 권한인데 SecretManager의 키들을 Read/Write 할 수 있는 권한이다.
이 권한을 갖고 있어야 시크릿 매니저를 사용할 수 있다.
자신이 사용하는 IAM에 꼭 부여하도록 하자.
추가로 IAM을 통해 RDS, EC2 접근 등 다른 기능에 대해서도 권한이 필요하다면
이 또한 IAM에 등록해주어야한다.
IAM을 생성하는 방법을 모른다면 아래 게시글을 참고!
프로젝트 세팅
AWS CLI 설치
설정된 IAM을 적용하기 위해선 AWS CLI이 설치되어 있어야 한다.
설치가 안 되어 있다면 아래 링크를 참고하여 설치하도록 하자.
aws configure
설정된 IAM을 적용하기 위해선 인텔리제이의 Terminal 혹은 프로젝트 폴더의 Git bash를 열어
IAM의 Access key ID, Secret access key를 등록해주어야 한다.
해당 값은 위의 csv파일에서 확인이 가능하고 csv파일은 IAM 생성 후, 보안 자격 증명에서 얻을 수 있다.
위에 올려둔 IAM 관련 게시글을 참고!
aws configure
(Access key ID)
(Secret access key)
(region)
Enter 1번
입력창에는 위의 순서로 입력하면 된다.
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를 사용 중이라면 노란 전구를 클릭하면 자동으로 버전에 맞춰 버전을 업그레이드 해준다.
적용
이제 secrets Manager에 넣었던 값을 application.yml에 ${KeyName} 형태로 값을 넣어두면
AWS SecretManager에 설정되어있는 KeyValue가 이곳에 매핑된다.
이렇게 되면 암호키 값을 더이상 프로젝트에 저장하지 않아도 되기 때문에 민감한 설정 파일을 Github에 push해도 아무런 보안문제가 발생하지 않는다.
'BackEnd > Infra' 카테고리의 다른 글
[AWS] AWS EC2 FTP 클라이언트 연결 (FileZilla) (1) | 2022.04.13 |
---|---|
[AWS] EC2 배포(2) - PuTTY로 AWS EC2 인스턴스 접속 (2) | 2022.04.09 |
[AWS] EC2 포트 포워딩 (3) | 2022.04.05 |
[AWS] AWS CLI 설치 및 aws configure 설정법 (4) | 2022.01.11 |
[AWS] Amazon Web Service 회원 가입 하는 법 (4) | 2021.12.29 |