1

我有一个 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/*"
                ]
            }
        }
    }
]
}

根据refererS3 文档的要求,它包含在请求标头中,如下所示:

开发工具网络选项卡

如果我确实Condition从上述策略中删除,它将允许访问图像,但这不是我想要的。

顺便说一句,我在 SO 和其他地方看到了相关问题,但他们没有解决这个具体问题。

4

1 回答 1

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"
            ]
        }
    }
于 2020-12-16T16:15:17.407 回答