S3网站终端节点在忽略存储桶策略下进行301重定向

0

【以下的问题经过翻译处理】 这个Bucket授予特定来源IP的GET请求权限。

{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "BUCKETNAME/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "8.8.8.8"
                }
            }
        }
    ]
}

如果Bucket是这样设置的:

  • 静态网站托管:已启用
  • 托管类型:托管静态网站

那么,如果请求来自指定的IP之外:

然而,如果托管类型更改为“重定向对象的请求”,那么来自未经授权的IP的请求会导致:

重定向的目标无关紧要,我在测试中使用了google.com。如果将其设置为重定向到与Bucket URL不同的域名,则网站端点会忽略策略未授予GET权限的事实,并响应301重定向。

curl -v http://BUCKETNAME.s3-website-us-east-1.amazonaws.com
*   Trying 52.217.100.51:80...
* Connected to BUCKETNAME.s3-website-us-east-1.amazonaws.com (52.217.100.51) port 80 (#0)
> GET / HTTP/1.1
> Host: BUCKETNAME.s3-website-us-east-1.amazonaws.com
> User-Agent: curl/7.85.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 301 Moved Permanently
< x-amz-id-2: sqsvHiKbD... 
< x-amz-request-id: TNTFX...
< Date: Thu, 20 Apr 2023 19:59:25 GMT
< Location: http://google.com/
< Server: AmazonS3
< Content-Length: 0
<
* Connection #0 to host BUCKETNAME.s3-website-us-east-1.amazonaws.com left intact
* 

问题是策略是否还应阻止未经授权IP的网站端点的GET请求,因为目前它只会阻止对API端点的请求。

profile picture
专家
已提问 6 个月前54 查看次数
1 回答
0

【以下的回答经过翻译处理】 301重定向到哪里?是指“https://BUCKETNAME.s3.us-east-1.amazonaws.com/index.html”吗?如果是的话,最终结果将会是403错误。

更新:如果你将重定向到一个外部网站,那么该策略仍然按设计工作 - 此时它没有检索到对象,而是执行重定向,因此未执行“无法执行GetObject调用”的逻辑。 更大的问题:你在这里试图达到什么最终结果?如果你在桶内重定向,那么事情将会按预期工作:第一次调用将会重定向到一个对象,然后拒绝访问该对象。或者有另一种期望的结果吗?

更新二:API和网站端点肯定是不同的 - 在这种情况下(获取不存在对象的GET请求),API端点的行为像预期的一样,因为GET请求到达存储层,然后被计算存储策略,才能“看到”该对象是否存在。网站端点是不同的,因为它遵循Web服务器语义; 重定向首先生效 - 在这种情况下,它是针对一个不存在对象的。 我对Cloudflare不太熟悉,但如果你使用CloudFront做这个重定向,我会在CDN内的“www”站点进行重定向 - 这样你就不必拥有第二个存储桶,可以节省时间和成本。

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则