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

Gil*_*vik 5 amazon-s3 amazon-web-services 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>
Run Code Online (Sandbox Code Playgroud)

我的水桶有一个正确的政策:

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

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

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

Gil*_*vik 5

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

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

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

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

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

  • 正确。[*“在”创建分配“页面上”源设置“部分的”源域名“中,为您的存储桶键入Amazon S3静态网站托管终端节点。例如,* example.com.s3-website-us-east-1。 **注意** *请确保指定静态网站托管终端节点,而不是存储桶的名称。“ *](http://docs.aws.amazon.com/AmazonS3/latest/dev/website -hosting-cloudfront-walkthrough.html)如果从列表中选择存储桶,则CloudFront会连接到存储桶的REST端点,而不是网站端点。 (3认同)