【问题标题】:Cloudfront 403 error while accessing files uploaded by another account访问其他帐户上传的文件时出现 Cloudfront 403 错误
【发布时间】:2017-01-30 22:34:59
【问题描述】:

我有一个 Cloudfront 发行版,它将我的一个 s3 存储桶作为其源服务器。这些文件由第三方附件上传器上传到 s3。

当我尝试通过 cloudfront 访问 s3 中的文件时,我收到 403 Forbidden 错误,并带有 Access Denied XML(如下所示)。但是当我手动将文件上传到 s3 存储桶时,我可以通过云端访问该文件。

这两个文件的权限是相同的,除了文件的所有者。对于我手动上传的文件的所有者,文件的所有者是我的帐户,对于上传者上传的文件,它是上传者。第三方附件上传者将对象的完全访问权限授予存储桶所有者。另外,我限制了存储桶访问权限,但没有查看者访问权限。

可能导致此错误的原因是什么?我该如何调试呢?

【问题讨论】:

  • 当您将对象上传到 S3 存储桶时,该对象会变为公共对象吗?
  • 我不相信。权限适用于我上传时使用的帐户。
  • 您是使用存储桶策略还是 acl 设置权限?
  • 对于对象的权限是通过 acl。对于上传文件的第 3 方小部件,我有一个存储桶策略。

标签: amazon-web-services file-upload amazon-s3 amazon-cloudfront


【解决方案1】:

当第二个 AWS 账户通过 CloudFront 使用 OAI 将内容上传到提供内容的 S3 存储桶时,上传的文件需要添加带有 --grant read=id="OAI-canonical-ID" 的 OAI 规范 ID。文件已上传;还将 S3 存储桶所有者添加为授权 full=id="BucketOwnerID"。 aws cli 用于执行上传。根据使用的方法进行调整。 在 S3 存储桶中查看文件时,权限将 CloudFront 列为被授权者。该文件应该可以通过 CloudFront 读取。

【讨论】:

    【解决方案2】:

    您收到的“拒绝访问”响应可能是来自 S3 的响应,该响应在对象在 S3 中可用之前由 CloudFront 缓存。

    例如,如果您尝试使用 CloudFront URL 并且该文件在 S3 中不存在,那么您将收到“拒绝访问”响应。即使在上传文件之后,CloudFront 也会缓存“拒绝访问”响应,直到 TTL 结束。在此期间,您将继续收到“拒绝访问”响应。

    尝试使分发无效。之后,请求文件并查看是否得到正确的响应。

    如果这解决了问题,那么您需要弄清楚如何避免在对象存在于 S3 之前从 CloudFront 请求它。

    【讨论】:

    • 缓存最小 TTL can be set to 0 的错误,禁用此行为,如果这是原因。我倾向于认为第 3 方未能(或未配置为)指定 x-amz-acl: bucket-owner-full-control 或上传的另一个适当值,这将阻止 CloudFront 源访问身份(假设正在使用)访问对象。
    • 我在s3上传文件后添加了云端分发。所以我认为这不是问题所在。
    • 非常感谢@Michael-sqlbot 就是这样。您的评论应该是答案!
    猜你喜欢
    • 2020-02-18
    • 2020-05-09
    • 1970-01-01
    • 2020-06-11
    • 2021-11-08
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多