javascript - Amazon S3 - 从nodejs SDK访问存储桶

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

我在使用 Node SDK 从 NodeJS 访问我的全新存储桶(通过 AWS 控制台创建)时遇到了问题。我所做的步骤(如果我遗漏了什么,请帮忙)

  • 创建了一个 aws 帐户,现在我拥有了 root 用户
  • 为 SDK 创建了新的访问 key
  • 转到 S3 并在控制台中创建一个新存储桶
  • 在nodejs中,我尝试将一些内容上传到此存储桶,但我不断收到“访问被拒绝”的消息,没有进一步的解释。

我尝试了不同区域的存储桶以及生成新的访问 key ,并尝试为存储桶设置较低的权限,以至于我可以使用其中一个测试存储桶为每个人启用所有内容,但仍然收到错误。

代码位:

    class SomeNodeService {

        constructor() {
            this.s3 = new S3({
                params: {
                    Bucket: 'some.bucket.which.name.is.unique',
                    accessKeyId: 'SOMEID',
                    secretAccessKey: 'SOMEID'
                }
            });
        }

        uploadAttachment(attachment) {
            const _this = this;
            return co(function * () {
                const file = yield _readFile(attachment.path, 'utf8');
                const key = `${KEY_PREFIX}attachment/${Date.now()}/${attachment.name}`;
                const params = {
                    Key: key,
                    Body: file
                };

                return yield _this.s3.putObject(params).promise();
            });
        }

    }

我不知道我错过了什么:S

<小时/>

根据 @filipebarretto,我创建了一个新用户,并为该用户创建了新的访问 token ,并为他提供了 AmazonS3FullAccess。值得一提的是,我还创建了一个组名称“sysadmin”,并向该组本身提供了 AmazonS3FullAccess 权限,因此将用户分配到该组也会导致向该用户授予该权限。总而言之,我所做的一切

1) 创建新组 sysadm 2) 授予组权限“AmazonS3FullAccess” 3) 创建新用户 XY 并加入组 sysadm 4) 为 XY 用户重新创建访问 token

但我仍然被拒绝访问:/

最佳答案

要配置您的凭据,您可以使用:

AWS.config = new AWS.Config();
AWS.config.accessKeyId = "accessKey";
AWS.config.secretAccessKey = "secretKey";
AWS.config.region = "region";

这不是最好的也不是最安全的方法。欲了解更多信息,请查看:http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials.html

您应该在参数中定义Bucket和Key,例如:

const params = {
    Key: key,
    Body: file
};

return yield _this.s3.putObject(params).promise();

在您的构造函数中,仅使用:

constructor() {
    this.s3 = new S3();
}

var s3 = new AWS.S3();

引用:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property

关于javascript - Amazon S3 - 从nodejs SDK访问存储桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41443427/

相关文章:

Node.js/Express.js 从请求中删除用户,将其从数据库中删除

amazon-web-services - 亚马逊 AWS 连接

windows - cmd 提示符不使用代理设置

javascript - 使用 d3.js 在一个图中用一条线堆积柱形图

javascript - Material UI - 如何将网格容器拉伸(stretch)到父级高度和宽度

node.js - 为什么无法删除 Node 代理中的传输编码 header ?

amazon-web-services - 如何将数据从 Cognito Sync 保存到服务器

javascript - 使用 jQuery 删除这个单击的列表元素

javascript - 更新嵌套对象的多个字段

javascript - 将对象转换为映射数组?