View a markdown version of this page

HTML フォームの作成 (AWS 署名バージョン 4 を使用) - Amazon Simple Storage Service

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.txtfile.txt として解釈されます)。ファイルまたはファイル名が指定されていない場合、変数は空の文字列に置き換えられます。

policy 要素など、認証されたリクエストに必要な要素を指定しない場合、リクエストは匿名と見なされ、パブリック読み取りおよび書き込み用にバケットを設定している場合にのみ成功します。

要素名 説明 必須
acl

Amazon S3 のアクセスコントロールリスト (ACL)。無効な ACL が指定されている場合、Amazon S3 はリクエストを拒否します。ACL の詳細については、「Amazon S3 ACL の使用」を参照してください。

タイプ: 文字列

デフォルト: プライベート

有効な値: private | public-read | public-read-write | aws-exec-read | authenticated-read | bucket-owner-read | bucket-owner-full-control

いいえ

Cache-Control

Content-Type

Content-Disposition

Content-Encoding

Expires

REST 固有ヘッダー。詳細については、「PutObject」を参照してください。

いいえ

key

アップロードされたオブジェクトのキーの名前。

ユーザーによって指定されたファイル名を使用するには、${filename} 変数を使用します。例えば、ファイル photo1.jpg をアップロードし、キー名として /user/user1/${filename} を指定した場合、ファイルは /user/user1/photo1.jpg として保存されます。

詳細については、「Amazon Simple Storage Service ユーザーガイド」の「オブジェクトメタデータの使用」を参照してください。

はい

policy

リクエストで許可されているものについて説明する base64 でエンコードされたセキュリティポリシー。認証されたリクエストには、ポリシーが必要です。

セキュリティポリシーがないリクエストは匿名と見なされ、誰でも書き込むことができるバケットでのみ動作します。

認証されたリクエストに必須

success_action_redirect

アップロードが成功したときにクライアントがリダイレクトされる URL。

success_action_redirect が指定されていない場合、またはAmazon S3 が URL を解釈できない場合、Amazon S3 は success_action_status フィールドで指定されている空のドキュメントタイプを返します。

アップロードが失敗した場合、Amazon S3 はエラーを返し、ユーザーを別の URL にリダイレクトしません。

いいえ

success_action_status

アップロードが正常に行われたとき、success_action_redirect が指定されていない場合にクライアントに返されるステータスコード。

有効な値は、200201、または 204 (デフォルト) です。

値が 200 または 204 に設定されている場合、Amazon S3 は空のドキュメントとステータスコードを返します。

値が 201 に設定されている場合、Amazon S3 は XML ドキュメントとステータスコード 201 を返します。XML ドキュメントの内容については、「POST Object」を参照してください。

値が設定されていないか無効である場合は、Amazon S3 は空のドキュメントとステータスコード 204 を返します。

注記

Adobe Flash Player のバージョンによっては、本文が空の HTTP レスポンスが適切に処理されないことがあります。Adobe Flash でアップロードをサポートするには、success_action_status を 201 に設定することをお勧めします。

いいえ

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 全般のリファレンス」の「リージョンとエンドポイント」を参照してください。これは、ポリシードキュメントがリクエストに含まれる場合に必要です。

認証されたリクエストに必須

x-amz-date

ISO8601 形式の日付値です。例えば、20130728T000000Z です。

署名キーの作成に使用したのと同じ日付です (例: 20130728)。これは、署名したポリシー (x-amz-date) で指定した値と同じである必要があります。

これは、ポリシードキュメントがリクエストに含まれる場合に必要です。

認証されたリクエストに必須

x-amz-security-token

Amazon DevPay およびセッション認証情報で使用されるセキュリティトークン

リクエストで Amazon DevPay を使用する場合は、製品トークン用とユーザートークン用の 2 つの x-amz-security-token フォームフィールドが必要です。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「DevPay の使用」を参照してください。

リクエストでセッション認証情報が使用される場合は、単一の x-amz-security-token フォームが必要です。詳細については、「IAM ユーザーガイド」の「Requesting Temporary Security Credentials」を参照してください。

いいえ

x-amz-signature

(AWS 署名バージョン 4) セキュリティポリシーの HMAC-SHA256 ハッシュ。

このフィールドは、ポリシードキュメントがリクエストに含まれる場合に必要です。

認証されたリクエストに必須

x-amz-meta-*

このプレフィックスで始まるフィールド名はユーザー定義メタデータです。それぞれが保存され、キーと値のペアのセットとして返されます。Amazon S3 はユーザー定義メタデータを検証または解釈しません。詳細については、「PutObject」を参照してください。

いいえ

x-amz-*

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

いいえ

file

ファイルまたはテキストコンテンツ。

ファイルまたはコンテンツはフォームの最後のフィールドでなければなりません。

複数のファイルを一度にアップロードすることはできません。

はい

条件付き項目は認証されたリクエストに必要であり、匿名リクエストではオプションです。

フォームの作成方法がわかったので、次に署名できるセキュリティポリシーを作成できます。詳細については、「POST ポリシー」を参照してください。