View a markdown version of this page

POST 정책 - Amazon Simple Storage Service

POST 정책

HTTP POST를 사용하여 인증된 요청을 수행하는 데 필요한 정책은 요청이 충족해야 하는 조건을 지정하는, UTF-8 및 Base64로 인코딩된 JavaScript Object Notation(JSON) 형식 문서입니다. 정책 문서를 디자인하는 방법에 따라 업로드 단위, 사용자 단위, 모든 업로드에 대해 또는 필요에 맞는 다른 디자인에 따라 액세스 세분성을 제어할 수 있습니다.

이 섹션에서는 POST 정책에 대해 설명합니다. POST 정책을 사용한 예제 서명 계산은 예제: HTTP POST를 사용한 브라우저 기반 업로드(AWS 서명 버전 4 사용) 섹션을 참조하세요.

참고

정책 문서는 선택 사항이지만 요청에 허용되는 항목을 제어하려면 정책 문서를 사용하는 것이 좋습니다. 버킷을 공개적으로 쓰기 가능하게 만들면 버킷에 쓸 수 있는 사용자를 전혀 제어할 수 없습니다.

다음은 POST 정책 문서의 예입니다.

{ "expiration": "2007-12-01T12:00:00.000Z", "conditions": [ {"acl": "public-read" }, {"bucket": "johnsmith" }, ["starts-with", "$key", "user/eric/"], ] }

POST 정책에는 항상 expirationconditions 요소가 포함됩니다. 이 예제 정책은 두 가지 조건 매칭 유형(정확한 매칭 및 starts-with 매칭)을 사용합니다. 다음 섹션에서는 이러한 요소에 대해 설명합니다.

Expiration

expiration 요소는 POST 정책의 만료 날짜 및 시간을 ISO8601 GMT 날짜 형식으로 지정합니다. 예를 들어 2013-08-01T12:00:00.000Z는 2013년 8월 1일 자정 이후(GMT 기준)에는 POST 정책이 유효하지 않도록 지정합니다.

조건 매칭

다음은 POST 정책 조건(다음 섹션에서 설명)을 지정하는 데 사용할 수 있는 조건 매칭 유형을 설명하는 표입니다. 양식에 지정하는 양식 필드마다 조건을 적어도 하나씩 지정해야 하지만 양식 필드 하나에 여러 조건을 지정하면 좀 더 복잡한 매칭 조건을 만들 수 있습니다.

조건 일치 유형 설명

완전 매치

양식 필드 값이 지정된 값과 일치해야 합니다. 이 예제는 ACL이 public-read로 설정되어야 한다는 것을 나타냅니다.

{"acl": "public-read" }

이 예제를 통해 ACL이 public-read로 설정되어야 함을 알 수 있습니다.

[ "eq", "$acl", "public-read" ]

Starts With(다음으로 시작)

값이 지정된 값으로 시작해야 합니다. 이 예제는 객체 키가 user/user1로 시작되어야 한다는 것을 나타냅니다.

["starts-with", "$key", "user/user1/"]

쉼표로 구분된 목록의 Content-Types 매칭

starts-with 조건에서 쉼표가 포함된 Content-Types 값은 목록으로 해석됩니다. 전체 조건이 통과하려면 목록의 각 값이 조건을 충족해야 합니다. 예를 들어, 조건이 다음과 같은 경우

["starts-with", "$Content-Type", "image/"]

다음 값은 조건을 통과합니다.

"image/jpg,image/png,image/gif"

다음 값은 조건을 통과하지 못합니다.

["image/jpg,text/plain"]
참고

Content-Type 이외의 데이터 요소는 쉼표의 존재 여부에 관계없이 문자열로 처리됩니다.

내용 무관 매칭

양식 필드 내에 모든 내용을 허용하도록 POST 정책을 구성하려면 빈 값("")이 포함된 starts-with를 사용합니다. 이 예제에서는 success_action_redirect에 모든 값을 허용합니다.

["starts-with", "$success_action_redirect", ""]

범위 지정

범위를 허용하는 양식 필드의 경우 상한 및 하한을 쉼표로 구분합니다. 이 예제에서는 1~10MiB의 파일 크기가 허용됩니다.

["content-length-range", 1048576, 10485760]

POST 정책에서 지원되는 특정 조건은 조건 섹션에 설명되어 있습니다.

조건

POST 정책의 conditions는 객체 배열이며, 각 객체는 요청을 검증하는 데 사용됩니다. 이러한 조건을 사용하여 요청에서 허용되는 항목을 제한할 수 있습니다. 예를 들어 위의 정책 조건에는 다음이 필요합니다.

  • 요청은 johnsmith 버킷 이름을 지정해야 합니다.

  • 객체 키 이름에는 user/eric 접두사가 있어야 합니다.

  • 객체 ACL은 public-read로 설정되어야 합니다.

양식에서 지정하는 각 양식 필드(x-amz-signature, file, policyx-ignore- 접두사가 있는 필드 이름 제외)가 조건 목록에 나타나야 합니다.

참고

POST 정책을 검증하기 전에 양식 내의 모든 변수가 확장됩니다. 따라서 모든 조건 매칭은 확장된 양식 필드를 기준으로 해야 합니다. 객체 키 이름을 특정 접두사(user/user1)로 제한한다고 가정해 보겠습니다. 이 경우 키 양식 필드를 user/user1/${filename}으로 설정합니다. POST 정책은 [ "starts-with", "$key", "user/user1/" ]이어야 합니다([ "starts-with", "$key", "user/user1/${filename}" ]을 입력하지 마세요). 자세한 내용은 조건 매칭 섹션을 참조하세요.

