index

aws credentials

자격 증명은 사용자가 시스템에 자신을 인증하고 특정 작업을 수행할 권한을 증명하는 데 사용되는 정보로, identity(사용자 식별 정보)와 permissions(수행할 수 있는 작업 범위)를 연결한다

aws에서는 생성 방식과 사용 목적에 따라 자격 증명의 유형을 다음과 같이 구분한다

long-term credentials

장기 자격 증명은 만료되지 않는 자격 증명으로, 주로 root user 및 IAM user에 연결된다

Access Key ID와 Secret Access Key로 구성되며 aws cli, sdk에서 사용할 수 있다

console, cli, sdk에서 새 자격 증명을 발급할 수 있다 (rotation)

temporary credentials

aws sts(security token service)에서 발급하는 자격 증명으로 유효 기간이 제한되며 자동 갱신을 지원한다

Access Key ID, Secret Access Key, Session Token(임시 자격 증명을 식별하는 추가 토큰), Expiration(기본 1시간, 최대 12시간)으로 구성된다

역할 전환, sso, 모바일/외부 사용자 인증의 용도로 사용되며 다음과 같은 방법으로 발급할 수 있다

root user credentials

aws 계정 생성 시 제공되는 기본 자격 증명

기본적으로 이메일 주소와 암호로 구성되며 MFA(OTP, 하드웨어 토큰) 다중 인증을 구성할 수 있다

모든 권한을 가지는 최상위 계정으로 계정 수준 작업(결제 정보 변경, MFA 설정 등)의 용도로 사용된다

보안 이슈를 방지하기 위해 최소한으로 사용하고 IAM 사용자를 생성한 뒤 대체하는 방식을 권장한다

IAM user credentials

root user로부터 생성된 계정의 자격 증명

기본적으로 username만 가지며 root user가 필요에 따라 콘솔 로그인을 활성화하여 비밀번호를 생성하거나 프로그래밍 액세스를 할 수 있도록 액세스 키를 만들 수 있다

또한 sts를 통해 임시 자격 증명을 생성하거나 MFA 다중 인증을 구성할 수 있다

sso credentials

IAM identity center를 통해 발급된 토큰 기반 자격 증명

sso 포털 로그인 -> 토큰 캐시 -> sts 호출 흐름을 통해 임시 자격 증명을 생성할 수 있다

인증 방식을 중앙화하여 다중 계정 및 애플리케이션에 접근할 수 있으며 IAM identity center 디렉토리를 사용하거나 외부 idp(okta, azure ad 등)와 통합할 수 있다

ec2 instance role credentials

ec2 인스턴스에 부여된 IAM 역할을 기반으로 인스턴스 메타데이터 서비스(IMDS)에서 발급하는 임시 자격 증명

ec2 내 애플리케이션에서 aws 리소스에 접근할 때 사용되며 sts를 통해 주기적으로 갱신된다

aws credentials management

credentials creation

IAM user: IAM 콘솔에서 사용자 생성 -> 자격 증명 발급

sts: cli/sdk로 임시 자격 증명 요청

sso: IAM identity center 설정 후 로그인

save credentials

aws cli

sdk

auto management

ec2 역할: IMDS (instance metadata service)에서 임시 자격 증명 동적 제공

aws lambda: 실행 역할로 자동 주입

authentication/authorization services

aws interface(console, cli, sdk 등)에서 aws 서비스 또는 리소스에 접근하려면 적절한 권한을 가진 자격 증명을 aws 백엔드에게 전송한 뒤 검증받아야 한다

이 과정에서 인증/인가 단계를 모두 거치는데, 모든 인터페이스에서 공통적으로 적용될 수 있는 구성 요소와 동작 과정을 알아보자

IAM (identity and access management)

STS (security token service)

SigV4 (signature version 4)

aws backend authentication system

service endpoint

authentication/authorization workflow

1. credentials acquisition

aws 서비스를 사용하기 위해 자격 증명을 획득 과정으로 공통적으로 적용되는 점은 다음과 같다

aws management console

normal login

sso (IAM identity center)

aws cli

normal login (aws configure)

sso (aws configure sso)

aws sdk

normal login

sso

2. aws api request creation

각 인터페이스는 사용자의 작업을 aws api 호출로 변환한다

console ui 클릭, cli 명령어, sdk 메서드 -> api 요청

api 요청에는 다음과 같은 정보가 포함된다

3. request signing

인터페이스에서 발생한 모든 요청은 무결성과 발신자 인증을 보장하기 위해 SigV4(aws signature version 4)를 통해 서명되며 그 과정은 다음과 같다

클라이언트 측에서 다음과 같은 과정을 통해 서명을 생성한다

1. canonical request 생성

canonical request: 요청의 표준화된 문자열(메서드, 경로, 쿼리, 헤더 등)

GET
/my-bucket
Action=ListBuckets
host:s3.us-west-2.amazonaws.com
x-amz-date:20250313T120000Z

2. SHA254으로 해시 생성

3. string to sign 생성

string to sign: canonical request의 해시, 날짜, credential scope 등

AWS4-HMAC-SHA256
20250313T120000Z
20250313/us-west-2/s3/aws4_request
<canonical request 해시>

4. 자격 증명을 통해 HMAC-SHA256 계산

SecretAccessKey 또는 sts 토큰을 통해 HMAC-SHA256 계산을 여러 단계로 수행하여 서명을 생성한다

Signing Key = HMAC(HMAC(HMAC(HMAC("AWS4" + SecretAccessKey, Date), Region), Service), "aws4_request")

Signature = HMAC(Signing Key, String to Sign)

생성된 서명(AccessKeyID 포함)은 요청의 헤더에 포함된다

Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20250313/ap-northeast-2/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=fe5f80...

4. request sending

https를 통해 서명된 요청을 해당 aws 서비스 엔드포인트로 전송한다

엔드포인트는 리전별로 다른데, 만약 서울의 s3 서비스에 요청을 보낸 경우 s3.ap-northeast-2가 대상 엔드포인트로 설정된다

5. authentication

aws 백엔드 인증 시스템이 요청을 수신하고 다음을 확인한다

상세 과정

사용되는 보안 메커니즘

6. authorization

인증이 완료되면 aws 서비스는 IAM 정책을 평가하여 작업을 허용할지 결정한다

  1. 요청의 주체(principal) 확인: IAM 사용자, 역할, sso
  2. 정책 평가: IAM 정책(사용자/역할에 연결된 정책), 리소스 정책(s3 버킷 정책 등), aws organization scp(service control policy, optional)
  3. 작업 허용 여부 결정: 요청된 작업이 정책에 명시된 권한과 일치하면 작업을 실행한 후 응답을 반환하고, 아니라면 AccessDenied 오류를 반환한다
{
  "Effect": "Allow",
  "Action": "s3:ListBucket",
  "Resource": "arn:aws:s3:::my-bucket"
}

7. response receiving

aws 서비스가 작업을 수행한 결과를 인터페이스에게 반환한다

console: 웹 ui에 결과 표시

cli: 터미널에 json/text 출력

sdk: 프로그래밍 언어 객체로 반환