2016-07-20 17 views
4

AmazonのSTS(Security Token Service)をセットアップして、クライアント側のS3へのアップロード用の一時的な認証情報を作成しようとしました。aws-sdkがSTS認証でアップロード - 403エラー

IAMユーザーから生成されたアクセスキーを使用してコードを正常に動作させることができますが、アクセスキー/秘密キーをスワップしてセッショントークンを追加すると、403 Forbiddenが発生します。 S3アクセスログは試行を記録しません。

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 
}); 

アップロードテストコード:

私は上記と同じIAMユーザーを使用して、Node.jsのためAWS-SDKを介して認証情報を生成していSTS側

、SDKは喜んSTS認証情報を生成します。

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アカウントを持つユーザーで構成されています。認証されたユーザーグループにアクセス許可を与えると、有効な署名付き要求が適切な処理を実行できます。リクエストは、AWSアカウントまたはIAMユーザーのいずれかによって署名することができます。 **要するに、AWSアカウントを持つすべてのユーザーのS3バケットへのアクセスを開設しました** –

関連する問題