我有一个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错误的原因是什么?
答案 0 :(得分:1)
在Javascript SDK中,我在AWS.config对象中看不到options的accessKeyId和secretAccessKey。
有一个凭证对象。
AWS.config.credentials = new AWS.Credentials('akid', 'secret', sessionToken = null));
SDK将在四个位置查找凭据。我假设你的凭证文件中的默认访问密钥是 AKIAI5L2C5CJPGACBIOA
Statics vars,即你是怎么做的
环境变量,导出AWS_ACCESS_KEY_ID = ...
凭据文件,〜/ .aws / credentials