在同一区域使用 S3 存储桶的 AWS Cloudfront Origin 故障转移

AWS Cloudfront Origin Failover with S3 buckets in same region

第一个存储桶,something-cf-validate-origin-primary-devops,在 S3 存储桶的根目录中有 index.html 内容,

<html>
<body>
Home page
</body>
</html>

第二个存储桶,something-cf-validate-origin-failover-devops,在 S3 存储桶的根目录中有 index.html。

<html>
<body>
Maintenance page
</body>
</html>

两个 S3 存储桶都启用了静态 Web 托管并可通过端点公开访问。

Cloudfront Distribution 包含两个 Origins。

来源组如下,

行为指向 Origin 组,

Cloudfront 的默认根对象设置为 index.html

当我点击 Cloudfront Distribution 的域名时,我得到 "Home Page"。

当我在第一个存储桶中将 index.html 重命名为 index-disable.html 时,我应该得到 "Maintenance Page" 因为 Cloudfront 故障转移应该为第二个存储桶中的页面提供服务,因为它从第一个桶。

但是当我将 index.html 重命名为 index-disable.html.

时,我得到 "Access Denied"

您获得的状态是 403。

来自 AWS documentation

Check if the requested object exists in the bucket. If a user doesn’t have s3:ListBucket permissions, then the user gets Access Denied errors for missing objects instead of 404 Not Found errors. Run this AWS CLI command to check if an object exists in the bucket

本例中的用户是 Bucket Policy,因此需要授予 s3:ListBucket 权限。

403 也可以更容易地进行故障转移。