DRYな備忘録

Don't Repeat Yourself.

【AWS】S3のbucket以下のリソースをpublicに読み込み可能にしたい

問題

  • S3上に置いた画像ファイルをブラウザから読むと403が返る
  • AWSのコンソールでbucket以下ディレクトリ(正確にはObject)を Make Public すると見れる
  • しかし、もちろんその後追加されるObjectについてはpublicにならない
  • S3のBucketのPermissionsをいじっても、解決されない

調査

stackoverflow.com

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] から

f:id:otiai10:20160224165623p:plain

[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