HTML フォームの作成 (AWS 署名バージョン 4 を使用)
ユーザーがブラウザ (HTTP POST リクエスト) を使用してコンテンツを Amazon S3 にアップロードできるようにするには、HTML フォームを使用します。HTML フォームは、フォーム宣言とフォームフィールドで構成されます。フォーム宣言には、リクエストの概要情報が含まれています。フォームフィールドには、詳細なリクエスト情報が含まれています。
このセクションでは、HTML フォームの作成方法について説明します。HTTP POST を使用したブラウザベースのアップロードの実例と、リクエスト認証に関連する署名計算については、「例: HTTP POST (AWS 署名バージョン 4) を使用したブラウザベースのアップロード」を参照してください。
フォームとポリシーは UTF-8 エンコーディングされている必要があります。content 属性に charset=UTF-8 を指定することで、フォームに UTF-8 エンコーディングを適用できます。HTML 見出しの UTF-8 エンコードの例を次に示します。
<html> <head> ... <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> ... </head> <body>
リクエストヘッダーの UTF-8 エンコードの例を次に示します。
Content-Type: text/html; charset=UTF-8
注記
フォームデータと境界 (ファイルのコンテンツは除く) は 20 KB を超えることはできません。
HTML フォーム宣言
HTML フォーム宣言には、次の 3 つの属性があります。
-
action– リクエストを処理する URL を指定します。これはバケットの URL に設定されていなければなりません。例えば、バケットの名前がexamplebucketの場合、URL はhttp://examplebucket.s3.amazonaws.com/です。注記
キー名はフォームフィールドで指定されます。
-
method– メソッドは POST である必要があります。 -
enctype– エンクロージャタイプ (enctype) は、ファイルアップロードとテキストエリアアップロードの両方に対して、multipart/form-data が設定されていなければなりません。enctypeの詳細については、RFC 1867を参照してください。
これは、バケット examplebucket のフォーム宣言です。
<form action="http://examplebucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
HTML フォームフィールド
以下の表に、フォーム内で使用できるフィールドのリストを示します。特に、リクエストの認証に使用できる署名フィールドがあります。署名計算アルゴリズム (x-amz-algorithm)、署名キーの生成に使用した認証情報スコープ (x-amz-credential)、および署名の計算に使用した日付 (x-amz-date) を指定するフィールドがあります。Amazon S3 はこの情報を使用して署名を再作成します。署名が一致すると、Amazon S3 はリクエストを処理します。
注記
変数 ${filename} は、ユーザーによって指定されたファイル名に自動的に置き換えられ、すべてのフォームフィールドで認識されます。ブラウザまたはクライアントがファイルへの完全または部分的なパスを提供した場合、最後のスラッシュ (/) またはバックスラッシュ (\) 以降のテキストのみが使用されます (例えば、C:\Program
Files\directory1\file.txt は file.txt として解釈されます)。ファイルまたはファイル名が指定されていない場合、変数は空の文字列に置き換えられます。
policy 要素など、認証されたリクエストに必要な要素を指定しない場合、リクエストは匿名と見なされ、パブリック読み取りおよび書き込み用にバケットを設定している場合にのみ成功します。
| 要素名 | 説明 | 必須 |
|---|---|---|
acl |
Amazon S3 のアクセスコントロールリスト (ACL)。無効な ACL が指定されている場合、Amazon S3 はリクエストを拒否します。ACL の詳細については、「Amazon S3 ACL の使用」を参照してください。 タイプ: 文字列 デフォルト: プライベート 有効な値: |
いいえ |
Cache-Control
|
REST 固有ヘッダー。詳細については、「PutObject」を参照してください。 |
いいえ |
key |
アップロードされたオブジェクトのキーの名前。 ユーザーによって指定されたファイル名を使用するには、${filename} 変数を使用します。例えば、ファイル 詳細については、「Amazon Simple Storage Service ユーザーガイド」の「オブジェクトメタデータの使用」を参照してください。 |
はい |
policy |
リクエストで許可されているものについて説明する base64 でエンコードされたセキュリティポリシー。認証されたリクエストには、ポリシーが必要です。 セキュリティポリシーがないリクエストは匿名と見なされ、誰でも書き込むことができるバケットでのみ動作します。 |
認証されたリクエストに必須 |
success_action_redirect |
アップロードが成功したときにクライアントがリダイレクトされる URL。
アップロードが失敗した場合、Amazon S3 はエラーを返し、ユーザーを別の URL にリダイレクトしません。 |
いいえ |
success_action_status |
アップロードが正常に行われたとき、 有効な値は、 値が 200 または 204 に設定されている場合、Amazon S3 は空のドキュメントとステータスコードを返します。 値が 201 に設定されている場合、Amazon S3 は XML ドキュメントとステータスコード 201 を返します。XML ドキュメントの内容については、「POST Object」を参照してください。 値が設定されていないか無効である場合は、Amazon S3 は空のドキュメントとステータスコード 204 を返します。 注記Adobe Flash Player のバージョンによっては、本文が空の HTTP レスポンスが適切に処理されないことがあります。Adobe Flash でアップロードをサポートするには、 |
いいえ |
x-amz-algorithm |
リクエストの認証に使用される署名アルゴリズム。AWS 署名バージョン 4 の場合、値は このフィールドは、ポリシードキュメントがリクエストに含まれる場合に必要です。 |
認証されたリクエストに必須 |
x-amz-credential |
このフィールドは、アクセスキー ID の他に、署名が有効なリージョンおよびサービスを特定するスコープも指定します。これは、署名計算の署名キーの計算に使用したスコープと同じである必要があります。 これは、次のような形式の文字列です。
例えば、次のようになります。
Amazon S3 の場合、aws-service 文字列は s3 です。Amazon S3 aws-region 文字列のリストについては、「AWS 全般のリファレンス」の「リージョンとエンドポイント」を参照してください。これは、ポリシードキュメントがリクエストに含まれる場合に必要です。 |
認証されたリクエストに必須 |
x-amz-date |
ISO8601 形式の日付値です。例えば、 署名キーの作成に使用したのと同じ日付です (例: 20130728)。これは、署名したポリシー ( これは、ポリシードキュメントがリクエストに含まれる場合に必要です。 |
認証されたリクエストに必須 |
x-amz-security-token |
Amazon DevPay およびセッション認証情報で使用されるセキュリティトークン リクエストで Amazon DevPay を使用する場合は、製品トークン用とユーザートークン用の 2 つの リクエストでセッション認証情報が使用される場合は、単一の |
いいえ |
x-amz-signature |
(AWS 署名バージョン 4) セキュリティポリシーの HMAC-SHA256 ハッシュ。 このフィールドは、ポリシードキュメントがリクエストに含まれる場合に必要です。 |
認証されたリクエストに必須 |
x-amz-meta-* |
このプレフィックスで始まるフィールド名はユーザー定義メタデータです。それぞれが保存され、キーと値のペアのセットとして返されます。Amazon S3 はユーザー定義メタデータを検証または解釈しません。詳細については、「PutObject」を参照してください。 |
いいえ |
x-amz-* |
他の |
いいえ |
file |
ファイルまたはテキストコンテンツ。 ファイルまたはコンテンツはフォームの最後のフィールドでなければなりません。 複数のファイルを一度にアップロードすることはできません。 |
はい |
条件付き項目は認証されたリクエストに必要であり、匿名リクエストではオプションです。
フォームの作成方法がわかったので、次に署名できるセキュリティポリシーを作成できます。詳細については、「POST ポリシー」を参照してください。