node.js - nodeJS的AWS S3 403访问被拒绝问题
问题描述
以下是我的存储桶策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddCannedAcl",
"Effect": "Allow",
"Principal": {
"AWS": "==mydetails=="
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::etcetera-dev/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "public-read"
}
}
}
]
}
这是我的 Iam 用户内联政策
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:PutObject",
"s3:GetObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
现在我正在尝试使用 multer-s3 上传文件acl:'public-read'
,但我收到 403 访问被拒绝。如果我不在 multer 中使用 acl 属性,我可以毫无问题地上传。
解决方案
您现在可能已经解决了这个问题,但如果您还没有解决,还有许多不同的可能解决方法(请参阅:https ://aws.amazon.com/premiumsupport/knowledge-center/s3-troubleshoot-403/ )。
但是我遇到了同样的问题,为我解决的问题如下。s3.upload()
我想您在尝试上传文件时正在打电话。我发现如果您的upload()
选项中没有 Bucket 参数,您也会收到 403。
即确保您的upload()
电话如下:
await s3.upload({
Bucket: // some s3Config.Bucket
Body: // Stream or File,
Key: // Filename,
ContentType: // Mimetype
}).promise();
Bucket: // some s3Config.Bucket
- 我在函数调用中错过了这个参数,因为我认为它new AWS.S3(config)
处理了存储桶。事实证明,您应该始终将存储桶添加到您的上传参数中。
推荐阅读
- python - Python virtualenvs bin 文件夹没有 Python
- postgresql - SonarQube 8.5 的 PostgreSQL 连接失败
- java - 从图库中获取多张图像并制作 pdf
- azure-active-directory - 更改“本地主控目录同步对象”
- reactjs - 反应路线未呈现(另外为 main.js 获得 404)
- java - 尝试使用或不使用参数发出请求
- ios - 带有图像和标题的 UIBarButtonItem 初始化程序不显示标题
- javascript - 一周中的 JavaScript 函数练习日
- javascript - 如何从类构造函数中捕获代理“设置”操作?
- postman - 在 Postman 中使用 XML 响应作为变量