无需CloudFront,如何将S3静态网站从HTTP重定向到HTTPS?
跨AWS账户S3静态网站HTTP转HTTPS实现方案
方案一:CloudFront + 跨账户S3权限配置(推荐)
核心是通过配置S3桶权限,允许CloudFront的Origin Access Identity(OAI)访问跨账户S3内容,解决账户隔离的鉴权问题:
- 创建CloudFront分发(建议选Route53所在账户,便于证书验证):
- 源地址填写S3静态网站端点(如
example.com.s3-website-us-east-1.amazonaws.com,不要选S3 REST端点) - 创建或指定CloudFront OAI,在源设置中勾选「使用Origin Access Identity」
- 缓存行为配置:查看器协议政策选择「重定向HTTP到HTTPS」
- 添加自定义域名
example.com,关联us-east-1区域的ACM证书(域名由Route53托管时,可直接通过DNS验证证书)
- 源地址填写S3静态网站端点(如
- 配置S3桶策略:
在S3所在账户的桶中添加以下策略,替换OAI_ID和BUCKET_NAME为实际值,允许CloudFront OAI读取桶内内容:{ "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity OAI_ID" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::BUCKET_NAME/*" } ] } - 更新Route53记录:将
example.com的CNAME记录指向CloudFront分发域名
方案二:跨账户ALB + Route53配置
通过应用负载均衡(ALB)作为中间层,完成HTTPS终止和HTTP重定向:
- 在S3所在账户创建公网ALB:
- 配置两个监听:
- HTTP监听(80端口):设置重定向规则,将所有请求转发至HTTPS(443端口)
- HTTPS监听(443端口):关联ACM证书(可在Route53账户申请后共享至S3账户,或直接在S3账户申请并通过DNS验证)
- 配置目标组:目标类型选「IP」,将S3静态网站端点的IP地址添加至目标组(可通过ping S3网站端点获取IP)
- 配置两个监听:
- 配置S3桶权限:开启静态网站托管,设置桶策略允许ALB所在VPC的IP范围访问(不推荐设置为公共可读)
- 更新Route53记录:将
example.com的CNAME记录指向ALB域名
方案三:S3静态网站补充重定向(配合HTTPS入口使用)
S3静态网站仅支持HTTP,该方案用于补充边缘场景的重定向逻辑,需结合上述任意HTTPS入口:
- 在S3桶的静态网站托管设置中添加重定向规则:
该规则会将S3返回404的请求重定向至HTTPS地址,覆盖主重定向逻辑未覆盖的场景<RoutingRules> <RoutingRule> <Condition> <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals> </Condition> <Redirect> <Protocol>https</Protocol> <HostName>example.com</HostName> <ReplaceKeyWith>${key}</ReplaceKeyWith> </Redirect> </RoutingRule> </RoutingRules>
内容的提问来源于stack exchange,提问作者Arshad
相关产品推荐
相关产品推荐

