View a markdown version of this page

요청 인증: Authorization 헤더 사용(AWS 서명 버전 4) - Amazon Simple Storage Service

요청 인증: Authorization 헤더 사용(AWS 서명 버전 4)

개요

HTTP Authorization 헤더를 사용하는 것이 인증 정보를 제공하는 가장 일반적인 방법입니다. POST 요청 및 쿼리 파라미터를 사용하여 서명된 요청을 제외하고 모든 Amazon S3 작업은 Authorization 요청 헤더를 사용하여 인증 정보를 제공합니다.

다음은 Authorization 헤더 값의 예시입니다. 가독성을 위해 이 예시에 줄바꿈이 추가됩니다.

Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024

다음 표에서는 앞선 예제에 있는 Authorization 헤더 값의 다양한 구성 요소를 설명합니다.

구성 요소 설명
AWS4-HMAC-SHA256

서명을 계산하는 데 사용된 알고리즘입니다. 인증에 AWS 서명 버전 4를 사용하는 경우 이 값을 제공해야 합니다.

문자열은 AWS 서명 버전 4(AWS4) 및 서명 알고리즘(HMAC-SHA256)을 지정합니다.

Credential

액세스 키 ID 및 범위 정보(날짜, 리전 및 서명 계산에 사용된 서비스 포함).

이 문자열의 형식은 다음과 같습니다.

<your-access-key-id>/<date>/<aws-region>/<aws-service>/aws4_request

위치:

  • <date> 값은 YYYYMMDD 형식을 사용하여 지정됩니다.

  • <aws-service> 값은 Amazon S3에 요청을 전송하는 경우 s3입니다.

SignedHeaders

Signature 계산에 사용한 세미콜론으로 구분된 요청 헤더의 목록입니다. 목록에는 헤더 이름만 포함되며, 헤더 이름은 소문자여야 합니다. 예제:

host;range;x-amz-date
Signature 64개의 소문자 16진수 문자로 표현되는 256비트 서명. 예제:
fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
서명 계산은 페이로드를 전송하기 위해 선택한 옵션에 따라 달라집니다.

서명 계산은 요청 페이로드를 전송하기 위해 선택한 옵션에 따라 달라집니다. S3는 다음 옵션을 지원합니다.

  • 페이로드를 단일 청크로 전송 – 이 경우 다음과 같은 서명 계산 옵션이 있습니다.

    • 서명된 페이로드 옵션 – 선택적으로 전체 페이로드 체크섬을 계산하여 서명 계산에 포함할 수 있습니다. 이렇게 하면 보안이 강화되지만 페이로드를 두 번 읽거나 메모리에 버퍼링해야 합니다.

      예를 들어 파일을 업로드하려면 먼저 파일을 읽고 서명 계산을 위해 페이로드 해시를 계산한 다음 요청을 생성할 때 전송을 위해 다시 읽어야 합니다. 더 작은 페이로드의 경우 이 접근 방식이 유리할 수 있습니다. 그러나 대용량 파일의 경우 파일을 두 번 읽는 것이 비효율적일 수 있으므로 대신 데이터를 청크로 업로드해야 할 수 있습니다.

      보안을 강화하기 위해 페이로드 체크섬을 포함할 것을 권장합니다.

    • 서명되지 않은 페이로드 옵션 – 서명 계산에 페이로드 체크섬을 포함하지 마세요.

    서명을 계산하고 Authorization 헤더 값을 구성하는 단계별 지침은 Authorization 헤더에 대한 서명 계산: 페이로드를 단일 청크로 전송(AWS 서명 버전 4) 섹션을 참조하세요.

  • 여러 청크로 페이로드 전송(청크 업로드) – 이 경우 페이로드를 청크로 전송합니다. 페이로드 크기에 관계없이 페이로드를 청크 단위로 전송할 수 있습니다.

    페이로드를 청크로 분할할 수 있습니다. 청크는 고정 또는 가변 크기일 수 있습니다. 데이터를 청크로 업로드하면 전체 페이로드를 읽고 서명을 계산하지 않아도 됩니다. 대신 첫 번째 청크에서 요청 헤더만 사용하는 시드 서명을 계산합니다. 두 번째 청크에는 첫 번째 청크에 대한 서명이 포함되고, 이후의 각 청크는 바로 앞선 청크에 대한 서명이 포함됩니다. 업로드가 완료되면 페이로드의 마지막 청크에 대한 서명이 포함된 0바이트 데이터의 최종 청크를 전송합니다. 자세한 내용은 Authorization 헤더에 대한 서명 계산: 페이로드를 여러 청크로 전송(청크 업로드)(AWS 서명 버전 4) 섹션을 참조하세요.

