AWS Systems Manager의 기능인 Parameter Store
는 구성 데이터 관리 및 암호 관리를 위한 안전한 계층적 스토리지를 제공합니다. 암호, 데이터베이스 문자열, 라이선스 코드와 같은 데이터를 파라미터 값으로 저장할 수 있습니다. 값을 일반 텍스트 또는 암호화된 데이터로 저장할 수 있습니다. 파라미터를 생성할 때 지정한 고유 이름을 사용하여 스크립트, 명령, SSM 문서, 구성 및 자동화 워크플로에서 Systems Manager 파라미터를 참조할 수 있습니다.
젠킨스
를 통해 CI / CD
를 구축하며 스프링에 jwt secret key와 firebase admin sdk 정보를 입력해주어야 할 일이 생겼고 AWS Parameter Store
을 사용해보았습니다.
전체적인 과정을 먼저 나열하면 다음과 같습니다.
순서 | 과정 |
---|---|
1 | aws IAM 키방식 계정 생성 및 권한 설정 |
2 | aws KMS 대칭키 생성 |
3 | AWS Parameter Store 파라미터 생성 |
4 | jenkins AWS Parameter Store Build Wrapper plugin 설치 |
5 | 젠킨스에 aws Credentials 등록 |
6 | 파이프라인 작성 |
먼저 젠킨스에서 AWS Parameter Store에 접근할 수 있도록 계정을 생성하고 적절한 권한을 추가해주어야 합니다. Access Key
와 Secret Access Key
를 제공하는 키 방식으로 계정을 생성하고
파라미터 스토어에 접근하기 위해서는 AmazonSSMFullAccess
를 추가해주세요.
만약 해당 파라미터를 암호화해서 관리하고 싶다면 KMS 클라우드 서비스를 통해 대칭키를 먼저 생성해주어야 합니다. (유료입니다.)
파라미터를 암호화해서 관리하고 싶지 않다면(무료로 쓰고 싶다면) 2번과 3번과정을 건너띄어주세요.
꼭 대칭키로 생성해주어야 합니다.
대칭키 생성 과정에서 관리자를 등록하라고 하는데 1번 과정에서 생성한 계정을 해당 대칭키 관리자로 등록합니다.
이제 여러 애플리케이션에서 참조할 파라미터를 생성해줄 차례입니다.
생성버튼을 누릅니다.
파라미터 경로를 지정해줍니다. 저는 /{project_name}/{type}/{profile}/{key}
의 형태로 파라미터 경로를 지정해주었습니다.
만약 프로파일이 test
인지, dev
, prod
에 따라 해당하는 파라미터를 지정하게 하고싶다면 이렇게 해줍니다.
파라미터값의 암호화 유무에 따라 이부분에서 살짝 갈립니다. 암호화를 하지 않고 무료로 사용하고 싶다면 유형에서 문자열
을 선택하고 암호화하고자 한다면 보안 문자열
을 선택합니다.
문자열
을 선택한 경우, text 부분에 해당 파라미터 경로에 해당하는 value를 입력하면 됩니다.
보안 문자열
을 선택한 경우
KMS 키 소스
에서 다른 계정을 선택하고, KMS 키 ID
부분에는 암호화하고자 하는 KMS 대칭키의 ARN을 복사 붙여넣기 해줍니다. ARN은 AWS KMS로 가면 확인 가능합니다.
withAWSParameterStore
를 사용하기 위해서는 젠킨스에 AWS Parameter Store Build Wrapper plugin
를 설치해주어야 합니다.
젠킨스 관리 -> 플러그인 관리로 이동하여 이 플러그인을 설치합니다.
젠킨스는 1번 단계에서 등록한 AWS 계정을 이용해 파라미터 스토어에 접근합니다. 이를 위해 aws Credentials
를 등록합니다.
젠킨스 관리
-> Manage Credentials
이동, Add Credentials
클릭
이와 같이 1번 단계에서 aws 계정 생성 시 발급받았던 액세스 키와 시크릿 액세스 키를 입력하고 ID를 지정하여 젠킨스에서 aws 파라미터 스토어에 접근할 수 있게 되었습니다.
stage('create secret file by aws parameter store') {
steps {
dir('src/main/resources/secrets') {
withAWSParameterStore(credentialsId: 'aws-all-knu',
path: "/all-knu/jwt/${env.PROFILE}",
naming: 'basename',
regionName: 'ap-northeast-2') {
writeFile file: 'jwt-secrets.properties', text: "${env.KEY}"
}
}
}
post {
success {
echo 'success create secret file'
}
failure {
slackSend (channel: '#jenkins-notification', color: '#FF0000', message: "${env.CONTAINER_NAME} CI / CD 파이프라인 구동 실패, 젠킨스 확인 해주세요")
error 'fail create secret file'
}
}
}
파라미터 경로를 입력하고 reginName 꼭 지정해주셔야 합니다!
env.{parameter_key}
꼴로 접근이 가능합니다.
옵션에 대한 자세한 설명은 https://www.jenkins.io/doc/pipeline/steps/aws-parameter-store/ 에서 확인해주세요.