我尝试使用 POST AWS 签名版本 4 直接从浏览器将文件上传到 S3 存储桶。最初,我收到签名验证错误,我设法解决了该错误,但现在收到此错误:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>9343E20EAA0FD14E</RequestId
<HostId>RldZp4h5n6tK8R5WKmWnn0k8PNvJGxb6m...</HostId>
</Error>
我在我的 S3 存储桶中启用了日志记录,但它们很少,并且不提供任何额外的见解。
我有以下存储桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::000000000000:user/username"
},
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::bucketname/*"
}
]
}
当我使用用户的 API key / secret 从我的计算机或 EC2 实例上传文件时,它可以工作,但使用带有签名策略的浏览器上传时,会出现上述错误。
最佳答案
我明白了。我将请求(和内部策略)中的 acl 设置为公共(public)读取,这需要存储桶策略中的附加权限。我将“s3:PutObjectAcl”添加到操作列表中并且它起作用了。
关于amazon-web-services - AWS S3 浏览器上传出现访问被拒绝错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35356304/