API 요청용 AWS Signature Version 4
중요
AWS SDK(샘플 코드 및 라이브러리
여러 서명 버전을 지원하는 리전에서는 수동 서명을 요청하는 경우 사용할 서명 버전을 지정해야 합니다. 다중 리전 액세스 포인트로 요청을 공급하는 경우 SDK와 CLI가 자동으로 추가 구성 없이 서명 버전 4A를 사용하는 것으로 전환됩니다.
요청에서 보내는 인증 정보에는 서명이 포함되어야 합니다. AWS Signature Version 4(SigV4)는 AWS API 요청에 인증 정보를 추가하기 위한 AWS 서명 프로토콜입니다.
비밀 액세스 키를 사용하여 API 요청에 서명하지 않습니다. 대신 SigV4 서명 프로세스를 사용합니다. 서명 요청:
-
요청 세부 정보를 기반으로 표준 요청 생성.
-
AWS 자격 증명을 사용하여 서명 계산.
-
이 서명을 요청에 Authorization 헤더로 추가.
AWS에서는 이 프로세스를 복제하고 서명을 확인하여 그에 따라 액세스를 허용하거나 거부합니다.
참고
AWS는 다중 리전 API 요청에 대한 서명을 지원하는 확장 기능인 Signature Version 4A도 지원합니다. 자세한 정보는 GitHub에서 sigv4a-signing-examples
AWS SigV4 작동 방식
다음 다이어그램은 서명을 계산하는 일반적인 프로세스를 보여줍니다.
-
서명할 문자열은 요청 유형에 따라 다릅니다. 예를 들어 HTTP Authorization 헤더 또는 쿼리 파라미터를 인증에 사용하는 경우 요청 요소 조합을 사용하여 서명할 문자열을 생성합니다. HTTP POST 요청의 경우 요청의
POST
정책은 서명하는 문자열입니다. -
서명 키는 각 단계의 결과를 다음 단계에 제공하는 일련의 계산입니다. 마지막 단계는 서명 키입니다.
-
AWS 서비스에서 인증된 요청을 수신하면 요청에 포함된 인증 정보를 사용하여 서명을 다시 생성합니다. 서명이 일치하는 경우 서비스에서 요청을 처리합니다. 그렇지 않으면 서비스에서 요청을 거부합니다.
자세한 내용은 AWS API 요청 서명의 요소 단원을 참조하십시오.
요청에 서명하는 경우
AWS에 API 요청을 전송하는 사용자 지정 코드를 작성할 때 요청에 서명하는 코드를 포함해야 합니다. 사용자 지정 코드를 작성하는 이유는 다음과 같습니다.
-
AWS SDK가 없는 프로그래밍 언어로 작업하는 경우
-
AWS에 요청을 전송하는 방법을 완벽하게 제어해야 하는 경우
API 요청은 AWS SigV4로 액세스를 인증하는 반면, AWS SDK와 AWS CLI는 사용자가 제공하는 액세스 키를 사용하여 요청을 인증합니다. AWS SDK 및 AWS CLI를 사용한 인증에 대한 자세한 내용은 추가 리소스의 내용을 참조하세요.
요청에 서명하는 이유
서명 프로세스는 다음과 같은 방법으로 요청을 보호할 수 있습니다.
-
요청자의 ID 확인
인증된 요청에는 액세스 키(액세스 키 ID, 비밀 액세스 키)를 사용하여 만든 서명이 필요합니다. 임시 보안 인증 정보를 사용하는 경우 서명 계산에 보안 토큰도 필요합니다. 자세한 내용은 AWS 보안 자격 증명 프로그래밍 방식 액세스를 참조하세요.
-
전송 중인 데이터 보호
요청이 전송되는 동안 훼손되는 것을 방지하기 위해 일부 요청 요소를 사용하여 요청의 해시(다이제스트)를 계산하고 결과 해시 값을 요청의 일부로 포함합니다. AWS 서비스에서는 요청이 수신되면 동일한 정보를 사용하여 해시를 계산한 후 요청에 있는 해시 값과 비교합니다. 값이 일치하지 않으면 AWS에서 요청을 거부합니다.
-
잠재적 재생 공격으로부터 보호
대부분의 경우 요청서의 타임스탬프 시간으로부터 5분 이내에 AWS에 요청이 도착해야 합니다. 그렇지 않으면 AWS가 요청을 거부합니다.
AWS SigV4는 HTTP Authorization 헤더에서 또는 URL의 쿼리 문자열로 표현될 수 있습니다. 자세한 내용은 인증 방법 단원을 참조하십시오.
추가 리소스
-
다양한 서비스의 SigV4 서명 프로세스에 대한 자세한 내용은 서명 요청 예의 내용을 참조하세요.
-
AWS CLI의 프로그래밍 액세스를 위한 자격 증명을 구성하려면 AWS 명령줄 인터페이스 사용 설명서의 인증 및 액세스 자격 증명을 참조하세요.
-
AWS SDK에는 AWS API 요청에 서명하기 위한 GitHub의 소스 코드가 포함되어 있습니다. 코드 샘플은 AWS 샘플 리포지토리의 예시 프로젝트 단원을 참조하십시오.
-
AWS SDK for .NET – AWS4Signer.cs
-
AWS SDK for C++ – AWSAuthV4Signer.cpp
-
AWS SDK for Go – v4.go
-
AWS SDK for Java – BaseAws4Signer.java
-
AWS SDK for JavaScript – v4.js
-
AWS SDK for PHP – SignatureV4.php
-
AWS SDK for Python (Boto) – signers.py
-
AWS SDK for Ruby – signer.rb
-