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

Setting Content Disposition with CloudFront/S3 without Signed URLs

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

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

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

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

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

为了让 CloudFront 向 S3 来源验证自身,必须将 Restrict Bucket Access 来源设置设置为 Yes

该选项的命名非常糟糕,因为该选项实际上并没有做任何事情来限制对存储桶的访问。它应该被称为 "Authenticate Requests When Sending to Bucket" 之类的东西,因为这就是该选项实际启用的功能——使用源访问身份 (OAI) 来验证发送到存储桶的请求。

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

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