[英]AWS: s3 bucket policy does not give IAM user access to upload to bucket, throws 403 error
我有一个S3 存储桶,可以完美地与根凭证( AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
)一起将文件上传到存储桶。
我创建了一个IAM 用户。
我试图通过创建此策略并将其附加到该存储桶来授予该IAM 用户将文件上传到该存储桶的权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::122xxxxxxxx28:user/iam-user-name"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucket-name"
}
]
}
但是,当我尝试上传文件时,出现此错误:
这是上传的工作方式:
我在后端生成一个预签名 URL:
var getImageSignedUrl = async function (key) { return new Promise((resolve, reject) => { s3.getSignedUrl( "putObject", { Bucket: AWS_BUCKET_NAME, Key: key, ContentType: "image/*", ACL: "public -read", Expires: 300, }, (err, url) => { if (err) { reject(err); } else { resolve(url); } } ); }); };
然后使用 url 将文件上传到前端:
等待 axios.put(uploadConfig.url, file, { headers: { "Content-Type": file.type, "x-amz-acl": "public-read", }, transformRequest: (data, headers) => { delete headers.common["Authorization"]; return data; }, });
您可能需要更换:
"Resource": "arn:aws:s3:::bucket-name"
和:
"Resource": ["arn:aws:s3:::bucket-name","arn:aws:s3:::bucket-name/*"]
S3:PutObject 之类的操作适用于存储桶中的特定对象,例如:bucket-name/image_1.png,因此添加通配符资源可以访问这些 object 操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.