在没有签名 URL 的情况下使用 CloudFront/S3 设置内容处置

Tom*_*ssi 4 amazon-s3 amazon-cloudfront

我有一些具有公共读取访问权限的对象,这些对象仅限于通过 CloudFront 提供服务。当我尝试将参数传递response-content-disposition到 CloudFront URL 时,收到 S3 错误:

Request specific response headers cannot be used for anonymous GET requests.

我读过 S3 不允许您设置内容处置,除非您使用签名 URL,但这不是一个选项。CloudFront 请求不应被视为匿名,因为它们使用存储桶策略进行身份验证。有什么办法可以配置它来工作吗?

如何在不使用签名 URL 的情况下设置内容处置?

Mic*_*bot 6

response-content-disposition匿名请求不支持此类请求选项,因此该错误表明 S3 没有看到任何存在的身份验证信息。

为了使 CloudFront 能够向 S3 源进行自身身份验证,Restrict Bucket Access源设置必须设置为Yes

该选项的命名非常糟糕,因为该选项实际上并没有执行任何限制对存储桶的访问的操作。它应该被称为“发送到存储桶时验证请求”,因为这就是该选项实际启用的功能 - 使用源访问身份 (OAI) 来验证发送到存储桶的请求。

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html#private-content-creating-oai-console

请注意,您的设置允许请求匿名通过这一事实可能意味着您的存储桶策略或对象 ACL 的限制性不够。