2016-07-20 39 views
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]" 
      ] 
     } 
    ] 
} 

有什麼建議嗎?

回答

0

發現缺少的配置是存儲桶本身的ACL,最初的ACL允許我的root帳戶進行所有更改,我猜測代碼工作的IAM帳戶正在繼承某種權限。

添加這個額外的行上傳/刪除工作。

Screenshot of the configuration change

+2

** WARNING提防**身份驗證的用戶 - 該組由具有一個Amazon AWS賬戶的任何用戶的。授予Authenticated User組權限時,任何有效的簽名請求都可以執行相應的操作。請求可以由AWS賬戶或IAM用戶簽名。 **簡而言之,您可以使用AWS賬戶爲任何用戶開放您的S3存儲桶** –