不久前,我实现了PDF上传功能,其中我的前端调用了我的后端,该功能调用getSignedUrl()
了Amazon的JavaScript SDK以获取一个URL,该URL前端应该能够使用PUT
请求将文件上传到。
一段时间以来,这种方法一直运行良好,今天,我尝试实现类似的功能来上传图像(到另一个S3存储桶)。不幸的是,尽管看起来设置相同,但PUT
上传结果为
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId><!-- A request ID --></RequestId>
<HostId><!-- A host ID --></HostId>
</Error>
这并不是真的有帮助,所以现在我想弄清楚如何最好地调试它。
我检查的内容:
s3::GetObject
在的资源引用了这个新存储桶PUT
请求发送相同的HTTP标头OPTIONS
首先发送的请求也是如此我还能检查什么?
因此,有一件事我没有正确检查:
预签名URL使您可以访问URL中标识的对象,前提是该预签名URL的创建者有权访问该对象。也就是说,如果收到预签名URL来上载对象,则只有在预签名URL的创建者具有上载该对象的必要权限的情况下,才可以上载对象。
我从AWS Lambda函数生成了URL,为此我必须添加IAM策略,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::<bucket name>/*"
}
]
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句