亚马逊S3 - 从nodejs SDK访问存储桶
我遇到了使用节点SDK从nodejs访问全新存储桶(通过aws控制台创建)的问题。步骤我做了(请帮助,如果我错过了什么)亚马逊S3 - 从nodejs SDK访问存储桶
- 创建一个AWS帐号,所以我现在有一个root用户
- 创造了SDK
- 又到S3新的访问密钥并创建了一个新桶与控制台
- 在nodejs我尝试上传的东西到这个桶,但我一直得到'访问被拒绝'没有进一步的解释。
我试图用水桶不同的区域,以及产生新的快捷键,并且还试图建立低权限桶的地步,我让一切都为大家测试容器中的一个,但仍然得到错误。
的码位:
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我创建了一个新的用户,并创造了新的访问令牌用户也给了他AmazonS3FullAccess。值得一提的是,我还创建了一个组名'sysadmin',并且我向该组本身提供了AmazonS3FullAccess权限,因此将该用户分配给该组也导致向该用户授予权限。因此,所有的一切我做了什么
1)创建新组SYSADM 2)授予组权限“AmazonS3FullAccess” 3)创建新的用户XY和加入群SYSADM 4)重新访问令牌XY用户
但我仍然得到Access denied:/
要配置您的凭据,你和使用:
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
你应该定义的桶,并在PARAMS的重点,如:
const params = {
Key: key,
Body: file
};
return yield _this.s3.putObject(params).promise();
在你的构造,只使用:
constructor() {
this.s3 = new S3();
}
VAR S3 =新的AWS.S3();
参考:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property
同样的问题,这并没有帮助不幸(但是,无论如何感谢。 –
@ Jim-Y我补充了答案。试试看。 – filipebarretto
谢谢,遗憾的是,这不可能是问题的根源,因为在应用程序的其他部分,我们也使用AWS来处理其他事情,比如AWS-SES用于发送电子邮件,API的地址相同,我们提供像I在我的问题中做了。从环境变量中读取信用,并将它们作为参数提供给SES/S3构造函数。 –
您使用的是用root用户相关的凭据?或具有其他权限的其他用户? – filipebarretto
虽然我创建了一个用户并为他提供了S3 IAM角色,但我对AWS还不是很熟悉,但对我来说,似乎访问令牌只绑定到root帐户/ root用户而不是任何后续用户。 –
您能否添加您在问题中提供的政策? 当您创建用户时,您可以为他创建凭据。你永远不应该拥有账户根目录的凭据。 – filipebarretto