【Laravel】【PHP】LaravelのStorageからPutで403エラーの時の対応
マニュアルに従って実装したのに、putできない。
実装
Storage::disk('s3')->put('hoge.txt", $contents, 'public');
エラー
Error executing "PutObject" on "https://XXXXXXXX.s3.ap-northeast-1.amazonaws.com/hoge.txt"; AWS HTTP error: Client error: `PUT https://XXXXXXXX.s3.ap-northeast-1.amazonaws.com/hoge.txt` resulted in a `403 Forbidden`
確認したこと
- getはできるので認証は通っている
- IAMは権限ある
原因
こちらでした。
特に何も設定せずにS3のBacketを新規作成すると、public公開できない設定で作成されます。 その状態で、publicなオブジェクトを作成しようとすると、どんなIAMがついてようが403になるようです。
LaravelのStorageを使わずに、AWSのSDKを使っても発生すると思います。(StrogaeはSDKをラップしてるだけなので)
比較的新しい機能なので、周辺のドキュメントは追いついてない事があるので注意が必要です。という話でした。