moyashidaisuke's diary

フリーランスのエンジニアのダイスケです。プログラム関連とかギター関連とか旅行関連とか色々。

【Laravel】【PHP】LaravelのStorageからPutで403エラーの時の対応

マニュアルに従って実装したのに、putできない。

readouble.com

実装

 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は権限ある

原因

dev.classmethod.jp

こちらでした。

特に何も設定せずにS3のBacketを新規作成すると、public公開できない設定で作成されます。 その状態で、publicなオブジェクトを作成しようとすると、どんなIAMがついてようが403になるようです。

LaravelのStorageを使わずに、AWSのSDKを使っても発生すると思います。(StrogaeはSDKをラップしてるだけなので)

比較的新しい機能なので、周辺のドキュメントは追いついてない事があるので注意が必要です。という話でした。