4
我一直在試圖設置亞馬遜的STS(安全令牌服務)創建客戶端上傳到S3的臨時憑證。aws-sdk上傳與STS憑據 - 403錯誤
我可以使用從IAM用戶生成的訪問密鑰正常工作,但是當我換出訪問密鑰/密鑰然後添加會話令牌時,我得到了403 Forbidden。 S3訪問日誌不記錄嘗試。
在STS側我生成經由AWS-SDK的node.js的憑證,使用相同的IAM用戶如上述,在SDK生成STS憑證愉快:
let sts = new AWS.STS({apiVersion: '2011-06-15'});
sts.assumeRole({
RoleArn: 'arn:aws:iam::[REMOVED]:role/[REMOVED]',
RoleSessionName: [REMOVED (generated by concatenating a few ids)]
DurationSeconds: 60 * 20,
}, (err, data)=>{
//callback handling
});
上傳測試代碼:
var AWS = require('aws-sdk');
// Load the stream
var fs = require('fs');
var body = fs.createReadStream('./helloworld.txt');
AWS.config.update({
region: 'ap-southeast-2',
accessKeyId: '[REMOVED]',
secretAccessKey: '[REMOVED]',
sessionToken: '[REMOVED]'
});
// Upload the stream
var s3 = new AWS.S3();
s3.putObject({
Body: body,
Bucket: '[REMOVED]',
Key: 'helloworld.txt'
}, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
AWS-SDK版本:2.4.8 node.js的:4.2.3
我測試過,它假定使用IAM模擬器的作用政策,說沒關係。在瀏覽器端和服務器端嘗試使用sdk進行上傳。
我打開了S3 CORS(調試),以確保沒有怪異那兒的情況:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<MaxAgeSeconds>0</MaxAgeSeconds>
<ExposeHeader>ETag</ExposeHeader>
<ExposeHeader>x-amz-server-side-encryption</ExposeHeader>
<ExposeHeader>x-amz-request-id</ExposeHeader>
<ExposeHeader>x-amz-id-2</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
<AllowedHeader>x-amz-acl</AllowedHeader>
</CORSRule>
</CORSConfiguration>
S3政策我已經打開了(再次調試):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"[REMOVED]"
]
}
]
}
有什麼建議嗎?
** WARNING提防**身份驗證的用戶 - 該組由具有一個Amazon AWS賬戶的任何用戶的。授予Authenticated User組權限時,任何有效的簽名請求都可以執行相應的操作。請求可以由AWS賬戶或IAM用戶簽名。 **簡而言之,您可以使用AWS賬戶爲任何用戶開放您的S3存儲桶** –