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-signature 또는 X-Amz-Signature를 지정할 수 있습니다.