基于AWS S3与CloudFront的无服务器应用如何禁用80端口?
禁用S3+CloudFront架构下的HTTP(80端口)访问
你的应用基于S3和CloudFront搭建、未使用EC2,要禁用80端口(禁止HTTP访问),核心是从CloudFront层强制HTTPS,同时限制S3的直接HTTP访问,具体操作步骤如下:
1. 让CloudFront强制重定向HTTP到HTTPS
- 打开CloudFront控制台,找到目标分发,进入「行为」标签页编辑对应行为规则
- 将「查看协议政策」改为重定向HTTP到HTTPS,所有走80端口的请求会自动转到443端口的HTTPS
- 保存更改后,等待CloudFront完成分发更新(一般几分钟到半小时不等)
2. 确保CloudFront的SSL证书配置正常
- 如果使用了自定义域名,需在CloudFront分发的「设置」里,为自定义域名配置ACM(AWS证书管理器)的SSL证书,证书要部署在us-east-1区域(CloudFront要求),保证HTTPS访问正常
3. 限制用户直接HTTP访问S3存储桶
方法一:使用Origin Access Control(OAC)
- 在CloudFront分发的「源」设置里,将S3源的访问方式改为Origin Access Control,创建并关联对应的OAC策略
- 配置后仅CloudFront能访问S3桶,用户无法直接通过HTTP访问S3域名绕开CloudFront
方法二:配置S3 Bucket Policy
- 打开S3控制台,找到目标桶的「权限」标签,编辑Bucket Policy,添加以下规则(替换占位符为实际信息):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::你的存储桶名称/*", "Condition": { "Bool": { "aws:SecureTransport": "false" }, "StringNotEquals": { "aws:SourceArn": "arn:aws:cloudfront::你的AWS账号ID:distribution/你的CloudFront分发ID" } } } ] }
- 该规则会拒绝所有非CloudFront发起的HTTP请求,同时允许CloudFront的HTTPS请求访问桶内容
4. 验证配置效果
- 尝试用HTTP地址访问应用,应自动跳转到HTTPS
- 直接访问S3的HTTP地址(如
http://你的存储桶.s3.amazonaws.com),应收到访问拒绝的错误
内容的提问来源于stack exchange,提问作者Garry
相关产品推荐
相关产品推荐

