亚马逊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:/

+0

您使用的是用root用户相关的凭据?或具有其他权限的其他用户? – filipebarretto

+0

虽然我创建了一个用户并为他提供了S3 IAM角色,但我对AWS还不是很熟悉,但对我来说,似乎访问令牌只绑定到root帐户/ root用户而不是任何后续用户。 –

+0

您能否添加您在问题中提供的政策? 当您创建用户时,您可以为他创建凭据。你永远不应该拥有账户根目录的凭据。 – filipebarretto

要配置您的凭据,你和使用:

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

+0

同样的问题,这并没有帮助不幸(但是,无论如何感谢。 –

+0

@ Jim-Y我补充了答案。试试看。 – filipebarretto

+0

谢谢,遗憾的是,这不可能是问题的根源,因为在应用程序的其他部分,我们也使用AWS来处理其他事情,比如AWS-SES用于发送电子邮件,API的地址相同,我们提供像I在我的问题中做了。从环境变量中读取信用,并将它们作为参数提供给SES/S3构造函数。 –