AWS S3 - 限制对引用者的访问时访问被拒绝
Posted
技术标签:
【中文标题】AWS S3 - 限制对引用者的访问时访问被拒绝【英文标题】:AWS S3 - Access denied when restricting access to referer 【发布时间】:2021-03-22 18:36:03 【问题描述】:我有一个 Next.js 应用,使用新的 next/image 功能,在尝试使用以下策略访问 S3 对象时收到 403-Access denied:
"Version": "2012-10-17",
"Statement": [
"Sid": "PublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::bucket-name/*",
"Condition":
"StringLike":
"aws:Referer": [
"https://my-website.com/*",
"http://localhost:3000/*"
]
]
根据 S3 文档的要求,referer
包含在请求标头中,如下所示:
如果我确实从上述策略中删除了 Condition
,它将授予对图像的访问权限,但这不是我想要的。
顺便说一句,我在 SO 和其他地方看到过相关问题,但他们没有解决这个具体问题。
【问题讨论】:
看到localhost
作为Referer 很奇怪。这可能不是 S3 在收到请求时看到的值。顺便说一句,使用Referer
不是很安全——很容易伪造该值,因此不应使用它来限制对任何敏感数据的访问。
【参考方案1】:
最近我也开始遇到这个问题,从 Chrome 开始,然后是 Firefox(Edge 仍在工作)。为了寻找解决方案,我像您所说的那样删除了Condition
,它确实有效。
在检查了referer
条件可能有什么问题后,发现发送引用的格式发生了变化:而不是格式“https://example.com/”,我看到了格式'https://example.com' 用于我的 HTTP 请求(因此没有斜杠)。本地主机的引用发送是 'http://null'。
在存储桶策略中更改它对我有用。
所以对你来说,你的情况应该是这样的
"Condition":
"StringLike":
"aws:Referer": [
"https://my-website.com*",
"http://null"
]
【讨论】:
以上是关于AWS S3 - 限制对引用者的访问时访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
尽管用户角色,AWS Batch 作业在 S3 上被拒绝访问