View a markdown version of this page

POST ポリシー - Amazon Simple Storage Service

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" }

この例は、ACL が public-read に設定される必要があることを別の方法で示しています:

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

先頭が一致

値は、指定された値で始まる必要があります。次の例は、オブジェクトキーが user/user1 で開始する必要があることを示しています。

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

カンマ区切りリスト内のコンテンツタイプの一致

カンマを含む 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~10 MiB のサイズのファイルを許可します。

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

POST ポリシーでサポートされている特定の条件については、「条件」を参照してください。

条件

POST ポリシーの conditions はオブジェクトの配列であり、それぞれがリクエストの検証に使用されます。これらの条件を使用して、リクエストで許可される内容を制限できます。例えば、前述のポリシー条件には以下が必要です。

  • リクエストでは、johnsmith バケット名を指定する必要があります。

  • オブジェクトキー名には user/eric プレフィックスが必要です。

  • オブジェクト ACL は public-read に設定する必要があります。

フォームで指定する各フォームフィールド (x-amz-signaturefilepolicy、および x-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-*

他の x-amz-* ヘッダーについては、「POST Object」(POST Object) を参照してください。

この条件は完全一致をサポートします。

注記

ツールキットによりフォームフィールドが追加されている場合は (例えば、Flash では filename が追加される)、そのフィールドを POST ポリシードキュメントに追加する必要があります。この機能を管理できる場合は、そのフィールドの機能が Amazon S3 に無視されるようにプレフィックスの x-ignore- をフィールドに追加します。これは、そのフィールドの機能の将来のバージョンには影響しません。

文字のエスケープ

以下の表に、POST ポリシードキュメント内でエスケープする必要のある文字を示します。

エスケープシーケンス 説明

\\

バックスラッシュ

\$

ドル記号

\b

Backspace

\f

フォームフィード

\n

改行

\r

キャリッジリターン

\t

水平タブ

\v

垂直タブ

\uxxxx

すべての Unicode 文字

フォームとポリシーを理解し、署名の仕組みを理解したら、POST アップロードの例を試すことができます。署名を計算するには、コードを記述する必要があります。この例では、サンプルフォームと、署名計算をテストするために使用できる POST ポリシーを提供します。詳細については、「例: HTTP POST (AWS 署名バージョン 4) を使用したブラウザベースのアップロード」を参照してください。