brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Nov 22. 2022

19탄-21. 테라폼-AWS-민감 정보 안전하게 관리

다음은 주말 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 오픈소스 사용

https://github.com/99designs/aws-vault

https://www.44bits.io/ko/post/securing-aws-credentials-with-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://rocksea.tistory.com/467



다음

https://brunch.co.kr/@topasvga/2823





https://brunch.co.kr/@topasvga/2421

감사합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari