1
我使用lambda函數創建一個URL presigned上傳到S3:與S3 putObject presigned網址無效簽名
var crypto = require('crypto');
var AWS = require('aws-sdk');
AWS.config.region = 'eu-west-1';
function randomValueHex (len) {
return crypto.randomBytes(Math.ceil(len/2))
.toString('hex') // convert to hexadecimal format
.slice(0,len); // return required number of characters
}
var value1 = randomValueHex(12)
exports.handler = function(event, context) {
var key = randomValueHex(16);
// Url is
var s3 = new AWS.S3();
var params = {Bucket: 'somebucket', Key: key };
var url = s3.getSignedUrl('putObject', params);
context.succeed({ key: key, url: url });
}
然後用該網址我試圖做一個PUT調用與httpie:
echo "something" | http -v PUT https://...presigned url
但我得到:
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
拉姆達一個完整的S3訪問執行角色運行,但權限不應該是這裏的問題
更新:試圖上載沒有Content-Type頭文件正常工作:
http -v PUT https://...url
如此看來,這個問題是與內容類型,但因爲我不指定它,我認爲AWS不打擾,如果我上傳一個JSON或其他任何東西
這是問題,謝謝! – alex88