前提・実現したいこと
S3にある画像を指定したリファラからのみアクセスできるようにしたい。
発生している問題・エラーメッセージ
どこからでもアクセスできるようになってしまっている。
該当のソースコード
json
1{ 2 "Version": "2012-10-17", 3 "Id": "bucket policy", 4 "Statement": [ 5 { 6 "Sid": "Stmt123456789", 7 "Effect": "Allow", 8 "Principal": { 9 "AWS": "arn:aws:iam::123456789:user/console_user" 10 }, 11 "Action": "s3:*", 12 "Resource": [ 13 "arn:aws:s3:::BUCKET_NAME", 14 "arn:aws:s3:::BUCKET_NAME/*" 15 ] 16 }, 17 { 18 "Sid": "Stmt987654321", 19 "Effect": "Allow", 20 "Principal": { 21 "AWS": "arn:aws:iam::123456789:user/application_user" 22 }, 23 "Action": "s3:*", 24 "Resource": [ 25 "arn:aws:s3:::BUCKET_NAME", 26 "arn:aws:s3:::BUCKET_NAME/*" 27 ] 28 }, 29 { 30 "Sid": "Allow get requests originating from www.example.com and example.com.", 31 "Effect": "Allow", 32 "Principal": "*", 33 "Action": [ 34 "s3:GetObject", 35 "s3:GetObjectVersion" 36 ], 37 "Resource": "arn:aws:s3:::BUCKET_NAME/*", 38 "Condition": { 39 "StringLike": { 40 "aws:Referer": [ 41 "http://xxx.xxx.xxx/*", 42 "https://yyy.yyy.yyy/*" 43 ] 44 } 45 } 46 } 47 ] 48}
上2つのStatementはコンソール、Laravelから画像をアップロードと削除をするために追加しています。
試したこと
ブロックパブリックアクセス (バケット設定)は全てオフにしていますが、そうするとどこからでもアクセスできるようになります。
一度、こちらを参考にポリシーを作成したのですが、リファラ制限はできたものの、アップロード(とおそらく削除も)ができなくなりました。
ポリシーは明示的な拒否は明示的な許可に優先するということなのでそのポリシーがそのままではダメだったことはわかりました。
補足情報(FW/ツールのバージョンなど)
Laravel 8.64.0
画像は
php
1Storage::disk('s3')->putFile("パス", $file, 'public');
でアップロードしています。
そのため、各画像ファイルのACLは全員 (パブリックアクセス)のオブジェクトが読み込み許可になっています。

回答1件
あなたの回答
tips
プレビュー