某跨国互联网公司运营着一个面向全球用户的 UGC(用户生成内容)平台,用户需要频繁上传图片、短视频等大文件至 Amazon S3 存储桶。目前采用“客户端直传 S3”方案,运营一段时间后发现,跨区域上传经常出现延迟高、丢包率高的现象,严重影响了用户体验。该公司希望能够为全球用户都能获得低延迟的访问体验,传输过程要全程 HTTPS 加密、访问权限严格可控,同时使用自定义域名对外提供访问接口。
采用 Amazon CloudFront 作为 S3 的前置 CDN 内容分发加速器,配合 Route 53 DNS 解析和 AWS ACM SSL 证书,构建安全高效、可扩展的静态资源分发架构。S3 存储桶仅允许 CloudFront 通过源访问身份(OAC)访问,彻底阻断公网直接访问;CloudFront 作为全球 CDN 加速层,在边缘站点缓存内容,将延迟降至毫秒级;Route 53 负责将自定义域名解析至 CloudFront 分配域名;ACM 提供免费 SSL 证书,实现 HTTPS 加密传输。整个链路还集成 AWS Shield Standard,免费防御 DDoS 攻击,安全与性能兼得。
本次采用AWS Console界面完成作业。
注意:根据项目的具体情况,可以采用不同的实施方法。比如使用命令行(CLI)部署、代码部署 (CloudFomation、Terraform等)、以及其它开发语言(SDK)完成作业。
步骤一:创建 S3 存储桶
登录 AWS 控制台进入 S3 服务,创建一个 S3 存储桶,选择近源区域,保持"阻止所有公共访问"默认勾选。
步骤二:配置 S3 存储桶策略
在存储桶"权限"选项卡中,添加桶策略,仅允许来自 CloudFront 服务主体操作,条件限制为当前 CloudFront 分发的 ARN。
步骤三:创建 CloudFront 分发
在 CloudFront 控制台,点击"创建分发",选择一个付费计划或者选择按需付费,选择 Web or app 类型。源设置中选择 S3 origin,然后选择目标 S3 存储桶。Origin settings 和 Cache settings 都选择为默认设置。
步骤四:配置 DNS 记录
在 Route 53 托管区域或者第三方域名提供商的 DNS 配置中,创建 A 记录,值填入 CloudFront 分配的域名。
1. 在浏览器中访问 CloudFront 分配域名加文件路径,页面正常加载。
2. 多次刷新后查看响应头,x-cache 显示"Hit from cloudfront",证明内容已被边缘节点缓存。
3. 直接访问S3桶原始端点,应返回"Access Denied",证明存储桶依然完全私有。