API 요청용 AWS Signature Version 4 - AWS Identity and Access Management

API 요청용 AWS Signature Version 4

중요

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

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

요청에서 보내는 인증 정보에는 서명이 포함되어야 합니다. AWS Signature Version 4(SigV4)는 AWS API 요청에 인증 정보를 추가하기 위한 AWS 서명 프로토콜입니다.

비밀 액세스 키를 사용하여 API 요청에 서명하지 않습니다. 대신 SigV4 서명 프로세스를 사용합니다. 서명 요청:

  1. 요청 세부 정보를 기반으로 표준 요청 생성.

  2. AWS 자격 증명을 사용하여 서명 계산.

  3. 이 서명을 요청에 Authorization 헤더로 추가.

AWS에서는 이 프로세스를 복제하고 서명을 확인하여 그에 따라 액세스를 허용하거나 거부합니다.

대칭 SigV4를 사용하려면 특정 날짜에 단일 AWS 리전의 단일 AWS 서비스로 범위가 지정된 키를 생성해야 합니다. 따라서 각 리전마다 키와 계산된 서명이 달라지므로 서명의 대상 리전을 알아야 합니다.

비대칭 서명 버전 4(SigV4a)는 새로운 알고리즘을 사용한 서명을 지원하고 두 개 이상의 AWS 리전에서 확인 가능한 개별 서명을 생성하는 것을 지원하는 확장 프로그램입니다. SigV4a를 사용하면 리전 간에 원활한 라우팅 및 장애 조치를 통해 여러 리전에 대한 요청에 서명할 수 있습니다. AWS SDK 또는 AWS CLI를 사용하여 다중 리전 서명이 필요한 기능을 간접적으로 호출하면 서명 유형이 SigV4a를 사용하도록 자동으로 변경됩니다. 세부 정보는 AWS SigV4a 작동 방식을 참조하세요.

AWS SigV4 작동 방식

다음 단계에서는 SigV4에서 서명을 계산하는 일반적인 프로세스에 대해 설명합니다.

  1. 서명할 문자열은 요청 유형에 따라 다릅니다. 예를 들어 HTTP Authorization 헤더 또는 쿼리 파라미터를 인증에 사용하는 경우 요청 요소 조합을 사용하여 서명할 문자열을 생성합니다. HTTP POST 요청의 경우 요청의 POST 정책은 서명하는 문자열입니다.

  2. 서명 키는 각 단계의 결과를 다음 단계에 제공하는 일련의 계산입니다. 마지막 단계는 서명 키입니다.

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

자세한 내용은 AWS API 요청 서명의 요소 단원을 참조하십시오.

AWS SigV4a 작동 방식

SigV4a는 퍼블릭-프라이빗 키 암호화에 기반한 비대칭 서명을 사용합니다. SIGv4a는 SIGv4와 유사한 범위 지정된 자격 증명 도출 프로세스를 거칩니다. 단, SIGv4a는 날짜, 서비스 및 리전을 기반으로 고유한 서명 키를 도출할 필요 없이 동일한 키를 사용하여 모든 요청에 서명합니다. Elliptic Curve Digital Signature Algorithm(ECDSA) 키 페어는 기존 AWS 시크릿 액세스 키에서 파생될 수 있습니다.

시스템은 비대칭 암호화를 사용하여 다중 리전 서명을 확인하므로 AWS는 퍼블릭 키만 저장하면 됩니다. 퍼블릭 키는 시크릿이 아니며 요청에 서명하는 데 사용될 수 없습니다. 다중 리전 API 요청에는 비대칭 서명이 필요합니다(예: Amazon S3 다중 리전 액세스 포인트).

다음 단계에서는 SigV4a에서 서명을 계산하는 일반적인 프로세스에 대해 설명합니다.

  1. 서명할 문자열은 요청 유형에 따라 다릅니다. 예를 들어 HTTP Authorization 헤더 또는 쿼리 파라미터를 인증에 사용하는 경우 요청 요소 조합을 사용하여 서명할 문자열을 생성합니다. HTTP POST 요청의 경우 요청의 POST 정책은 서명하는 문자열입니다.

  2. 서명 키는 AWS 시크릿 액세스 키에서 각 단계의 결과를 다음 단계에 제공하는 일련의 계산을 통해 도출됩니다. 마지막 단계에서는 키 페어를 생성합니다.

  3. AWS 서비스가 Sigv4a로 서명된 요청을 받으면 AWS는 키 페어의 퍼블릭 부분만 사용하여 서명을 확인합니다. 서명이 유효한 경우 요청이 인증되고 서비스가 요청을 처리합니다. 서명이 유효하지 않은 요청은 거부됩니다.

다중 리전 API 요청의 SigV4a에 대한 자세한 내용은 GitHub에서 sigv4a-signing-examples 프로젝트를 참조하세요.

요청에 서명하는 경우

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의 쿼리 문자열로 표현될 수 있습니다. 자세한 내용은 인증 방법 단원을 참조하십시오.

추가 리소스