다음 표에서는 정책 문서 조건을 설명합니다.

요소 이름 설명
acl

양식 제출에 사용해야 하는 ACL 값을 지정합니다.

이 조건은 다음 섹션에서 설명하는 정확한 매칭 및 starts-with 조건 일치 유형을 지원합니다.

bucket

허용되는 버킷 이름을 지정합니다.

이 조건은 정확한 매칭 조건 일치 유형을 지원합니다.

content-length-range

업로드된 콘텐츠의 허용 가능한 최소 및 최대 크기입니다.

이 조건은 content-length-range 조건 일치 유형을 지원합니다.

Cache-Control

Content-Type

Content-Disposition

Content-Encoding

Expires

REST 지정 헤더입니다. 자세한 내용은 POST Object 섹션을 참조하세요.

이 조건은 정확한 매칭 및 starts-with 조건 일치 유형을 지원합니다.

key

업로드된 객체의 허용 가능한 키 이름 또는 접두사입니다.

이 조건은 정확한 매칭 및 starts-with 조건 일치 유형을 지원합니다.

success_action_redirect

redirect

업로드 완료 시 클라이언트가 리디렉션되는 URL입니다.

이 조건은 정확한 매칭 및 starts-with 조건 일치 유형을 지원합니다.

success_action_status

success_action_redirect를 지정하지 않을 경우 업로드 완료 시 클라이언트에 반환되는 상태 코드입니다.

이 조건은 정확한 매칭을 지원합니다.

x-amz-algorithm

서명 계산 중에 사용해야 하는 서명 알고리즘입니다. AWS 서명 버전 4의 경우 값은 AWS4-HMAC-SHA256입니다.

이 조건은 정확한 매칭을 지원합니다.

x-amz-credential

서명 계산에 사용한 자격 증명입니다. 서명이 유효한 리전 및 서비스를 식별하는 액세스 키 ID 및 범위 정보를 제공합니다. 이는 서명 계산을 위한 서명 키 계산에 사용한 것과 동일한 범위여야 합니다.

이는 다음 형식의 문자열입니다.

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

예제:

AKIAIOSFODNN7EXAMPLE/20130728/us-east-1/s3/aws4_request

Amazon S3의 경우 aws-service 문자열은 s3입니다. Amazon S3 aws-region 문자열의 목록은 AWS 일반 참조리전 및 엔드포인트를 참조하세요. 요청과 함께 POST 정책 문서가 포함되는 경우 이 필드는 필수입니다.

이 조건은 정확한 매칭을 지원합니다.

x-amz-date

ISO8601 형식 문자열에 지정된 날짜 값입니다. 예를 들어 20130728T000000Z입니다. 이 날짜는 서명 계산을 위한 서명 키를 생성할 때 사용한 날짜와 동일해야 합니다.

요청과 함께 POST 정책 문서가 포함되는 경우 이 필드는 필수입니다.

이 조건은 정확한 매칭을 지원합니다.

x-amz-security-token

Amazon DevPay 보안 토큰입니다.

Amazon DevPay를 사용하는 각 요청에는 제품 토큰과 사용자 토큰에 하나씩 2개의 x-amz-security-token 양식 필드가 필요합니다. 따라서 해당 값을 쉼표로 구분해야 합니다. 예를 들어, 사용자 토큰이 eW91dHViZQ==이고 제품 토큰이 b0hnNVNKWVJIQTA=인 경우 POST 정책 항목을 { "x-amz-security-token": "eW91dHViZQ==,b0hnNVNKWVJIQTA=" }로 설정합니다.

Amazon DevPay에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서DevPay 사용을 참조하세요.

x-amz-meta-*

사용자 지정 메타데이터입니다.

이 조건은 정확한 매칭 및 starts-with 조건 일치 유형을 지원합니다.

x-amz-*

POST 객체를 참조하세요(다른 x-amz-* 헤더는 POST Object 참조).

이 조건은 정확한 매칭을 지원합니다.

참고

도구 키트가 양식 필드를 더 추가하는 경우(예: Flash에서 filename 추가) POST 정책 문서에도 추가해야 합니다. 이 기능을 제어할 수 있는 경우 해당 필드에 x-ignore- 접두사를 붙여야 Amazon S3이 해당 기능을 무시하고 나중 버전의 기능에 영향을 주지 않습니다.

문자 이스케이프

다음 표에서는 POST 정책 문서 내에서 이스케이프되어야 하는 문자들을 설명합니다.

이스케이프 시퀀스 설명

\\

백슬래시

\$

달러 기호

\b

백스페이스

\f

용지 공급

\n

줄 바꿈

\r

캐리지 리턴

\t

가로 탭

\v

세로 탭

\uxxxx

모든 유니코드 문자

이제 양식 및 정책을 숙지하고 서명 작동 방식을 이해했으므로 POST 업로드 예제를 시도해 볼 수 있습니다. 서명을 계산하려면 코드를 작성해야 합니다. 이 예제에서는 샘플 양식과 서명 계산을 테스트하는 데 사용할 수 있는 POST 정책을 제공합니다. 자세한 내용은 예제: HTTP POST를 사용한 브라우저 기반 업로드(AWS 서명 버전 4 사용) 섹션을 참조하세요.