요청에 서명할 때 AWS 서명 버전 4 또는 AWS 서명 버전 4A를 사용할 수 있습니다. 둘 사이의 주요 차이점은 서명 계산 방법에 따라 결정됩니다. AWS 서명 버전 4A의 경우 서명에 리전별 정보가 포함되지 않고 AWS4-ECDSA-P256-SHA256 알고리즘을 사용하여 계산됩니다.

이러한 옵션 외에도 요청에 트레일러를 포함할 수 있습니다. 요청에 트레일러를 포함하려면 x-amz-content-sha256을 적절한 값으로 설정하여 헤더에서 지정해야 합니다. 후행 헤더를 사용하는 경우 헤더에 x-amz-trailer를 포함하고 후행 헤더 이름을 쉼표로 구분된 목록의 문자열로 지정해야 합니다. 모든 후행 헤더는 최종 청크 뒤에 기록됩니다. 데이터를 여러 청크로 업로드하는 경우 후행 헤더를 전송하기 전에 0바이트 데이터가 포함된 최종 청크를 전송해야 합니다.

요청을 전송할 때 다음 값 중 하나가 포함된 x-amz-content-sha256 헤더를 추가하여 서명 계산에서 위의 옵션 중 무엇을 선택했는지 Amazon S3에 알려야 합니다.

헤더 값 설명

실제 페이로드 체크섬 값

이 값은 객체의 실제 체크섬이며 데이터를 단일 청크로 업로드할 때만 가능합니다.

UNSIGNED-PAYLOAD

객체를 서명되지 않은 단일 청크로 업로드할 때 사용합니다.

STREAMING-UNSIGNED-PAYLOAD-TRAILER

서명되지 않은 페이로드를 여러 청크로 전송할 때 사용합니다. 이 경우 청크가 업로드된 후 후행 헤더도 있습니다.

STREAMING-AWS4-HMAC-SHA256-PAYLOAD

페이로드를 여러 청크로 전송하고 AWS4-HMAC-SHA256을 사용하여 청크에 서명할 때 사용합니다. 그러면 SigV4 서명이 생성됩니다.

STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER

페이로드를 여러 청크로 전송하고 AWS4-HMAC-SHA256을 사용하여 청크에 서명할 때 사용합니다. 그러면 SigV4 서명이 생성됩니다. 또한 청크의 다이제스트가 후행 헤더로 포함됩니다.

STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD

페이로드를 여러 청크로 전송하고 AWS4-ECDSA-P256-SHA256을 사용하여 청크에 서명할 때 사용합니다. 그러면 SigV4A 서명이 생성됩니다.

STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD-TRAILER

페이로드를 여러 청크로 전송하고 AWS4-ECDSA-P256-SHA256을 사용하여 청크에 서명할 때 사용합니다. 그러면 SigV4A 서명이 생성됩니다. 또한 청크의 다이제스트가 후행 헤더로 포함됩니다.

Amazon S3는 요청을 수신하면 Authorization 헤더 및 date 헤더의 정보를 사용하여 서명할 문자열을 다시 생성합니다. 그런 다음 인증 서비스를 사용하여 서명이 일치하는지 확인합니다. 요청 날짜는 HTTP Date 또는 x-amz-date 헤더를 사용하여 지정할 수 있습니다. 두 헤더가 모두 있는 경우 x-amz-date가 우선합니다.

서명이 일치하면 Amazon S3가 요청을 처리하고, 그렇지 않으면 요청이 실패합니다.

자세한 내용은 다음 항목을 참조하세요.

Authorization 헤더에 대한 서명 계산: 페이로드를 단일 청크로 전송(AWS 서명 버전 4)

Authorization 헤더에 대한 서명 계산: 페이로드를 여러 청크로 전송(청크 업로드)(AWS 서명 버전 4)

후행 헤더에 대한 서명 계산(청크 업로드)(AWS 서명 버전 4)