python - StringToSignの作成

python amazon-s3

認証のためにAmazonのS3にクエリ文字列を渡すドキュメントを読んでいますが、StringToSignがどのように作成および使用されているかを正確に理解できていないようです。 (1)StringToSignを作成する方法、および(2)署名を取得したらフォームを呼び出す方法を説明する具体的な例を探しています。

たとえば、以下が私の情報だとします。

Content-type='image/jpeg'
Bucket='test-bucket'
Key = 'filename'
ACL = 'public-read'
Expiration = '(never expires)'
Access Key = '12345'
Secret Password = '1a2b3c'
File = <file the user uploads>


これからどのようにStringToSign値を取得しますか?そして、それができたら、次のフォームをどのように作成しますか?

<form action="??" method="post" enctype='multipart/form-data' class="upload-form">
    <input name="file" type="file"> 
</form>


参考までに:http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?RESTAuthentication.html#RESTAuthenticationQueryStringAuth。ありがとうございました。
答え
あなたの説明に基づいて、POSTを使用したブラウザベースのアップロードをサポートしたいようです。 section of the AWS documentation which talks about thisがあります。

概要として、バケットを公開書き込み可能にするか、ポリシードキュメントを含める必要があることを覚えておいてください。ポリシードキュメントを含めることを想定しています(必要ない場合はドキュメントを確認してください)。

ポリシードキュメントは、リクエストの認証に使用されるJSONの断片にすぎず、データがアップロードされる前に満たす必要のある一連の条件を提供します。例えば:

"expiration": "2020-12-01T12:00:00.000Z",
"conditions": [
    {"acl": "public-read" },
    {"bucket": "test-bucket" },
    ["eq", "$key", "filename"],
  ]
}


これは、バケットがパブリックにのみ読み取り可能であり、バケット名が「test-bucket」であり、キーが「filename」と完全に等しい場合、アップロードするアクションは2020年まで許可されることを示しています。

次に、署名を作成するには、上記のJSONドキュメントをUTF-8でエンコードしてからbase64で取得し、シークレットアクセスキーを使用して(hmac sha1を使用して)全体に署名し、最後にその全体をbase64で署名します

policy_data = ... # stuff above
enc_policy = base64.b64_encode(policy_data.encode('utf8'))
signed = base64.b64_encode(hmac.new(AWS_SECRET, enc_policy, hashlib.sha1))


最後に、フォームは次のようになります。

 <form action="http://test-bucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
    Key to upload: <input type="input" name="key" value="filename" /><br />
    <input type="hidden" name="acl" value="public-read" />
    <input type="hidden" name="success_action_redirect" value="http://test-bucket.s3.amazonaws.com/successful_upload.html" />
    Content-Type: <input type="input" name="Content-Type" value="image/jpeg" /><br />
    <input type="hidden" name="AWSAccessKeyId" value="YOUR_ACCESS_KEY_ID" />
    <input type="hidden" name="Policy" value="<enc_policy from above>" />
    <input type="hidden" name="Signature" value="<signed from above>" />
    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>
関連記事

python - 'コマンドラインインテリセンス'(TAB TAB)をPythonスクリプトで動作させる方法は?

python - 自動的にインポートされたモジュールを制御する

python - 書式付きでPythonスクリプトを保存-特殊文字

python - ツイストされた遅延コールバックチェーン

python - JSONからデータを読み込んだ後のメモリのクリーニング

python - クラスが定義されたときに自動登録する(ただし、どこにもインポートしない)

python - Pylonsを初めて使用し、ルートを理解しようとする

python - Pythonでの配列のすべての要素の文字列操作

python - 文字列から日時変数形式

python - Pythonでユニコード文字のリストをヘブライ文字列に変換する