[2] 250909~ 클라우드/[b] 12월 : Terraform + Ansible

[54] aws s3 ls 시 (환경변수 / credentials / IMDS slot)

페페 더 엔지니어 2026. 2. 18. 11:22

[0]

aws s3 ls 검색시

 

AWS SDK / CLI 는

 

1. 환경변수
2. ~/.aws/credentials
3. IMDS (Instance Role)

 

로 크레덴셜을 탐색하기 시작한다

 

-

 

[1]

Environment Variables

-> 하드코딩 키

 

보통

IAM User Access Key

STS 임시 키

CI/CD 파이프라인 키

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN   # (옵션, STS일 경우)


EX)
export AWS_ACCESS_KEY_ID=AKIA....
export AWS_SECRET_ACCESS_KEY=abcd....

저장 위치 : OS 환경변수

수명 : 키 만료까지 (회전x)

보안 x

우선순위 1순위

 

-

 

[2]

로컬 자격증명 파일

~/.aws/credentials

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

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

저장 위치 : 파일

키 종류 : IAM User Key

Profile : 여러 개 가능

CLI 사용 : aws configure

우선순위 : 2순위

 

---------------------------------------------

환경변수와 credentials 파일에는

"IAM User Access Key or STS 임시 키가 들어 있다

둘 다 Role 기반 키 아님.

 

-

 

[3]

EC2 Role (IMDS)와 차이

  환경변수 / Credentials IMDS
키 발급 주체 IAM User or STS STS (Role 기반)
저장 위치 OS / 파일 Metadata API
자동 회전
권장 여부 낮음 높음
EC2 표준

 

-

 

[4]

실무 보안 관점

환경변수 x

credentials x

IMDS o

 

이것만 남겨둔다

 

-

 

[6]

cli / aws configure의 경우

-> STS token이 아닌

-> IAM User의 Long-term Credentials

그러면 저장되는 파일

~/.aws/credentials
~/.aws/config

##ex####
[default]
aws_access_key_id = AKIA....
aws_secret_access_key = abcd....

발급 주체 : IAM User

 

수명 : 만료 없음

발급 : IAM

token : 없음

STS개입 : 없음

 

즉 CLI CRUD가 가능한 이유는 

IAM User 자체 권한으로 직접 AWS API 호출하는 것

 

-

 

STS  토큰과 차이

STS 사용시 credential 형태

AccessKeyId
SecretAccessKey
SessionToken   ← 이게 핵심
Expiration

 

하지만 aws configure 기본 키에는 

SessionToken 없음

Expriation 없음

-> 그래서 장기 키

 

-

 

chain

AWS CLI
   ↓
Access Key 서명
   ↓
AWS API 직접 호출

 

-

 

[7]

token을 사용하는 경우 3가지

 

A : MFA 세션 토큰

(aws sts get-session-token)

web 로그인시 authenticator

 

B : AWS SSO 로그인

CLI v2 특징

aws configure sso
aws sso login

##########동작#################
SSO 인증
   ↓
STS Token 발급
   ↓
CLI 저장

 

C :

Assume Role Profile

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

[prod]
role_arn = arn:aws:iam::123:role/Admin
source_profile = default

##############################################

aws s3 ls --profile prod

############# 동작 ###################3
default 키 사용
   ↓
sts:AssumeRole
   ↓
Temp Credential 발급
   ↓
API 호출

 

-

 

[8]

내 환경이 STS인지 확인하는 경우

 

 1 : ~/.aws/credentials -> Session Token 있으면 STS

 2: cli로  aws get-caller-identity

 

User ARN -> IAM User 키

Assumed-role ARN -> STS