POST ポリシー
HTTP POST を使用して認証されたリクエストを行うために必要なポリシーは、リクエストが満たす必要がある条件を指定する JavaScript Object Notation (JSON) で記述された UTF-8 および base64 でエンコードされたドキュメントです。ポリシードキュメントは、どのように設計するかに応じて、アップロードごと、ユーザーごと、すべてのアップロードに対して、またはニーズに応じたその他の設計にしたがってアクセスの粒度を制御できます。
このセクションでは、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 要素が含まれます。このポリシー例では、2 つの条件一致タイプ (完全一致と starts-with 一致) を使用しています。以下のセクションでは、これらの要素について説明します。
有効期限
expiration 要素は、POST ポリシーの有効期限日を ISO 8601 GMT 日付形式で指定します。例えば、2013-08-01T12:00:00.000Z は、2013 年 8 月 1 日午前 0 時 GMT より後は POST ポリシーが無効になることを指定します。
条件一致
以下は、POST ポリシー条件を指定するために使用できる条件一致タイプを説明する表です (次のセクションで説明)。フォーム内で指定したフォームフィールドごとに少なくとも 1 つの条件を指定する必要がありますが、1 つのフォームフィールドに複数の条件を指定し、より複雑な一致条件を作成することもできます。
| 条件一致タイプ | 説明 |
|---|---|
|
完全一致 |
フォームフィールドの値は、指定された値と一致する必要があります。この例は、ACL が public-read に設定される必要があることを示しています:
この例は、ACL が public-read に設定される必要があることを別の方法で示しています:
|
|
先頭が一致 |
値は、指定された値で始まる必要があります。次の例は、オブジェクトキーが user/user1 で開始する必要があることを示しています。
|
|
カンマ区切りリスト内のコンテンツタイプの一致 |
カンマを含む
次の値は条件を満たします。
次の値は条件を満たしません。
注記
|
|
任意のコンテンツに一致 |
フィールド内の任意のコンテンツを許可するように POST ポリシーを設定するには、
|
|
範囲を指定 |
範囲指定できるフォームフィールドについては、範囲の上限値と下限値をコンマで区切ります。次の例は、1~10 MiB のサイズのファイルを許可します。
|
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-* |
他の この条件は完全一致をサポートします。 |
注記
ツールキットによりフォームフィールドが追加されている場合は (例えば、Flash では filename が追加される)、そのフィールドを POST ポリシードキュメントに追加する必要があります。この機能を管理できる場合は、そのフィールドの機能が Amazon S3 に無視されるようにプレフィックスの x-ignore- をフィールドに追加します。これは、そのフィールドの機能の将来のバージョンには影響しません。
文字のエスケープ
以下の表に、POST ポリシードキュメント内でエスケープする必要のある文字を示します。
| エスケープシーケンス | 説明 |
|---|---|
|
\\ |
バックスラッシュ |
|
\$ |
ドル記号 |
|
\b |
Backspace |
|
\f |
フォームフィード |
|
\n |
改行 |
|
\r |
キャリッジリターン |
|
\t |
水平タブ |
|
\v |
垂直タブ |
|
\u |
すべての Unicode 文字 |
フォームとポリシーを理解し、署名の仕組みを理解したら、POST アップロードの例を試すことができます。署名を計算するには、コードを記述する必要があります。この例では、サンプルフォームと、署名計算をテストするために使用できる POST ポリシーを提供します。詳細については、「例: HTTP POST (AWS 署名バージョン 4) を使用したブラウザベースのアップロード」を参照してください。