[AWS/Terraform] 자격증명 정리 — 콘솔/CLI/프로필/SSO/환경변수, 그리고 안전한 사용법

도은호·2025년 9월 24일

terraform

목록 보기
21/32

1) aws 로그인 방법들

  • 웹 콘솔: ID/비밀번호(+MFA)로 로그인.

  • CLI/SDK: 자격증명으로 API 호출. 대표 소스

    1. 환경변수: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
    2. 공유 자격증명 파일: ~/.aws/credentials, ~/.aws/config의 프로파일
    3. SSO(IAM Identity Center): 단기 자격증명 발급
    4. 역할(Role): EC2/ECS 메타데이터/AssumeRole, OIDC(Web identity) 등
      AWS 도구는 표준 자격 증명 체인을 따라 위 경로들을 순서대로 탐색해요. (AWS 문서)

2) 왜 “Terraform 코드에 키를 올리면 안 되나?”

  • 유출 위험: 깃 히스토리·리뷰·로그에 평문 노출 가능.
  • 베스트 프랙티스: 장기 키(Access key) 사용을 최소화하고, 임시 자격증명/역할/SSO를 쓰도록 권장. (AWS 문서)

.gitignore 예: .terraform/, *.tfstate, *.tfvars, terraform.tfstate.backup


3) 환경변수 vs aws configure vs SSO

(1) 환경변수(빠르지만 노출에 취약)

  • 설정 예 (세션 한 번만):

    export AWS_ACCESS_KEY_ID=AKIA...
    export AWS_SECRET_ACCESS_KEY=...
    export AWS_PROFILE=dev   # 프로파일 지정 시
  • 주의: 현재 셸/프로세스의 환경에 평문으로 남습니다. 터미널 기록·프로세스 검사 등으로 노출 위험이 있어 상시 사용은 지양.

  • 사용 용도: 일시 테스트나 CI에서 단기 토큰만 주입.

(2) aws configure(프로파일 파일에 저장) - 지금 학원에서 사용하는 방식

  • 실행:

    aws configure            # default 프로파일
    aws configure --profile dev
  • 저장 위치: ~/.aws/credentials, ~/.aws/config (Windows: C:\Users\<you>\.aws\...) (AWS 문서)

  • 중요: 이 파일들은 평문 텍스트. 암호화가 아니라 파일 권한(예: 600) 으로 보호합니다. 필요 시 권한을 점검하세요. (AWS 문서)

(3) IAM Identity Center(SSO)권장

  • 장점: 브라우저 로그인 → 단기 자격증명 발급, 장기 키 보관 불필요.

  • 설정:

    aws configure sso
    aws sso login --profile my-sso

    이후 aws sts get-caller-identity --profile my-sso로 확인. (AWS 문서)


4) 확인 명령(누구로 로그인됐는지)

aws sts get-caller-identity
# 출력: Account, Arn(사용자/역할), UserId

“지금 어떤 사용자/역할로 호출 중인지”를 알려주는 표준 확인법 (AWS 문서)


5) Terraform에서 안전하게 인증하기

(A) 프로파일 사용(로컬 개발)

# providers.tf
provider "aws" {
  region  = "ap-northeast-2"
  profile = "dev"     # ~/.aws/{credentials,config}의 dev 프로파일 사용
}

Terraform AWS Provider는 AWS의 표준 자격증명 체인을 그대로 사용합니다. (프로파일/환경변수/역할 등) (registry.terraform.io)

(B) AssumeRole(멀티계정/권한 상승)

provider "aws" {
  region  = "ap-northeast-2"
  profile = "dev-base"         # 베이스 자격증명
  assume_role {
    role_arn     = "arn:aws:iam::123456789012:role/TerraformRole"
    session_name = "tf-apply"
  }
}

베이스 자격증명으로 임시 역할을 받아 작업합니다(권장 패턴). (registry.terraform.io)


6) 파일 구조 예시(참고)

~/.aws/credentials

[default]
aws_access_key_id=AKIA...
aws_secret_access_key=...

[dev]
aws_access_key_id=AKIA...
aws_secret_access_key=...

~/.aws/config

[default]
region=ap-northeast-2
output=json

[profile dev]
region=ap-northeast-2

두 파일은 평문. 접근 권한을 제한(예: chmod 600 ~/.aws/credentials). (AWS 문서)


7) 보안 체크리스트(요점 정리)

  • 코드/레포에 키 금지 (tf, tfvars, state 포함)
  • 로컬에 장기 키 보관 최소화SSO/AssumeRole/단기 토큰 우선 (AWS 문서)
  • 자격증명 파일은 권한 600 등 최소권한 적용 (Amazon Web Services, Inc.)
  • 필요 시 프로파일 분리(dev/stage/prod) + AWS_PROFILE로 명시
  • 누구 계정인지 항상 aws sts get-caller-identity로 확인 (AWS 문서)
  • (서버/컨테이너) 가능하면 IAM Role 기반 단기 자격증명 사용
  • 네트워크·권한은 최소 권한 원칙으로 설계(정책 점검) (AWS 문서)

8) 흔한 오해 바로잡기

  • aws configure로 넣으면 암호화된다?” → 아니요. 평문 파일입니다. 다만 기본적으로 로컬 파일 권한으로 보호되고, 통신은 TLS로 암호화. 저장 자체가 암호화되는 건 아님. (AWS 문서)

요약

키를 코드에 넣지 말고, 로컬은 프로파일/SSO, 서버는 Role 기반 단기 자격증명으로. 저장 파일은 평문이니 권한 관리최소 권한 원칙을 지키자. (AWS 문서)

profile
`•.¸¸.•´´¯`••._.• 🎀 𝒸𝓇𝒶𝓏𝓎 𝓅𝓈𝓎𝒸𝒽💞𝓅𝒶𝓉𝒽 🎀 •._.••`¯´´•.¸¸.•`

0개의 댓글