AWS 요청 인증 방법
AWS 요청 인증 방법
SigV4에서 만든 서명을 요청에 실어 보내는 방법(Authorization 헤더, 사전 서명된 URL, 청크 서명)을 설명하는 페이지예요.
출처: 문서
본문
SigV4로 만든 서명은 다음 세 가지 방법 중 하나로 요청에 포함해 보낼 수 있어요.
1. Authorization 헤더를 사용한 인증
가장 일반적인 방법이에요. Authorization 헤더에 서명 정보를 넣어요. 헤더 형식은 다음과 같아요.
Authorization: AWS4-HMAC-SHA256 Credential=<access-key-id>/<scope>, SignedHeaders=<headers>, Signature=<signature>
Credential— 액세스 키 ID와 서명 범위(날짜/리전/서비스).SignedHeaders— 서명에 포함된 헤더 목록 (세미콜론 구분).Signature— 계산된 서명 값.
이 방식은 대부분의 AWS SDK와 애플리케이션에서 사용해요.
2. 쿼리 문자열(사전 서명된 URL) 인증
브라우저에서 직접 접근하거나, 공유 링크를 만들어야 할 때 사용하는 방식이에요. 서명 정보를 URL의 쿼리 파라미터로 넣어요.
GET https://service.example.com/path?
X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=<access-key-id>%2F<scope>
&X-Amz-Date=<timestamp>
&X-Amz-Expires=3600
&X-Amz-SignedHeaders=host
&X-Amz-Signature=<signature>
X-Amz-Expires— 사전 서명된 URL이 유효한 시간(초). 단기 만료를 지정해요.
사전 서명된 URL을 만든 사람(URL에 서명한 사람)에게 해당 동작 권한이 있어야 URL이 동작해요.
3. 청크 서명 (HTTP 요청 본문) 인증
큰 본문을 스트리밍으로 보내는 경우(예: Amazon S3에 큰 객체 업로드) 사용하는 방식이에요. 본문을 여러 청크로 나누고 각 청크를 개별적으로 서명해요. 이 방식을 통해 전송 중 본문이 변경되지 않았음을 보장하면서도 전체 본문을 메모리에 올릴 필요 없이 큰 데이터를 보낼 수 있어요.
- 각 청크는
aws-chunked콘텐츠 인코딩으로 전송되고, 시그니처 체인(signature chain)으로 이전 청크와 연결돼요.
언제 어떤 방법을 쓸까
| 상황 | 권장 인증 방법 |
|---|---|
| 앱/서버에서 AWS API 호출 | Authorization 헤더 |
| 브라우저에서 S3 객체 등에 직접 접근 | 사전 서명된 URL |
| 대용량 객체 스트리밍 업로드 | 청크 서명 |
보안 모범 사례로, 사전 서명된 URL은 만료 시간을 짧게 설정하고 민감한 작업에는 다른 인증 방식을 사용하는 것을 권장해요.