1

我有一个Cloudfront发行版,它将我的s3存储桶之一作为其原始服务器。这些文件由第三方附件上传者上传到s3。访问其他帐户上传的文件时出现Cloudfront 403错误

当我尝试通过cloudfront访问s3中的文件时,我得到一个拒绝访问XML(如下所示)的403 Forbidden错误。但是当我手动将文件上传到s3存储桶时,我可以通过cloudfront访问该文件。

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

Error returned by cloudfront

什么是这可能会导致这个错误的原因?我如何去调试呢?

+1

当您将对象上传到S3存储桶时,该对象是否变为公共? – error2007s

+0

我不相信。这些权限适用于我上传的帐户。 –

+1

您是否正在使用存储桶策略或acl设置权限? – imperalix

回答

2

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

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

尝试使分配无效。之后,请求文件,看看你是否得到正确的回应。

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

+1

错误缓存最小TTL [可以设置为0](http://stackoverflow.com/a/35541525/1695906),禁用此行为,如果这是原因。我倾向于认为第三方未能(或未配置)指定['x-amz-acl:bucket-owner-full-control'](http://docs.aws.amazon.com/ AmazonS3/latest/dev/acl-overview.html#canned-acl)或其他适当的值,这将阻止CloudFront原始访问标识(假设正在使用一个标识)访问该对象。 –

+0

我在s3上传文件后添加了cloudfront发行版。所以我不认为这可能是问题。 –

4

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

相关问题