为什么我无法访问用作 CloudFront 分配源的 Amazon S3 存储桶中的文件?

1 分钟阅读
0

我使用 Amazon Simple Storage Service (Amazon S3) 存储桶作为 Amazon CloudFront 分配的源。但是,我无法访问或下载我的 Amazon S3 存储桶中的文件。

解决方案

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

对“403 拒绝访问”错误进行故障排除

如果 CloudFront 返回“403 拒绝访问”错误,请根据您的用例查看以下 AWS Knowledge Center 文章之一:

查看 CloudFront 地理限制

如果您的分配使用地理限制,请确认您没有限制请求来源的国家/地区

确认您没有对 S3 网站端点强制使用 HTTPS

Amazon S3 网站端点不支持 HTTPS。如果您使用了 AWS CLI、API 或 AWS SDK 来配置 CloudFront 分配,请确认您没有对网站端点源强制使用 HTTPS。

要检查您是否使用了 HTTPS,请使用 GetDistributionConfig API 或 AWS CLI 命令 get-distribution-config 获取分配配置。如果 OriginProtocolPolicy 设置为 https-only,请将 OriginProtocolPolicy 修改为使用 http-only

要使用 HTTPS,请将 CloudFront 与 S3 REST API 端点源一起使用。有关详细信息,请参阅可能需要特殊处理的字符

确认您的 S3 对象小于 50 GB

对于 GETPOSTPUT 请求,允许的最大文件大小为 50 GB。如果文件大于 50 GB,则您会收到 400“BadRequest”错误。

有关详细信息,请参阅分配的一般配额

检查 S3 对象键名称中是否有特殊字符

如果您在 S3 对象键名称中使用了特殊字符,则可能需要修改这些字符以确保 API 合规性。有关详细信息,请参阅对象键命名指南

确认您没有使用子目录中的默认根对象

CloudFront 分配不会返回子目录中的默认根对象,即使您在分配中配置了该对象也是如此。有关详细信息,请参阅指定默认根对象

解决方法是,您可以使用 Lambda@Edge 来返回子目录中的默认根对象。

确认您没有在 S3 源中使用主机标头

对于 Amazon S3 源,无法根据主机标头进行缓存或转发主机标头。有关详细信息,请参阅选择缓存所基于的标头

对“Access-Control-Allow-Origin 不存在”错误进行故障排除

要解决此问题,请参阅如何解决 CloudFront 中的“No 'Access-Control-Allow-Origin' header is present on the requested resource”(请求的资源上不存在 'Access-Control-Allow-Origin' 标头)错误?

相关信息

对 CloudFront 中的错误响应状态代码进行故障排除

AWS 官方
AWS 官方已更新 3 个月前