S3托管网站通过VPC接口端点访问提示存储桶不存在如何解决
问题根因与解决方案
核心错误点
你遇到的报错来自两个配置偏差:
- 端点类型不兼容
你公网访问用的http://mywebsite.com.s3-website-us-east-1.amazonaws.com是S3专属的网站端点,支持静态网站托管的默认索引页、错误页、重定向等逻辑;而你创建的S3 VPC接口端点属于S3 REST API端点,仅支持原生对象API操作,不兼容静态网站托管的特殊规则。 - URL寻址规则错误
你当前用的私有访问URLhttp://mywebsite.com.vpce-xxxxx-xxx.s3.us-east-1.vpce.amazonaws.com不符合S3接口端点的寻址规范:S3解析虚拟主机格式的URL时,会将域名中第一个.到.s3.<region>之间的全部内容识别为存储桶名,这就导致你实际请求的存储桶名变成了mywebsite.com.vpce-xxxxx-xxx,自然会提示存储桶不存在。
两种可行落地路径
路径1:使用S3 VPC网关端点(推荐,无额外成本)
S3网关端点是专门用于VPC内部访问S3的网关类端点,完全兼容S3静态网站托管能力:
- 删除当前的S3接口端点,为你所用的VPC创建S3网关端点,关联需要访问S3的子网路由表
- 在S3存储桶策略中添加访问限制,仅允许该网关端点或对应VPC的CIDR段访问存储桶
- 私有访问时直接使用原有S3网站端点URL即可,VPC内/VPN接入的流量会自动通过网关端点走AWS内部链路,不会流出公网
路径2:保留现有接口端点的改造方案
如果必须保留当前的S3接口端点,需要放弃S3静态网站托管的特殊能力,调整访问方式:
- 改用路径式寻址访问:
http://vpce-xxxxx-xxx.s3.us-east-1.vpce.amazonaws.com/mywebsite.com/index.html - 或者调整为正确的虚拟主机寻址格式:
http://mywebsite.com.s3.us-east-1.vpce.amazonaws.com,同时确保你的VPC已经开启S3私有DNS功能,请求会自动路由到你创建的接口端点 - 注意:该方式无法使用默认索引页、错误页等静态网站托管功能,访问子路径时需要手动补全
index.html后缀
内容的提问来源于stack exchange,提问作者Vipin Jain
相关产品推荐
相关产品推荐

