В настоящее время я следую этому учебному пособию по AWS , чтобы попытаться разрешить клиенту из моего веб-приложения загружаться в мое хранилище S3.У меня есть политика POST, как описано в руководстве (некоторые детали отредактированы):
{ "expiration": "2019-12-30T12:00:00.000Z",
"conditions": [
{"bucket": "<MY BUCKET NAME>"},
["starts-with", "$key", "images/"],
{"acl": "public-read"},
["starts-with", "$Content-Type", "image/"],
{"x-amz-algorithm": "AWS4-HMAC-SHA256"},
{"x-amz-credential": "<AWSAccessKeyId>/20190101/eu-west-2/s3/aws4_request"},
{"x-amz-date": "20190101T000000Z" }
]
}
У меня есть HTML-форма, как указано:
<form action="http://<bucket-name>.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
Key to upload:
<input type="input" name="key" value="images/${filename}" /><br />
<input type="hidden" name="acl" value="public-read" />
Content-Type:
<input type="input" name="Content-Type" value="image/jpeg" /><br />
<input type="text" name="X-Amz-Credential" value="<AWSAccessKeyId>/20190101/eu-west-2/s3/aws4_request" />
<input type="text" name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256" />
<input type="text" name="X-Amz-Date" value="20190101T000000Z" />
Tags for File:
<input type="input" name="x-amz-meta-tag" value="" /><br />
<input type="hidden" name="Policy" value='<MY BASE 64 policy>' />
<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>
Что касается моего кода создания подписи,Я использовал их пример на python, и когда я протестировал его с их строкой, чтобы подписать и основать 64 примера, я получил правильный результат.Так что я не думаю, что моя проблема есть, но я всегда могу загрузить свой код Python для этого тоже.
Однако, когда я пытаюсь отправить эту форму и загрузить изображение, я получаю ошибку SignatureDoesNotMatch
на получающейся странице XML.
Должен ли я загружать политику POST в разрешения моего сегмента?Я не уверен, как AWS вычисляет подпись, так как не думаю, что я дал ей свою политику.Я просто делаю простую ошибку?