【AWS】S3のbucket以下のリソースをpublicに読み込み可能にしたい
問題
- S3上に置いた画像ファイルをブラウザから読むと403が返る
- AWSのコンソールでbucket以下ディレクトリ(正確にはObject)を
Make Public
すると見れる - しかし、もちろんその後追加されるObjectについてはpublicにならない
- S3のBucketのPermissionsをいじっても、解決されない
調査
I suggest that you apply a bucket policy to the bucket where you want to store public content. This way you don't have to set ACL for every object.
バケットポリシーを設定するのがいいと思うよ、各オブジェクトのアクセスをいちいち設定しなくて済むよ、とのこと。
解決
これにならって、[All Buckets] -> [bucket] -> [Permissions] から
[Add bucket policy] を選択(2回目以降なら[Edit bucket policy]になってるはず)
たとえばこのようなjsonを入れる
{ // これはAWSがpolicy jsonを解釈するときに使う定数 "Version": "2012-10-17", // 適当に名前つければよさそう "Id": "http referer policy for myapp", "Statement": [ { "Sid": "readonly policy", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my_oppai_bucket/*" } ] }
で、Saveした
DRY