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