問題
オブジェクトごとのACLをサポートしていないS3互換バックエンドでは、secure_uploadsと公開コンテンツを共存させることはできません。
アバターやテーマ/サイトアセットは、直接の非認証S3 URL経由で提供されているようです。これにはオブジェクトの公開読み込みが必要です。しかし、同じバケットには、私の希望する設定でプライベートに保たれるべきセキュアな投稿アップロードも含まれています。また、両者(公開ファイルとプライベートファイル)は同じパスプレフィックス(original/...、optimized/...)を共有しています。オブジェクトごとのACLがないため、公開ファイルを公開し、他のファイルをプライベートにすることはできません。
現在の状況: アバターとアセットが破損しています(バケットがプライベートであるため、これらのファイルに対して403エラーが発生)。一方、セキュアな投稿アップロードは/secure-uploads/プロキシ経由で正常に動作しています。
核心的な矛盾
セキュアなアップロードには認証済みの読み込みパスが必要ですが、アバター/アセットには非認証のパスが必要です。両者は同じバケットレベルの境界の背後にあり、オブジェクトごとのACLなしでは区別できません。
要望される解決策
- バケットがプライベートでACLが無効になっている場合、プリサインされたURL経由でアバター/アセットを提供する — セキュアなアップロードと同じメカニズムです。私の見解では、非公開のDiscourseインスタンスを持つシナリオでは、ログイン済みユーザーに対してのみこの方法で機能するようにすることも可能です。
- 公開アセットとセキュアなアップロードのために別々のバケットまたはプレフィックスをサポートし、アクセス境界が公開/プライベートの境界と一致し、適切なACLを作成できるようにする。
いずれかのアプローチが現実的でしょうか?それとも、見落としている既に対応済みの方法があるのでしょうか?