AWS DVA-C02 #123 Signature Version 4
AWS DVA-C02 #123 Signature Version 4 — #개발자의도구들 #AWS시험 #AWSDVA-C02 #DVA-c02문제 #DVA-c02덤프 #SignatureVersion4 ...
#개발자의도구들 #AWS시험 #AWSDVA-C02 #DVA-c02문제 #DVA-c02덤프 #SignatureVersion4
참고: ExamPotic Disscussion
문제 찾는법 : 여기 최하단
요구사항 분석
A developer is developing an application that uses signed requests (Signature Version 4) to call other AWS services. The developer has created a canonical request, has created the string to sign, and has calculated signing information.
Which methods could the developer use to complete a signed request? (Choose two.)
보기 분석
- A. Add the signature to an HTTP header that is named Authorization.
- B. Add the signature to a session cookie.
- C. Add the signature to an HTTP header that is named Authentication.
- D. Add the signature to a query string parameter that is named X-Amz-Signature.
- E. Add the signature to an HTTP header that is named WWW-Authenticate.
A. ✅
B.
C.
D. ✅️
E
개념 정리
AWS Signature Version 4
SigV4는 AWS API 요청에 인증 정보를 추가하기 위한 AWS 서명 프로토콜
- 요청 세부 정보를 기반으로 표준 요청 생성
- AWS 자격 증명을 사용하여 서명 계산
- 이 서명을 요청에 Authorization 헤더로 추가
AWS에서 이 프로세스를 복제하고 서명을 확인하여 그에 따른 엑세스를 허용하거나 거부한다.
🍍🍑 재료들
Access Key ID
Secret Access Key
Session Token
현재 시각 (UTC, YYYYMMDD'T'HHMMSS'Z')
Region
service name
4단계
- Canonical Request
- String To Sign
- 서명 키 파생 + 최종 서명값 계산
- 요청에 서명 붙이기 (Authorization 헤더 또는 쿼리스트링 - 프리사인 URL)
Create a canonical request
<HTTPMethod>\n
<CanonicalURI>\n
<CanonicalQueryString>\n
<CanonicalHeaders>\n
<SignedHeaders>\n
<HashedPayload>
같은 요청이라도 공백, 헤더 순서, 인코딩 등 애매한 부분 존재
이를 정규화된 규칙대로 딱 한 가지 문자열로 표준화 해서 해시/서명하면 서버도 똑같이 만들 수 있어서 무결성, 인증을 정확히 검증할 수 있다.
어디서 만드는가?
클라이언트에서 만든다. SDK가 보통 자동으로 만들어줌
서버는 받은 요청으로 같은 방식으로 다시 Canonical Request를 만들고, 그걸로 서명을 재계산해서 맞는지 확인한다.
실제 형식
POST ← 1) HTTPMethod
/ ← 2) CanonicalURI
← 3) CanonicalQueryString (없으므로 ‘빈 줄’)
content-type:application/x-amz-json-1.0
host:dynamodb.ap-northeast-2.amazonaws.com
x-amz-date:20250828T071500Z
x-amz-target:DynamoDB_20120810.ListTables
← 4) CanonicalHeaders 블록 끝나고 ‘빈 줄’ 하나
content-type;host;x-amz-date;x-amz-target
← 5) SignedHeaders
44136fa355b3...caaff8a
← 6) HashedPayload
📌 임시로 클라이언트에서 만들고 서명을 생성 후 해당 파일은 버린다. 만들어진 서명만 서버로 전달된다.
만들어진 서명은 두가지 방식으로 전달된다.
👉 Authorization 헤더에 넣기 (가장 흔함)
Authorization: AWS4-HMAC-SHA256 Credential=.../scope, SignedHeaders=..., Signature=...
👉 쿼리 스트링으로 넣기 (presign URL)
X-Amz-Algorithm, X-Amz-Credential, X-Amz-Date, X-Amz-SignedHeaders, X-Amz-Signature 등
🚀 실제 HTTP 요청
POST / HTTP/1.1
Host: dynamodb.ap-northeast-2.amazonaws.com
Content-Type: application/x-amz-json-1.0
X-Amz-Target: DynamoDB_20120810.ListTables
X-Amz-Date: 20250828T071500Z
Authorization: AWS4-HMAC-SHA256 Credential=AKIAEXAMPLE/20250828/ap-northeast-2/dynamodb/aws4_request, SignedHeaders=content-type;host;x-amz-date;x-amz-target, Signature=<<<CALCULATED_SIGNATURE_HEX>>>
Content-Length: 2
{}
위 Authorization 헤더의 Signature 값이 Canonical Request → StringToSign → HMAC 계산으로 나온 최종 서명값이다.
임시 자격증명(STS) 사용 시엔 헤더에 x-amz-security-token: <SessionToken>도 추가하면된다.
출처
https://docs.aws.amazon.com/IAM/latest/UserGuide/reference\_sigv-create-signed-request.html