다음은 주말 CloudNet 테라폼 스터디 내용 참고하여 정리한 부분입니다.
https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863
배포 과정에서 민감 정보 (DB암호, API 키, TLS인증서, SSH키, GPG 키 등)를 안전하게 관리해 보자.
<1> 민감 정보를 절대 평문으로 저장하지 말 것.
<2> Provider 관리
<1> 민감 정보를 절대 평문으로 저장하지 말 것.
깃허브에 민감 정보가 올라가는 경우가 있다.
3가지를 관리하자.
1
Provider 관리
인증 관련 정보 노출
2
리소스와 데이터 소스 - 데이터 베이스 암호 등
3
상태 파일과 plan file 관리
<2> Provider 관리
사전 작업
mac pc or windows pc
access-key, secret-key 생성
1
문제점
provicer에 인증 관련 정보 노출
access-key와 secret-key 정보 노출
2
Provider 개선방안 1
export 환경변수 사용
디스크가 아닌 메모리에만 저장되므로 안전하다.
[root@ip-172-31-33-214 ~]# aws s3 ls
Unable to locate credentials. You can configure credentials by running "aws configure".
export AWS_ACCESS_KEY_ID=AKIAWSA5ESxxxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=jTlnDxxxxxxxxxxxxxxxx
[root@ip-172-31-33-214 ~]# aws s3 ls
2022-09-15 05:57:17 cf-templates-18pmd1tc8r6q0-ap-northeast-2
2022-09-15 05:47:40 cf-templates-18pmd1tc8r6q0-ap-southeast-1
access-key와 secret-key 정보가 노트북에 평문에 저장될 수 있다.?
1Password로 해결할 수 있다.(유료)
로그인후 키정보 획득후 환경변수에 저장
eval $(op signin my)
export AWS_ACCESS_KEY_ID=$(op get item 'aws-dev' --fields 'id')
export AWS_SECRET_ACCESS_KEY=$(op get item 'aws-dev' --fields 'secret')
3
Provider 개선방안 2
AWS-vault 오픈소스 사용
# mac 설치
brew install --cask aws-vault
# 윈도 설치
choco install aws-vault # 윈도 Chocolatey
scoop install aws-vault # 윈도 Scoop
# 버전 확인
aws-vault --version
v6.6.0
# 설정
#aws-vault add <PROFILE_NAME>
aws-vault add t101
Enter Access Key Id: (YOUR_ACCESS_KEY_ID)
Enter Secret Key: (YOUR_SECRET_ACCESS_KEY)
# 확인
aws-vault ls
Profile Credentials Sessions
======= =========== ========
default - -
t101 t101 -
# 사용
#aws-vault exec <PROFILE> -- <COMMAND>
aws-vault exec t101 -- aws s3 ls
aws-vault exec --debug t101 -- aws s3 ls
aws-vault exec t101 -- terraform plan
aws-vault exec t101 -- terraform apply
4
Provider 개선방안 3
CI/CD 플랫폼인 CircleCI를 통해 테라폼 코드를 실행한다고 가정
CircleCI as a CI server, with stored secrets
CircleCI에 access-key와 secret-key를 입력하여 사용함.
단점: 자격증명을 수동으로 관리해야 함. role이 아닌 영구 자격증명이다.
5
개선방안 4
EC2에 Jenkins 설치 후 CI서버로 테라폼 코드를 실행한다고 가정 시 IAM roles 활용
Role을 스위칭해서 사용함.
[Providers] EC2 Instance running Jenkins as a CI server, with IAM roles
https://github.com/brikis98/terraform-up-and-running-code/tree/master/code/terraform/06-managing-secrets-with-terraform/ec2-iam-role
6
개선방안 5
Github Actions 은 직접 자격 증명과 OIDCOpen ID Connect 지원
[Providers] GitHub Actions as a CI server, with OIDC
OAuth 2.0 설명
https://www.youtube.com/watch?v=vo_0PW3V5zU
참고자료
다음
https://brunch.co.kr/@topasvga/2421
감사합니다.