发送到S3的AWS Access ID与我在Node AWS-SDK中指定的不同

时间:2017-08-06 01:22:42

标签: node.js express aws-sdk

我有一个S3存储桶,我想从我的Node后端上传文件。上传失败成为403错误,并显示以下消息:

<Error><Code>InvalidAccessKeyId</Code><Message>The AWS Access Key Id you provided does not exist in our records.</Message><AWSAccessKeyId>AKIAI5L2C5CJPGACBIOA</AWSAccessKeyId><RequestId>A1BF9779D5888ADD</RequestId>

以下是rest api中的代码:

  AWS.config.region = 'us-east-1';
  AWS.config.accessKeyId = 'AKIAIPMGLJ7BHQLGM3JA';
  AWS.config.secretAccessKey = '<None of your business>';

  var bucketName = "daniel-videostore"
  var s3bucket = new AWS.S3();

  var s3_params = {
        Bucket: bucketName,
        Key: fileName,
        Expires: 60, // expire after 60 mins
        ContentType: file.type,
        ACL: 'public-read',
    };

  s3bucket.getSignedUrl('putObject', s3_params, function(err, data){
    if(err){
      console.log("Server Error occurred")
      console.log(err);
    }
    else{
      var return_data = {
        requestUrl : data,
        imageUrl: 'https://'+ bucketName +'.s3.amazonaws.com/'+ fileName
      };
      res.json( generalResponse( return_data ) );
    }
  });

正如您所看到的,响应中的访问ID与我在sdk参数中指定的访问ID不同。 resopnse中的那个是 AKIAI5L2C5CJPGACBIOA ,而我指定的那个显示在上面的代码中。事实上,我不承认resopnse中的访问ID。这可能是我收到403错误的问题吗?或者ID请求和响应是否正常?如果是这样,可能导致访问ID错误的原因是什么?

1 个答案:

答案 0 :(得分:1)

在Javascript SDK中,我在AWS.config对象中看不到options的accessKeyId和secretAccessKey。

有一个凭证对象。

AWS.config.credentials = new AWS.Credentials('akid', 'secret', sessionToken = null));

SDK将在四个位置查找凭据。我假设你的凭证文件中的默认访问密钥是 AKIAI5L2C5CJPGACBIOA

  1. Statics vars,即你是怎么做的

  2. 环境变量,导出AWS_ACCESS_KEY_ID = ...

  3. 凭据文件,〜/ .aws / credentials

  4. IAM instance profile for ec2