AWS DVA-C02AWS 허브발행일 2025. 8. 28.원본 https://blog.naver.com/jword_/223986774860 ↗

AWS DVA-C02 #123 Signature Version 4

AWS DVA-C02 #123 Signature Version 4 — #개발자의도구들 #AWS시험 #AWSDVA-C02 #DVA-c02문제 #DVA-c02덤프 #SignatureVersion4 ...

#DVA-C02#Naver Blog

#개발자의도구들 #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 서명 프로토콜

​

  1. 요청 세부 정보를 기반으로 표준 요청 생성
  2. AWS 자격 증명을 사용하여 서명 계산
  3. 이 서명을 요청에 Authorization 헤더로 추가

​

AWS에서 이 프로세스를 복제하고 서명을 확인하여 그에 따른 엑세스를 허용하거나 거부한다.

​

text 코드 예제
                                    🍍🍑 재료들

Access Key ID
Secret Access Key
Session Token
현재 시각 (UTC, YYYYMMDD'T'HHMMSS'Z')
Region
service name

4단계

  1. Canonical Request
  2. String To Sign
  3. 서명 키 파생 + 최종 서명값 계산
  4. 요청에 서명 붙이기 (Authorization 헤더 또는 쿼리스트링 - 프리사인 URL)

​

Create a canonical request

text 코드 예제
                                    <HTTPMethod>\n
<CanonicalURI>\n
<CanonicalQueryString>\n
<CanonicalHeaders>\n
<SignedHeaders>\n
<HashedPayload>

같은 요청이라도 공백, 헤더 순서, 인코딩 등 애매한 부분 존재

이를 정규화된 규칙대로 딱 한 가지 문자열로 표준화 해서 해시/서명하면 서버도 똑같이 만들 수 있어서 무결성, 인증을 정확히 검증할 수 있다.

​

어디서 만드는가?

클라이언트에서 만든다. SDK가 보통 자동으로 만들어줌

서버는 받은 요청으로 같은 방식으로 다시 Canonical Request를 만들고, 그걸로 서명을 재계산해서 맞는지 확인한다.

​

실제 형식

http 코드 예제
                                    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

​

📌 임시로 클라이언트에서 만들고 서명을 생성 후 해당 파일은 버린다. 만들어진 서명만 서버로 전달된다.

​

만들어진 서명은 두가지 방식으로 전달된다.

text 코드 예제
                                    👉 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 요청

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

​