機能リクエスト: オブジェクトごとにACLを持たないS3バックエンドへのセキュアアップロード

問題

オブジェクトごとのACLをサポートしていないS3互換バックエンドでは、secure_uploadsと公開コンテンツを共存させることはできません。

アバターやテーマ/サイトアセットは、直接の非認証S3 URL経由で提供されているようです。これにはオブジェクトの公開読み込みが必要です。しかし、同じバケットには、私の希望する設定でプライベートに保たれるべきセキュアな投稿アップロードも含まれています。また、両者(公開ファイルとプライベートファイル)は同じパスプレフィックス(original/...optimized/...)を共有しています。オブジェクトごとのACLがないため、公開ファイルを公開し、他のファイルをプライベートにすることはできません。

現在の状況: アバターとアセットが破損しています(バケットがプライベートであるため、これらのファイルに対して403エラーが発生)。一方、セキュアな投稿アップロードは/secure-uploads/プロキシ経由で正常に動作しています。

核心的な矛盾

セキュアなアップロードには認証済みの読み込みパスが必要ですが、アバター/アセットには非認証のパスが必要です。両者は同じバケットレベルの境界の背後にあり、オブジェクトごとのACLなしでは区別できません。

要望される解決策

  1. バケットがプライベートでACLが無効になっている場合、プリサインされたURL経由でアバター/アセットを提供する — セキュアなアップロードと同じメカニズムです。私の見解では、非公開のDiscourseインスタンスを持つシナリオでは、ログイン済みユーザーに対してのみこの方法で機能するようにすることも可能です。
  2. 公開アセットとセキュアなアップロードのために別々のバケットまたはプレフィックスをサポートし、アクセス境界が公開/プライベートの境界と一致し、適切なACLを作成できるようにする。

いずれかのアプローチが現実的でしょうか?それとも、見落としている既に対応済みの方法があるのでしょうか?