【问题标题】:Error: Missing credentials in config - /nodeapp/node_modules/aws-sdk/lib/request.js:31错误:配置中缺少凭据 - /nodeapp/node_modules/aws-sdk/lib/request.js:31
【发布时间】:2017-03-06 05:08:13
【问题描述】:

我正在使用 AWS-SDK 中的 s3.listObjects() 函数提取对象,但我不断收到以下错误:

/nodeapp/node_modules/aws-sdk/lib/request.js:31 

紧随其后

Error: Missing credentials in config
at IncomingMessage.<anonymous> (/nodeapp/node_modules/aws-sdk/lib/util.js:863:34)
at emitNone (events.js:91:20)
at IncomingMessage.emit (events.js:186:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickDomainCallback (internal/process/next_tick.js:122:9)

这不会加起来,因为我有一个不同的路由 (downloadParam) 从 S3 检索对象而没有给我这个错误。此外,当我注销从downloadResults 路由检索到的对象时,似乎检索到的对象没有问题,但我仍然会收到此错误。

我在这个问题上花了几个小时,但我似乎无法弄清楚为什么会发生这种情况。我已经粘贴了以下两条路线的代码,一条有效,一条无效。从我在网上收集到的信息来看,这似乎更像是一个代码问题,而不是 AWS-SDK 凭证问题。

  downloadParam: function(app, s3){
app.use('/api', apiRoutes)

apiRoutes.get('/download-param-file', function(req, res, next){
 res.set({'Content-Type':'text/csv'})
  s3.getObject({Bucket: 'some-bucket', Key: 'some-key' + req.query.fileName}, function(err, file){

    if (err) {
      console.log(err);
      return next(err);
    } else {
      return res.send(file.Body.toString());
    }
  })
})
},

downloadResults: function(app, s3){
app.use('/api', apiRoutes)

apiRoutes.get('/download-results-file', function(req, res, next){
   res.set({'Content-type': 'application/zip'})

   var params = {
    Bucket: 'some-bucket',
    Delimiter: '/',
    Prefix: 'some-key'
    };


   var filesArray = []
   var files = s3.listObjects(params).createReadStream()
   var xml = new XmlStream(files)
   xml.collect('Key')

   xml.on('endElement: Key', function(item) {
     filesArray.push(item['$text'].substr(params.Prefix.length))
    })

   xml.on('end', function() {

    res.send(zip(filesArray, req.query.jobName,  params))


  })        
})
}

截至目前,downloadParams 按预期工作,但 downloadResults 没有。任何帮助将不胜感激。

This link seems solve an issue similar to mine

【问题讨论】:

  • apiRoutes 是在哪里定义的?
  • 在我的 routes.js 文件的顶部@JoachimBrandonLeBlanc

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


【解决方案1】:

您没有对通话进行身份验证。存储桶没有权限列出未经身份验证的对象,但它确实有权下载特定文件而无需身份验证。

请参阅Amazon Documentation 向实例添加凭据safely

基本上,

var creds = AWS.Credentials();
creds.accessKeyId = 'AKIAIOSFODNN7EXAMPLE';
creds.secretAccessKey = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY';

AWS.config.credentials = creds;

【讨论】:

  • 我为我的存储桶添加了权限,以供受让人“每个人”列出和上传/删除。仍然没有运气。还有什么建议吗?
  • 我已经使用 aws-config 在我的 server.js 中验证调用。我错过了什么? const s3 = new AWS.S3(awsConfig({ accessKeyId: process.env.AWS_ACCESS_KEY, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, region: process.env.AWS_REGION, apiVersion: '2006-03-01' }) );
  • awsConfig 函数是什么? S3 constructor takes an object.
  • 谢谢,我终于明白你的意思了。
猜你喜欢
  • 1970-01-01
  • 2019-05-05
  • 2017-08-31
  • 2021-04-06
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
相关资源
最近更新 更多