如何配置CloudFront:关联ALB、从S3取静态图及分流K8s Pod内容
CloudFront 多源配置方案(ALB + S3 静态资源分流)
一、前置准备
确保你已完成以下资源部署:
- 关联Kubernetes Pods的Application Load Balancer(ALB),且ALB可正常返回网站动态内容
- 存储静态图片的S3 Bucket,图片已上传完成
- 拥有AWS账号对应权限(CloudFront、S3、ALB的配置权限)
二、CloudFront 多源与行为规则配置
1. 添加双源配置
登录CloudFront控制台创建新分发,依次添加两个源:
- 源1:ALB 源
- 源类型选「自定义源」,输入ALB的完整域名(可从EC2控制台负载均衡器页面获取)
- 源协议策略根据ALB监听配置选择(推荐
HTTPS only保障安全) - 其余配置保持默认,后续可按需调整超时、重试等参数
- 源2:S3 Bucket 源
- 源类型选「S3存储桶」,从下拉列表选中目标图片存储Bucket
- 必须启用Origin Access Control (OAC):新建OAC,类型选「S3」并关联当前分发
- 切换到S3控制台,在Bucket「权限」页面添加以下桶策略(替换占位符为你的实际信息),确保仅CloudFront能访问Bucket内容:
{ "Version": "2008-10-17", "Id": "CloudFrontAccessPolicy", "Statement": [ { "Sid": "AllowCloudFrontAccess", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::your-aws-account-id:distribution/your-cloudfront-dist-id" } } } ] }
2. 配置路径分流行为
CloudFront通过行为规则的优先级匹配请求路径,实现分流:
- 默认行为(兜底规则)
- 路径模式设为
/* - 关联源选之前创建的ALB源
- 缓存策略选「Managed-CachingOptimized」(动态内容可适当缩短TTL)
- 路径模式设为
- 静态图片专属行为
- 点击「添加行为」,路径模式根据你的图片路径设置,比如
/*.jpg、/*.png、/images/*(覆盖所有图片格式或图片目录) - 关联源选S3 Bucket源
- 缓存策略选「Managed-CachingOptimized」,TTL可设为1小时以上(静态图片更新频率低,长TTL提升缓存命中率)
- 调整行为优先级:将图片行为的优先级设为高于默认行为(数字越小优先级越高),确保图片请求先匹配到S3源
- 点击「添加行为」,路径模式根据你的图片路径设置,比如
三、确保静态图片仅由CloudFront返回的关键校验
- 关闭S3 Bucket的静态网站托管功能,避免用户直接通过Bucket域名访问图片
- 在S3 Bucket「权限」页面开启「阻止所有公开访问」,彻底禁用直接访问
- 配置业务域名的CNAME记录,指向CloudFront分发域名(用户通过业务域名访问,而非直接访问ALB或S3)
- 验证:访问图片URL,查看响应头的
X-Cache字段,若显示Hit from cloudfront则缓存生效,由CloudFront直接返回;首次请求会显示Miss from cloudfront,后续会缓存
四、单独配置CloudFront代理S3静态图片的简化流程
如果仅需要用CloudFront分发S3静态图片,步骤如下:
- 创建CloudFront分发,源选择目标S3 Bucket并启用OAC
- 在S3 Bucket添加允许OAC访问的桶策略(同上文S3策略)
- 配置行为规则,路径模式设为
/*,缓存策略选适合静态资源的规则 - 配置CNAME将业务域名指向CloudFront分发域名
- 开启S3的「阻止所有公开访问」,确保所有请求走CloudFront
内容的提问来源于stack exchange,提问作者nethaaji
相关产品推荐
相关产品推荐

