AWS API 요청에 서명 - AWS Identity and Access Management

AWS API 요청에 서명

중요

AWS SDK(샘플 코드 및 라이브러리 참조) 또는 AWS 명령줄(CLI) 도구를 사용하여 API 요청을 AWS로 전송하는 경우 SDK 및 CLI 클라이언트는 사용자 요청 인증에 사용자가 제공한 액세스 키를 사용하므로 이 섹션을 건너뛰어도 됩니다. 그럴 만한 이유가 없는 경우 항상 SDK 또는 CLI를 사용하는 것이 좋습니다.

여러 서명 버전을 지원하는 리전에서는 수동 서명을 요청하는 경우 사용할 서명 버전을 지정해야 합니다. 다중 리전 액세스 포인트로 요청을 공급하는 경우 SDK와 CLI가 자동으로 추가 구성 없이 서명 버전 4A를 사용하는 것으로 전환됩니다.

요청에서 보내는 인증 정보에는 서명이 포함되어야 합니다. 서명을 계산하려면 먼저 Select 요청 요소를 연결하여 문자열을 생성하는데, 문자열은 서명할 문자열입니다. 이후 서명 키를 사용하여 서명할 문자열의 해시 기반 메시지 인증 코드(HMAC)를 계산합니다.

AWS 서명 버전 4에서는 비밀 액세스 키를 사용하여 요청에 서명하지 않습니다. 대신 비밀 액세스 키를 사용하여 서명 키를 파생합니다. 파생된 서명 키는 날짜, 서비스 및 리전에 따라 다릅니다. 다른 프로그래밍 언어로 서명 키를 추출하는 방법에 대한 자세한 내용은 서명 요청 예 단원을 참조하십시오.

서명 버전 4는 AWS 서명 프로토콜입니다. AWS는 다중 리전 API 요청에 대한 서명을 지원하는 확장 기능인 서명 버전 4A도 지원합니다. 자세한 정보는 GitHub에서 sigv4a-signing-examples 프로젝트를 참조하세요.

다음 다이어그램은 서명을 계산하는 일반적인 프로세스를 보여줍니다.


            서명할 문자열, 서명 키, 계산된 서명을 비롯한 서명 부분의 이미지.
  • 서명할 문자열은 요청 유형에 따라 다릅니다. 예를 들어 HTTP Authorization 헤더 또는 쿼리 파라미터를 인증에 사용하는 경우 다양한 요청 요소 조합을 사용하여 서명할 문자열을 생성합니다. HTTP POST 요청의 경우 요청의 POST 정책은 서명하는 문자열입니다.

  • 서명 키의 경우 다이어그램에는 일련의 계산이 표시되며, 각 단계의 결과가 다음 단계로 전달됩니다. 마지막 단계는 서명 키입니다.

  • AWS 서비스에서 인증된 요청을 수신하면 요청에 포함된 인증 정보를 사용하여 서명을 다시 생성합니다. 서명이 일치하는 경우 서비스에서 요청을 처리합니다. 그렇지 않으면 서비스에서 요청을 거부합니다.

요청에 서명하는 경우

AWS에 API 요청을 전송하는 사용자 지정 코드를 작성할 때 요청에 서명하는 코드를 포함해야 합니다. 사용자 지정 코드를 작성하는 이유는 다음과 같습니다.

  • AWS SDK가 없는 프로그래밍 언어로 작업하는 경우

  • AWS에 요청을 전송하는 방법을 완벽하게 제어해야 하는 경우

요청에 서명하는 이유

서명 프로세스는 다음과 같은 방법으로 요청을 보호할 수 있습니다.

  • 요청자의 ID 확인

    인증된 요청에는 액세스 키(액세스 키 ID, 비밀 액세스 키)를 사용하여 만든 서명이 필요합니다. 임시 보안 인증 정보를 사용하는 경우 서명 계산에 보안 토큰도 필요합니다. 자세한 내용은 AWS 보안 자격 증명 프로그래밍 방식 액세스를 참조하세요.

  • 전송 중인 데이터 보호

    요청이 전송되는 동안 훼손되는 것을 방지하기 위해 일부 요청 요소를 사용하여 요청의 해시(다이제스트)를 계산하고 결과 해시 값을 요청의 일부로 포함합니다. AWS 서비스에서는 요청이 수신되면 동일한 정보를 사용하여 해시를 계산한 후 요청에 있는 해시 값과 비교합니다. 값이 일치하지 않으면 AWS에서 요청을 거부합니다.

  • 잠재적 재생 공격으로부터 보호

    대부분의 경우 요청서의 타임스탬프 시간으로부터 5분 이내에 AWS에 요청이 도착해야 합니다. 그렇지 않으면 AWS가 요청을 거부합니다.