javascript - 使用 STS 凭证上传 aws-sdk - 403 错误

标签 javascript node.js amazon-web-services amazon-s3 aws-sts

我一直在尝试设置 Amazon 的 STS(安全 token 服务)来为客户端上传到 S3 创建临时凭证。

我可以使用 IAM 用户生成的访问 key 使代码正常工作,但是当我换出访问 key / secret key 然后添加 session token 时,我收到 403 禁止访问。 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 模拟器测试了它假定的 Angular 色策略,它说它很好。尝试使用 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]"
            ]
        }
    ]
}

有什么想法吗?

最佳答案

原来缺少的配置是存储桶本身的 ACL,原始 ACL 允许我的根帐户进行所有更改,我猜代码工作的 IAM 帐户继承了某种权限。

为上传/删除添加这条额外的行。

Screenshot of the configuration change

关于javascript - 使用 STS 凭证上传 aws-sdk - 403 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38473103/

相关文章:

python - Boto3 不使用配置文件中的 key

javascript - Google Maps Hidden Div Overflows half map

javascript - 相同的跳跃高度改变重力

javascript - 告诉 Protractor 在异步调用时阻塞

Node.js 与 CouchDB 和 Backbone.js 一起使用,如何提供 json?

javascript - Angular - 如何使用 Angular CLI 创建子组件

javascript - 这个curl 请求的node.js 等价物是什么?

node.js - NodeJs 身份验证???

ruby - 在 AWS elastic map/reduce 上运行 MRToolkit hadoop 作业

amazon-web-services - 由于权限原因,AWS Code Deploy 脚本失败