一、为什么选择S3+CloudFront作为AWS入门第一站
对于刚完成AWS账户注册的新手而言,面对控制台中200+项服务,往往会陷入无从下手的困境。S3(Simple Storage Service)和CloudFront是AWS生态中最基础、最常用且性价比最高的组合,也是绝大多数静态网站、资源托管、媒体分发场景的首选架构。
1. 组合核心优势
- 零运维门槛:无需管理任何服务器,全程图形化操作,15分钟即可完成完整部署
- 免费套餐友好:S3免费套餐包含5GB标准存储、20000次GET请求;CloudFront免费套餐包含50GB数据传出、200万次HTTP/HTTPS请求,足够个人开发者使用12个月
- 全球极速体验:CloudFront拥有全球400+边缘节点,可将内容分发至离用户最近的节点,平均降低70%以上的访问延迟
- 企业级安全:S3提供99.999999999%(11个9)的数据持久性,CloudFront内置AWS Shield Standard DDoS防护、WAF集成能力
- 无缝扩展:与Route 53、Certificate Manager、Lambda@Edge等服务原生集成,无需重构即可实现功能升级
2. 前置准备清单
在开始本教程前,请确保您已完成:
- AWS账户注册并通过信用卡/借记卡账单验证
- 登录AWS管理控制台(https://console.aws.amazon.com/)
- 创建了具有AdministratorAccess权限的IAM用户(强烈禁止使用根用户进行日常操作)
- 准备好一个域名(可选,但推荐用于自定义域名访问)
二、第一步:创建并配置S3存储桶
S3是AWS提供的对象存储服务,我们将用它来托管静态网站内容(HTML、CSS、JS、图片、视频等)。
1. 创建S3存储桶
- 在AWS控制台顶部搜索栏输入"S3",进入S3管理控制台
- 点击右上角橙色的"Create bucket"按钮
- 配置存储桶基本信息(关键参数说明):
- Bucket name:必须是全球唯一的DNS兼容名称,建议使用"项目名-日期-随机数"格式(例如:my-blog-20260610-789),避免使用易被猜测的名称
- AWS Region:中国用户推荐选择"ap-southeast-1(新加坡)"或"us-east-1(弗吉尼亚北部)",前者对国内访问延迟更低
- Object Ownership:保持默认的"ACLs disabled (recommended)",这是AWS推荐的现代权限管理方式
- Block Public Access settings for this bucket:取消勾选"Block all public access",并在弹出的警告框中勾选确认
- Bucket Versioning:选择"Disable"(新手阶段无需开启,开启后会产生额外存储费用)
- Default encryption:选择"Disable"(静态网站内容通常无需加密)
- 点击页面底部的"Create bucket"按钮,等待2-3秒即可完成创建
2. 启用S3静态网站托管
- 在S3控制台中,点击刚刚创建的存储桶名称,进入详情页
- 切换到"Properties"标签页
- 向下滚动找到"Static website hosting"模块,点击"Edit"按钮
- 配置静态网站托管:
- 选择"Enable"
- Index document:输入"index.html"(这是您网站的首页文件名)
- Error document:输入"error.html"(可选,用于自定义404等错误页面)
- 点击"Save changes"按钮
- 保存后,您将在该模块看到一个"Bucket website endpoint",格式为:
http://your-bucket-name.s3-website-region.amazonaws.com
请务必记下这个URL,后续验证会用到
3. 配置存储桶策略允许公共读取
- 切换到"Permissions"标签页
- 向下滚动找到"Bucket policy"模块,点击"Edit"按钮
- 在策略编辑器中,输入以下JSON策略(请将your-bucket-name替换为实际存储桶名称):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadForStaticWebsite",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
4. 上传网站内容到S3
- 切换到"Objects"标签页
- 点击"Upload"按钮
- 点击"Add files"或"Add folder",选择您本地的网站文件
- 保持其他默认设置,点击"Upload"按钮
- 上传完成后,在浏览器中输入之前记下的S3网站端点,验证网站是否可以正常访问
三、第二步:配置CloudFront CDN加速
虽然S3静态网站已经可以访问,但直接访问存在明显缺陷:全球用户访问延迟差异大、不支持HTTPS自定义域名、无法隐藏源站地址、缺乏DDoS防护。CloudFront作为AWS的全球CDN服务,可以完美解决这些问题。
1. 创建CloudFront分发
- 在控制台顶部搜索栏输入"CloudFront",进入CloudFront管理控制台
- 点击右上角橙色的"Create distribution"按钮
- Origin(源站)配置(最关键部分):
- Origin domain:从下拉列表中选择您的S3存储桶(注意:不要选择带有"website"后缀的端点,直接选择存储桶域名)
- Name:保持默认或输入一个有意义的名称
- Origin access:选择"Origin access control settings (recommended)"(这是AWS最新推荐的安全访问方式,替代旧的OAI)
- 点击"Create control setting"按钮,保持所有默认设置,点击"Create"
- Enable Origin Shield:选择"No"(新手阶段无需开启,会增加费用)
- Default cache behavior(默认缓存行为)配置:
- Path pattern:保持为"Default (*)"
- Compress objects automatically:勾选"Yes"(自动压缩Gzip/Brotli,提升传输速度)
- Viewer protocol policy:选择"Redirect HTTP to HTTPS"(强制HTTPS访问)
- Allowed HTTP methods:选择"GET, HEAD"(静态网站只需要这两个方法)
- Cache key and origin requests:保持默认的"Cache policy and origin request policy (recommended)"
- Cache policy:选择"CachingOptimized"(AWS优化的静态内容缓存策略)
- Settings(分发设置)配置:
- Price class:选择"Use North America, Europe, Asia, Middle East, and Africa"(覆盖主要用户群体,避免选择包含南美和澳大利亚的价格等级以降低成本)
- Alternate domain names (CNAMEs):如果您有自定义域名,点击"Add item",输入您的域名(例如:www.example.com)
- Custom SSL certificate:如果添加了自定义域名,需要选择一个AWS Certificate Manager(ACM)中的SSL证书。如果还没有证书,点击"Request certificate",按照向导完成DNS验证
- Default root object:输入"index.html"(与S3静态网站托管中的索引文档一致)
- Standard logging:选择"Off"(新手阶段无需开启日志)
- IPv6:保持为"On"
- 点击页面底部的"Create distribution"按钮
- 等待分发部署完成,这通常需要5-15分钟。当"Status"列变为"Deployed"时,表示分发已生效
2. 更新S3存储桶策略限制仅CloudFront访问
这是提升安全性的关键步骤,可以防止用户绕过CloudFront直接访问S3源站。
- 在CloudFront控制台中,点击您刚刚创建的分发名称,进入详情页
- 切换到"Origins"标签页
- 找到您的S3源站,点击右侧的"Copy policy"按钮
- 回到S3控制台,进入存储桶详情页的"Permissions"标签页
- 找到"Bucket policy"模块,点击"Edit"按钮
- 删除之前的公共读取策略,粘贴刚刚从CloudFront复制的策略
- 点击"Save changes"按钮
3. 配置自定义域名解析
如果您添加了自定义域名,需要在域名解析服务商处添加CNAME记录:
- 在CloudFront分发详情页,找到"Domain name",格式为:
d1234567890abc.cloudfront.net
记下这个域名
- 登录您的域名解析服务商控制台(如阿里云、腾讯云、Cloudflare)
- 添加一条CNAME记录:
- 主机记录:例如"www"
- 记录类型:CNAME
- 记录值:您的CloudFront分发域名
- TTL:设置为300秒(5分钟)
- 等待DNS解析生效,通常需要几分钟到几小时不等
四、验证与测试
1. 验证CloudFront加速效果
- 打开浏览器,访问您的CloudFront分发域名或自定义域名
- 按F12打开开发者工具,切换到"Network"标签页
- 刷新页面,点击第一个HTML请求
- 查看"Response Headers"部分:
- 如果包含 X-Cache: Hit from cloudfront ,表示内容已被缓存,加速生效
- 如果包含 X-Cache: Miss from cloudfront ,表示内容未被缓存,刷新页面后再次查看
2. 验证S3直接访问已被禁止
- 尝试直接访问之前记下的S3网站端点
- 如果显示"403 Forbidden"错误,表示配置成功,只有CloudFront可以访问S3内容
五、常见问题与优化建议
1. 常见问题解决
- CloudFront分发部署超过30分钟仍未完成
- 这是正常现象,AWS需要将配置同步到全球所有边缘节点
- 如果超过1小时仍未完成,可以尝试刷新页面或联系AWS支持
- 访问CloudFront显示403 Forbidden
- 检查S3存储桶策略是否已更新为CloudFront提供的策略
- 检查CloudFront源站配置是否正确,是否选择了不带"website"后缀的S3域名
- 检查CloudFront默认根对象是否设置为"index.html"
- 自定义域名访问显示证书错误
- 检查ACM证书状态是否为"Issued"
- 检查证书是否包含您的自定义域名
- 检查证书是否已在CloudFront中正确选择
- 检查DNS解析是否已生效
2. 性能优化建议
- 设置合适的缓存TTL:对于图片、CSS、JS等静态资源,将缓存TTL设置为31536000秒(1年);对于HTML文件,设置为3600秒(1小时)
- 使用版本化文件名:对于静态资源,使用带有哈希值的文件名(如 style.abc123.css ),这样更新内容时浏览器会自动下载新版本
- 启用CloudFront Functions:用于实现简单的URL重写、请求重定向等功能,比Lambda@Edge更便宜、更快
- 配置缓存键优化:移除不必要的查询字符串和Cookie,提高缓存命中率
3. 成本控制建议
- 监控使用量:定期查看AWS Billing控制台,监控S3存储和CloudFront数据传出费用
- 设置预算告警:在Billing控制台中设置预算,当费用超过阈值时收到邮件通知
- 清理无用内容:定期删除S3中不再需要的对象
- 启用S3智能分层:对于不经常访问的内容,自动转移到更便宜的存储类别
通过本教程,您已经成功完成了AWS开户后的首次完整部署:创建了S3存储桶并配置了静态网站托管,然后使用CloudFront实现了全球CDN加速。这个架构不仅简单易用,而且具有极高的可扩展性,可以满足从个人博客到中型企业网站的需求。
相关阅读:
谷歌云开户团队权限混乱?角色分配 + 访问控制避坑方案
谷歌云开户域名绑定失败:DNS配置 + 所有权验证问题解决
阿里云国际开户API调用超限:配额提升申请 + 费用封顶设置
AWS云开户账号被暂停?违规申诉材料准备与恢复步骤
腾讯云国际开户CAM权限配置指南:用户、角色、策略最佳实践