使用CloudFront时,S3上的自定义重定向规则返回403

时间:2017-08-18 08:37:39

标签: amazon-web-services amazon-s3 amazon-cloudfront

我在S3上有一个自定义重定向规则:

<RoutingRules>
  <RoutingRule>
    <Condition>
      <KeyPrefixEquals/>
      <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <Protocol>https</Protocol>
      <HostName>example2.com</HostName>
      <ReplaceKeyPrefixWith>services/create?key=</ReplaceKeyPrefixWith>
      <HttpRedirectCode>307</HttpRedirectCode>
    </Redirect>
  </RoutingRule>
</RoutingRules>

我的桶有适当的政策:

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::example.com/*"
        }
    ]
}

当我通过其内部网址http://example.com.s3-website-us-east-1.amazonaws.com访问它并且它正确地将我重定向到我的其他服务器时,这可以正常工作。

但是,它不适用于我的CloudFront设置。当我尝试直接访问它(http://example.com/images/dummy.jpg)时,我收到 403 AccessDenied

2 个答案:

答案 0 :(得分:4)

显然,当使用默认的S3存储桶作为原点时 - 它不会尊重重定向规则。

默认情况下,它会尝试使用:

example.com.s3.amazonaws.com,但您应该将其强制为自定义来源:

example.com.s3-website-us-east-1.amazonaws.com代替。

一旦我强迫它,它开始起作用。

答案 1 :(得分:0)

如果您收到带有标准 S3 重定向的 403,请确保您指向根目录中的文件:

enter image description here