功能请求:为不支持每对象 ACL 的 S3 后端启用安全上传

问题

不支持对象级 ACL 的 S3 兼容后端上,secure_uploads 无法与公开提供的内容共存。

头像和主题/站点资源似乎是通过直接的、未经身份验证的 S3 URL 提供的,这需要对象具有公开读取权限。但在我的理想设置中,同一个存储桶还包含安全的帖子上传,这些内容应保持私有——而且两者(公开文件和私有文件)共享相同的路径前缀(original/...optimized/...)。如果没有对象级 ACL,就无法让公开文件公开而其他文件私有。

我目前的情况: 头像和资源已损坏(存储桶为私有 → 这些文件返回 403 错误),而安全的帖子上传通过 /secure-uploads/ 代理正常工作。

核心冲突

安全上传需要经过身份验证的读取路径;头像/资源需要未经身份验证的读取路径。两者都位于同一个存储桶级边界之后,在没有对象级 ACL 的情况下,该边界无法区分它们。

请求的解决方案

  1. 当存储桶为私有且 ACL 被禁用时,通过预签名 URL 提供头像/资源——使用与安全上传相同的机制。从我的角度来看,对于非公开的 Discourse 实例场景,这也可能仅对已登录用户生效。
  2. 支持为公开资源和安全上传使用单独的存储桶或前缀,以便访问边界与公开/私有边界对齐,并可以创建合适的 ACL。

这两种方法是否可行,或者是否有我遗漏的已支持路径?