我正在将 CloudFront 与 Amazon S3 源结合使用。为什么我无法访问我的文件?

1 分钟阅读
0

我使用 Amazon Simple Storage Service (Amazon S3) 存储桶作为我的 Amazon CloudFront 分配源,但我无法访问或下载 S3 存储桶中的文件。该如何排查此问题?

解决方法

解决“403 访问被拒绝”错误

如果 CloudFront 返回“403 访问被拒绝”错误,请根据您的使用场景参阅以下指南:

查看您的 CloudFront 地理限制

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

有关更多信息,请参阅限制您的内容的地理分配

确认您没有使用 S3 网站终端节点实施 HTTPS

Amazon S3 网站终端节点不支持 HTTPS。如果您使用 CLI、API 或软件开发工具包配置了 CloudFront 分配,请确认您没有使用 S3 网站终端节点源强制执行 HTTPS。

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

要使用 HTTPS,请将 CloudFront 与 S3 REST API 终端节点源结合使用。有关更多信息,请参阅如何使用 CloudFront 为我的 Amazon S3 存储桶提供 HTTPS 请求?

确认您的 S3 对象小于 30GB

HTTP GET、POST 和 PUT 请求允许的最大文件大小为 30GB。如果文件大于 30GB,则会收到 400 “BadRequest”错误。

有关更多信息,请参阅一般分配配额

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

如果您在 S3 对象键名称中使用特殊字符,则可能需要对它们进行特殊处理。有关详细信息,请参阅对象键命名指南

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

CloudFront 分配不会返回子目录中的默认根对象,即使该对象是在您的分配中配置的。有关更多信息,请参阅指定原定设置根对象

作为解决方法,您可以使用 Lambda@Edge 从子目录返回默认根对象。有关更多信息,请参阅使用 Lambda@Edge 执行 Amazon S3 支持的 Amazon CloudFront 源中原定设置的目录索引

确认您没有将主机标头与 S3 源一起使用

对于 Amazon S3 源,不支持基于主机标头进行缓存或转发主机标头。有关更多信息,请参阅选择用作缓存基础的标头

解决“No 'Access-Control-Allow-Origin' header is present on the requested resource”(请求资源上没有“Access-Control-Allow-Origin”标头)错误

请参阅如何解决 CloudFront 发出的“No 'Access-Control-Allow-Origin' header is present on the requested resource”(请求资源上没有“Access-Control-Allow-Origin”标头)错误?中的解决步骤


相关信息

对来自源的错误响应进行问题排查

AWS 官方
AWS 官方已更新 2 年前