概要
- S3に画像アップロードを行う歳のオブジェクト(ファイル)ポリシーについて若干詰まったので簡単にまとめておく。
詰まった時の内容
まとめメモ
-
Laravelのドキュメントでは
Storage::putFile
やStorage::put
の部分の記載で配信したい画像に対して下記のような記載がされている。putFileメソッドとputFileAsメソッドは、保存するファイルの「可視性」を指定する引数も取ります。これは、AmazonS3などのクラウドディスクにファイルを保存していて、生成されたURLを介してファイルへパブリックアクセスできるようにする場合、特に便利です。
-
つまり、配信を行いたいファイルは
Storage::putFile
もしくはStorage::put
の第3引数にpublic
と指定する必要がある。 -
「このオブジェクトはURLでアクセスして自分のアプリケーション内部で表示したいから第3引数に
public
とつけよう」とするとファイル設置できない可能性がある。 -
下記の記事で触れている様にファイルアップロード先のバケットのオブジェクト所有者が「ACLを無効にする(推奨)」に設定されていた場合、アップロードされるファイルの設定はバケットポリシーとバケットオーナーのIAM権限が使用される。
-
もちろんバケットのオブジェクト所有者の設定を「ACLを有効にする → オブジェクトライター」とすれば
Storage::putFile
もしくはStorage::put
の第3引数にpublic
として動作させることはおそらく可能である。 -
しかしながら、「ACLを無効にする(推奨)」はこのようなオブジェクト毎の公開・非公開のめんどくさい設定を一括でAWS側で管理してくれる。
-
特殊な場合を覗いてバケットは下記の様に運用することが望ましい様に思える。
- オブジェクト所有者 「ACLを無効にする(推奨)」を選択
- ソースコード上では一切アップロードするファイルの公開設定などを行わない。
- 公開・非公開・アクセスなどの設定はバケットそのものに設定