【发布时间】:2021-06-25 07:49:40
【问题描述】:
我正在尝试生成一个签名的 url,以便前端可以在上传照片时使用它,但是当我尝试生成的 url 时,它一直给我以下错误
<Code>AccessDenied</Code>
<Message>Invalid according to Policy: Policy Condition failed: ["eq", "$acl", "public-read"]</Message>
我生成预签名网址的后端代码
const params ={
Bucket:'bucket-name',
Fields:{
key:'key-name',
acl: 'public-read'
},
Expires:30*600,
Conditions:[
{"acl": "public-read"},
]
}
;
s3.createPresignedPost(params,(error,data) =>{
console.log(error)
res.send(data)
})
还有我的 IAM 用户政策
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::bucket-name/*"
}
]
}
我的 CORS 政策
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"DELETE",
"GET",
"HEAD"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
注意:我公开了 s3 存储桶,但同样的错误仍然存在
【问题讨论】:
-
您的客户端是否包含 acl=public-read 的 POST 表单字段?
-
@jarmod 哦,我完全错过了,非常感谢,现在消息被拒绝访问,你知道为什么吗?
-
URL无所谓,body包含什么?
-
您是说现在您添加了 acl=public-read,但您遇到了不同的错误消息?还是“拒绝访问”但是不再抱怨acl了?
-
我认为您的意思是,如果您在
arn:aws:s3:::bucket-name/*上使用允许s3:*的 IAM 策略,它现在可以工作,但它不适用于同一资源 ARN 上的s3:PutObject。您可能还需要s3:PutObjectAcl,因为您提供了 ACL。
标签: node.js amazon-web-services amazon-s3