nodeJS的AWS S3 403访问被拒绝问题
Posted
技术标签:
【中文标题】nodeJS的AWS S3 403访问被拒绝问题【英文标题】:AWS S3 403 access denied issue with nodeJS 【发布时间】:2020-04-02 18:35:47 【问题描述】:以下是我的存储桶策略
"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 属性,我可以毫无问题地上传。
【问题讨论】:
【参考方案1】:您现在可能已经解决了这个问题,但如果您还没有,还有许多不同的可能解决方法(请参阅: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)
处理了存储桶。事实证明,您应该始终将存储桶添加到您的上传参数中。
【讨论】:
以上是关于nodeJS的AWS S3 403访问被拒绝问题的主要内容,如果未能解决你的问题,请参考以下文章
在不同账户的 Lambda 中从 AWS Athena 查询 S3 文件时访问被拒绝
测试 AWS S3 Presigned Url 返回 403 Forbidden (Nodejs)