요청 인증(AWS 서명 버전 4)
주제
Amazon S3와의 모든 상호 작용은 인증을 거치거나 익명으로 할 수 있습니다. 이 섹션에서는 AWS 서명 버전 4 알고리즘을 사용한 요청 인증에 대해 설명합니다.
참고
AWS SDK(샘플 코드 및 라이브러리
AWS 서명 버전 4를 사용한 인증은 요청에 서명하도록 선택한 방법에 따라 다음 중 일부 또는 전부를 제공합니다.
-
요청자 자격 증명 확인 - 인증된 요청에는 액세스 키(액세스 키 ID, 시크릿 액세스 키)를 사용하여 생성한 서명이 필요합니다. 액세스 키를 얻는 방법에 대한 자세한 내용은 AWS 일반 참조의 보안 자격 증명 이해 및 가져오기를 참조하세요. 임시 보안 인증 정보를 사용하는 경우 서명 계산에 보안 토큰도 필요합니다. 자세한 내용은 IAM 사용 설명서의 임시 보안 자격 증명 요청 섹션을 참조하세요.
-
전송 중 데이터 보호 – 전송 중 요청의 변조를 방지하기 위해 요청 요소 중 일부를 사용하여 요청 서명을 계산합니다. Amazon S3는 요청을 수신하면 동일한 요청 요소를 사용하여 서명을 계산합니다. Amazon S3에서 수신한 요청 구성 요소가 서명을 계산하는 데 사용된 구성 요소와 일치하지 않는 경우 Amazon S3는 요청을 거부합니다.
-
요청의 서명된 부분이 재사용되지 않도록 보호 – 요청의 서명된 부분(AWS 서명 사용)은 요청의 타임스탬프로부터 15분까지 유효합니다. 서명된 요청에 액세스할 수 있는 권한 없는 당사자는 이 15분 동안 요청의 유효성에 영향을 주지 않고 요청의 서명되지 않은 부분을 수정할 수 있습니다. 따라서 요청 헤더 및 본문에 서명하고, Amazon S3에 HTTPS 요청을 전송하고, AWS 정책에서
s3:x-amz-content-sha256조건 키(Amazon S3 서명 버전 4 인증 관련 정책 키 참조)를 사용하여 사용자에게 Amazon S3 요청 본문에 서명하도록 요구하여 보호를 극대화하는 것이 좋습니다.
참고
Amazon S3는 모든 AWS 리전에서 AWS 서비스에 대한 인바운드 API 요청을 인증하기 위한 프로토콜인 서명 버전 4를 지원합니다. 현재 2014년 1월 30일 이전에 생성된 AWS 리전이라고 해도 이전 프로토콜인 서명 버전 2에 대한 지원은 계속됩니다. 하지만 2014년 1월 30일 이후에 새롭게 생성된 리전은 모두 서명 버전 4만 지원하며, 이에 따라 새로운 리전에 대한 모든 요청은 서명 버전 4를 이용해야 합니다. AWS 서명 버전 2에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서의 REST 요청 서명 및 인증을 참조하세요.
인증 방법
다음 방법 중 하나를 사용하여 인증 정보를 표현할 수 있습니다.
-
HTTP Authorization 헤더 – HTTP
Authorization헤더를 사용하는 것이 Amazon S3 요청을 인증하는 가장 일반적인 방법입니다. 모든 Amazon S3 REST 작업(POST 요청을 사용한 브라우저 기반 업로드 제외)에는 이 헤더가 필요합니다.Authorization헤더 값과 서명 계산 방법 및 관련 옵션에 대한 자세한 내용은 요청 인증: Authorization 헤더 사용(AWS 서명 버전 4) 섹션을 참조하세요. -
쿼리 문자열 파라미터 - 쿼리 문자열을 사용하여 전체 요청을 URL로 표현할 수 있습니다. 이 경우 쿼리 파라미터를 사용하여 인증 정보를 포함한 요청 정보를 제공합니다. 요청 서명이 URL의 일부이므로 이 URL 유형을 미리 서명된 URL이라고 합니다. 미리 서명된 URL을 사용하여 최대 7일 동안 유효할 수 있는 클릭 가능한 링크를 HTML에 포함할 수 있습니다. 자세한 내용은 요청 인증: 쿼리 파라미터 사용(AWS 서명 버전 4) 섹션을 참조하세요.
Amazon S3는 HTTP POST 요청을 사용하는 브라우저 기반 업로드도 지원합니다. HTTP POST 요청을 사용하면 콘텐츠를 브라우저에서 직접 Amazon S3에 업로드할 수 있습니다. POST 요청 인증에 대한 자세한 내용은 POST를 사용한 브라우저 기반 업로드(AWS 서명 버전 4) 섹션을 참조하세요.
서명 요청 소개
요청에서 보내는 인증 정보에는 서명이 포함되어야 합니다. 서명을 계산하려면 먼저 select 요청 요소를 연결하여 문자열을 생성하는데, 이를 서명할 문자열이라고 합니다. 이후 서명 키를 사용하여 서명할 문자열의 해시 기반 메시지 인증 코드(HMAC)를 계산합니다.
AWS 서명 버전 4에서는 비밀 액세스 키를 사용하여 요청에 서명하지 않습니다. 대신 비밀 액세스 키를 사용하여 서명 키를 파생합니다. 파생된 서명 키는 날짜, 서비스 및 리전에 따라 다릅니다. 다양한 프로그래밍 언어로 서명 키를 추출하는 방법에 대한 자세한 내용은 서명 버전 4용 서명 키 추출 방법 예제를 참조하세요.
다음 다이어그램은 서명을 계산하는 일반적인 프로세스를 보여줍니다.
서명할 문자열은 요청 유형에 따라 다릅니다. 예를 들어 HTTP Authorization 헤더 또는 쿼리 파라미터를 인증에 사용하는 경우 다양한 요청 요소 조합을 사용하여 서명할 문자열을 생성합니다. HTTP POST 요청의 경우 요청의 POST 정책은 서명하는 문자열입니다. 서명할 문자열 계산에 대한 자세한 내용은 이 섹션의 마지막에 제공된 링크를 참조하세요.
서명 키의 경우 다이어그램에는 일련의 계산이 표시되며, 각 단계의 결과가 다음 단계로 전달됩니다. 마지막 단계는 서명 키입니다.
Amazon S3 서버는 인증된 요청을 수신하면 요청에 포함된 인증 정보를 사용하여 서명을 다시 생성합니다. 서명이 일치하면 Amazon S3가 요청을 처리하고, 그렇지 않으면 요청이 거부됩니다.
요청 인증에 대한 자세한 내용은 다음 주제를 참조하세요.