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 정책에는 항상 expiration 및 conditions 요소가 포함됩니다. 이 예제 정책은 두 가지 조건 매칭 유형(정확한 매칭 및 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로 설정되어야 함을 알 수 있습니다.
|
|
Starts With(다음으로 시작) |
값이 지정된 값으로 시작해야 합니다. 이 예제는 객체 키가 user/user1로 시작되어야 한다는 것을 나타냅니다.
|
|
쉼표로 구분된 목록의 Content-Types 매칭 |
다음 값은 조건을 통과합니다.
다음 값은 조건을 통과하지 못합니다.
참고
|
|
내용 무관 매칭 |
양식 필드 내에 모든 내용을 허용하도록 POST 정책을 구성하려면 빈 값("")이 포함된
|
|
범위 지정 |
범위를 허용하는 양식 필드의 경우 상한 및 하한을 쉼표로 구분합니다. 이 예제에서는 1~10MiB의 파일 크기가 허용됩니다.
|
POST 정책에서 지원되는 특정 조건은 조건 섹션에 설명되어 있습니다.
조건
POST 정책의 conditions는 객체 배열이며, 각 객체는 요청을 검증하는 데 사용됩니다. 이러한 조건을 사용하여 요청에서 허용되는 항목을 제한할 수 있습니다. 예를 들어 위의 정책 조건에는 다음이 필요합니다.
-
요청은
johnsmith버킷 이름을 지정해야 합니다. -
객체 키 이름에는
user/eric접두사가 있어야 합니다. -
객체 ACL은
public-read로 설정되어야 합니다.
양식에서 지정하는 각 양식 필드(x-amz-signature, file, policy 및 x-ignore- 접두사가 있는 필드 이름 제외)가 조건 목록에 나타나야 합니다.
참고
POST 정책을 검증하기 전에 양식 내의 모든 변수가 확장됩니다. 따라서 모든 조건 매칭은 확장된 양식 필드를 기준으로 해야 합니다. 객체 키 이름을 특정 접두사(user/user1)로 제한한다고 가정해 보겠습니다. 이 경우 키 양식 필드를 user/user1/${filename}으로 설정합니다. POST 정책은 [
"starts-with", "$key", "user/user1/" ]이어야 합니다([
"starts-with", "$key", "user/user1/${filename}" ]을 입력하지 마세요). 자세한 내용은 조건 매칭 섹션을 참조하세요.
다음 표에서는 정책 문서 조건을 설명합니다.
| 요소 이름 | 설명 |
|---|---|
acl |
양식 제출에 사용해야 하는 ACL 값을 지정합니다. 이 조건은 다음 섹션에서 설명하는 정확한 매칭 및 |
bucket |
허용되는 버킷 이름을 지정합니다. 이 조건은 정확한 매칭 조건 일치 유형을 지원합니다. |
content-length-range |
업로드된 콘텐츠의 허용 가능한 최소 및 최대 크기입니다. 이 조건은 |
Cache-Control
|
REST 지정 헤더입니다. 자세한 내용은 POST Object 섹션을 참조하세요. 이 조건은 정확한 매칭 및 |
key |
업로드된 객체의 허용 가능한 키 이름 또는 접두사입니다. 이 조건은 정확한 매칭 및 |
success_action_redirect
|
업로드 완료 시 클라이언트가 리디렉션되는 URL입니다. 이 조건은 정확한 매칭 및 |
success_action_status |
이 조건은 정확한 매칭을 지원합니다. |
x-amz-algorithm |
서명 계산 중에 사용해야 하는 서명 알고리즘입니다. AWS 서명 버전 4의 경우 값은 이 조건은 정확한 매칭을 지원합니다. |
x-amz-credential |
서명 계산에 사용한 자격 증명입니다. 서명이 유효한 리전 및 서비스를 식별하는 액세스 키 ID 및 범위 정보를 제공합니다. 이는 서명 계산을 위한 서명 키 계산에 사용한 것과 동일한 범위여야 합니다. 이는 다음 형식의 문자열입니다.
예제:
Amazon S3의 경우 aws-service 문자열은 이 조건은 정확한 매칭을 지원합니다. |
x-amz-date |
ISO8601 형식 문자열에 지정된 날짜 값입니다. 예를 들어 요청과 함께 POST 정책 문서가 포함되는 경우 이 필드는 필수입니다. 이 조건은 정확한 매칭을 지원합니다. |
x-amz-security-token |
Amazon DevPay 보안 토큰입니다. Amazon DevPay를 사용하는 각 요청에는 제품 토큰과 사용자 토큰에 하나씩 2개의 Amazon DevPay에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서의 DevPay 사용을 참조하세요. |
x-amz-meta-* |
사용자 지정 메타데이터입니다. 이 조건은 정확한 매칭 및 |
x-amz-* |
POST 객체를 참조하세요(다른 이 조건은 정확한 매칭을 지원합니다. |
참고
도구 키트가 양식 필드를 더 추가하는 경우(예: Flash에서 filename 추가) POST 정책 문서에도 추가해야 합니다. 이 기능을 제어할 수 있는 경우 해당 필드에 x-ignore- 접두사를 붙여야 Amazon S3이 해당 기능을 무시하고 나중 버전의 기능에 영향을 주지 않습니다.
문자 이스케이프
다음 표에서는 POST 정책 문서 내에서 이스케이프되어야 하는 문자들을 설명합니다.
| 이스케이프 시퀀스 | 설명 |
|---|---|
|
\\ |
백슬래시 |
|
\$ |
달러 기호 |
|
\b |
백스페이스 |
|
\f |
용지 공급 |
|
\n |
줄 바꿈 |
|
\r |
캐리지 리턴 |
|
\t |
가로 탭 |
|
\v |
세로 탭 |
|
\u |
모든 유니코드 문자 |
이제 양식 및 정책을 숙지하고 서명 작동 방식을 이해했으므로 POST 업로드 예제를 시도해 볼 수 있습니다. 서명을 계산하려면 코드를 작성해야 합니다. 이 예제에서는 샘플 양식과 서명 계산을 테스트하는 데 사용할 수 있는 POST 정책을 제공합니다. 자세한 내용은 예제: HTTP POST를 사용한 브라우저 기반 업로드(AWS 서명 버전 4 사용) 섹션을 참조하세요.