AWS S3 Access有时仅被拒绝

Joh*_*ith 7 javascript file-upload amazon-s3 amazon-ec2 amazon-web-services

我已经尝试了几天从js的aws-sdk上传文件到s3桶.我添加了正确的CORS策略,并且出于测试目的,存储桶具有公共权限.文件上传仅在50%的时间内有效.

我试图从我的网站上立即上传3-4个文件,但是在第二个之后我被拒绝访问.由于某种原因,前2个上传成功但第3个以后失败.我不知道我是否发现了一个小故障,或者我是否做错了什么.

我的CORs政策是.我也试过了

`<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>http://*</AllowedOrigin>
    <AllowedOrigin>https://*</AllowedOrigin>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <ExposeHeader>ETag</ExposeHeader>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>` 
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

<AllowedOrigin>*</AllowedOrigin>
Run Code Online (Sandbox Code Playgroud)

没有成功.

要上传文件,我使用来自aws-cognito sdk的临时凭证来获取js.我用来上传文件的代码如下:

function uploadFile(fileData,callback){
var file = fileData[4];
var key = "";
for(i=0; i<3; i++){
var temp = Math.ceil(Math.random()*1000000000000)
key=key+temp;
}

AWS.config.sessionToken= mySessionToken;
AWS.config.accessKeyId= myAccessKey;
AWS.config.secretAccessKey= mySecretKey;
AWS.config.region= myRegion;
var bucket = new AWS.S3({params: {Bucket: myBucketName}});
var params = {Key: key, ContentType: file.type, Body: file, ACL:'bucket-owner-
full-control'};
bucket.upload(params, function (err, data) {
if (err) {

callback(false,err,fileData);

}
else{
callback(true,"",fileData);
}
});

}
Run Code Online (Sandbox Code Playgroud)

如果重要的话,我上传的网站是在ec2实例上托管的.

我知道有很多关于如何让文件上传与S3一起工作的帖子,但我从未见过任何只在一部分时间内工作的地方.我假设我使用的凭据和我的CORS配置是正确的,否则上传将无法正常工作?

在此先感谢您的帮助!

编辑:

此错误仅发生在第3次顺序上传及以后.我上传的第一个和第二个文件没有错误并且成功.

我收到的错误代码如下:

将[S3Instance] 403禁止

<Error>
<Code>
AccessDenied
</Code>
<Message>
Access Denied
</Message>
<RequestId>
RequestId
</RequestId>
<HostId>
HostId
</HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)

Bry*_*ceH 0

启用 CloudTrail 日志记录并查看日志以确定原因。