View a markdown version of this page

例: HTTP POST (AWS 署名バージョン 4) を使用したブラウザベースのアップロード - Amazon Simple Storage Service

例: HTTP POST (AWS 署名バージョン 4) を使用したブラウザベースのアップロード

このセクションでは、HTTP POST リクエストを使用してコンテンツを Amazon S3 に直接アップロードする例を示します。

署名バージョン 4 の詳細については、「署名バージョン 4 の署名プロセス」を参照してください。

HTTP POST を使用した Amazon S3 へのファイルのアップロード

この例では、ファイルのアップロードに使用できるサンプルの POST ポリシーとフォームを示します。このトピックでは、ポリシーと架空の認証情報の例は、ワークフローおよびその結果として生成される署名とポリシーハッシュを示しています。このデータをテストスイートとして使用して、署名計算コードを検証できます。

この例では、次のサンプルの認証情報を使用して署名計算を行います。これらの認証情報を使用して、署名計算コードを検証できます。ただし、AWS にリクエストを送信するときは、これらを独自の認証情報に置き換える必要があります。

パラメータ
AWSAccessKeyId AKIAIOSFODNN7EXAMPLE
AWSSecretAccessKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

サンプルポリシーとフォーム

次の POST ポリシーは、特定の条件での Amazon S3 へのアップロードをサポートしています。

{ "expiration": "2015-12-30T12:00:00.000Z", "conditions": [ {"bucket": "sigv4examplebucket"}, ["starts-with", "$key", "user/user1/"], {"acl": "public-read"}, {"success_action_redirect": "http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html"}, ["starts-with", "$Content-Type", "image/"], {"x-amz-meta-uuid": "14365123651274"}, {"x-amz-server-side-encryption": "AES256"}, ["starts-with", "$x-amz-meta-tag", ""], {"x-amz-credential": "AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request"}, {"x-amz-algorithm": "AWS4-HMAC-SHA256"}, {"x-amz-date": "20151229T000000Z" } ] }

この POST ポリシーは、リクエストに次の条件を設定します。

  • アップロードは、2015 年 12 月 30 日の UTC 正午までに行う必要があります。

  • コンテンツは sigv4examplebucket にのみアップロードできます。指定した署名はこのスコープ内でのみ有効であるため、バケットは認証情報スコープ (x-amz-credential フォームパラメータ) で指定したリージョンにある必要があります。

  • user/user1 で始まる任意のキー名を指定できます。例えば、user/user1/MyPhoto.jpg

  • ACL は public-read に設定する必要があります。

  • アップロードが成功すると、ユーザーのブラウザは http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html にリダイレクトされます。

  • オブジェクトはイメージファイルである必要があります。

  • x-amz-meta-uuid タグは 14365123651274 に設定する必要があります。

  • x-amz-meta-tag には任意の値を含めることができます。

この POST ポリシーの Base64 エンコードされたバージョンを次に示します。この値は、署名計算で StringToSign として使用します。

eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJzaWd2NGV4YW1wbGVidWNrZXQifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwNCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LA0KICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sDQogICAgeyJ4LWFtei1tZXRhLXV1aWQiOiAiMTQzNjUxMjM2NTEyNzQifSwNCiAgICB7IngtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb24iOiAiQUVTMjU2In0sDQogICAgWyJzdGFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sDQoNCiAgICB7IngtYW16LWNyZWRlbnRpYWwiOiAiQUtJQUlPU0ZPRE5ON0VYQU1QTEUvMjAxNTEyMjkvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LA0KICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwNCiAgICB7IngtYW16LWRhdGUiOiAiMjAxNTEyMjlUMDAwMDAwWiIgfQ0KICBdDQp9

上記のポリシーをコピー/貼り付ける際は、計算されたハッシュがこの値と一致するように、キャリッジリターンと改行 (つまり、CRLF 行末記号付きの ASCII テキスト) が含まれている必要があります。

サンプルの認証情報を使用して署名を作成する場合、署名の値は次のようになります (署名の計算では、日付はポリシーの x-amz-date (20151229) と同じです)。

8afdbf4008c03f22c2cd3cdb72e4afbb1f6a588f3255ac628749a66d7f09699e

次のフォームの例では、前述の POST ポリシーを指定し、sigv4examplebucket への POST リクエストをサポートしています。テキストエディタでコンテンツをコピーして貼り付け、exampleform.html として保存します。その後、exampleform.html を使用して、イメージファイルを特定のバケットにアップロードできます。提供された署名が Amazon S3 が計算した署名と一致する場合、リクエストは成功します。

注記

S3 に正常にアップロードするには、バケット名、日付、認証情報、ポリシー、および署名を有効な値に更新する必要があります。

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <form action="http://sigv4examplebucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data"> Key to upload: <input type="input" name="key" value="user/user1/${filename}" /><br /> <input type="hidden" name="acl" value="public-read" /> <input type="hidden" name="success_action_redirect" value="http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html" /> Content-Type: <input type="input" name="Content-Type" value="image/jpeg" /><br /> <input type="hidden" name="x-amz-meta-uuid" value="14365123651274" /> <input type="hidden" name="x-amz-server-side-encryption" value="AES256" /> <input type="text" name="X-Amz-Credential" value="AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request" /> <input type="text" name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256" /> <input type="text" name="X-Amz-Date" value="20151229T000000Z" /> Tags for File: <input type="input" name="x-amz-meta-tag" value="" /><br /> <input type="hidden" name="Policy" value='<Base64-encoded policy string>' /> <input type="hidden" name="X-Amz-Signature" value="<signature-value>" /> File: <input type="file" name="file" /> <br /> <!-- The elements after this will be ignored --> <input type="submit" name="submit" value="Upload to Amazon S3" /> </form> </html>

POST パラメータでは、大文字と小文字は区別されません。たとえば、x-amz-signatureX-Amz-Signature と指定することができます。