AWS S3上传:AWS Access Key ID在我们的记录中不存在

时间:2018-07-04 01:16:56

标签: java amazon-web-services amazon-s3 amazon-ec2

关于此错误消息,有很多关于stackoverflow的问题,但似乎不是我的情况。

所以,我的问题是,我需要能够直接从浏览器上载文件到S3,而无需通过服务器。为此,我:

  1. 在服务器上生成签名并将其发送到前端。
  2. 前端使用签名将文件上传到S3。

当我在本地计算机上运行服务器时,一切在本地运行良好,但是当它在beantalk上运行时,则无法运行。问题出在我的本地,我有显式的〜/ .aws / credentails,其中包含访问密钥和访问密钥。但是在beantalk上,我们是通过IAM角色完成的,因此获取两种情况的凭证的代码是:

class Person {
  constructor(init){
    this.name = init;
  }
}

let people = [];
let names = ['janes','james','jo','john','josh'];
names.forEach(n=>people.push(new Person(n)));

function printName(name) {
  let getSomething = new Promise(function(resolve, reject) {
    setTimeout(function() {
      resolve(name);  
    },1000)
  });
    return getSomething.then(function(){
      console.log(name);
      return name;
    });
}
let request = [];
console.log('start');
people.forEach(person => { 
  request.push(printName(person.name));
})
Promise.all(request).then(result=> {
  console.log(result);
  console.log("finsh");
})

据我所知,在本地运行时,DefaultAWSCredentialsProviderChain只是从〜/ .aws / credentials文件中读取凭据,并且在beantalk上运行时,它会根据IAM角色生成访问密钥和访问密码(在短时间内有效) ,不知道要多久,也许几个小时)。 当服务器(生成签名)在beantalk上运行时,我从S3收到错误消息:

@Bean
public AWSCredentials awsCredentials() {
        DefaultAWSCredentialsProviderChain credProvider = new DefaultAWSCredentialsProviderChain();
        return credProvider.getCredentials();
}

知道为什么会这样吗?

0 个答案:

没有答案