我正在尝试使用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密钥/密码从我的计算机或EC2实例上传文件时,它可以正常工作,但使用带有签名策略的浏览器上传,会给我上述错误。
答案 0 :(得分:3)
我明白了。我在请求(和内部策略)中将acl设置为public-read,这需要在存储桶策略中添加权限。我将“s3:PutObjectAcl”添加到Actions列表中并且它可以工作。
答案 1 :(得分:2)
对我来说,我需要访问IAM控制台并将策略附加到用户的访问密钥和我用来签署策略的秘密。我附加的政策是AmazonS3FullAccess
。