目的
- 画像ファイルのアップロード時にpublic指定してアップロードしたところ
実施環境
- ハードウェア環境
項目 | 情報 |
---|---|
OS | macOS Catalina(10.15.5) |
ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
プロセッサ | 2 GHz クアッドコアIntel Core i5 |
メモリ | 32 GB 3733 MHz LPDDR4 |
グラフィックス | Intel Iris Plus Graphics 1536 MB |
- ソフトウェア環境(AWS EC2 AmazonLinux2内に下記の環境を構築、構築方法はこちら→AWS EC2 AmazonLinux2だけでLaravelのアプリをデプロイする)
項目 | 情報 | 備考 |
---|---|---|
AWS EC2インスタンス | AmazonLinux2 | こちらの方法を用いてイメージからインスタンスを作成→AWS EC2 をMacで使ってみよう! |
PHP | 7.4.5 | こちらの方法でインストール→AWS EC2 AmazonLinux2 PHPをインストールする |
composer | 1.10.7 | こちらの方法でインストール→AWS EC2 AmazonLinux2 composerをインストールする |
MySQL | 8.0.20 for Linux on x86_64 | こちらの方法でインストール→AWS EC2 AmazonLinux2 MySQLを使えるようにする |
問題までの経緯
- 下記の方法にてS3に対する画像アップロード処理を実装した。
- 画像アップロード時の処理を下記の様に修正してpublic状態でアップロードできる様にした。
-
修正前
アプリ名ディレクトリ/app/Http/Controllers/ImageController.phpStorage::disk('s3')->putFile('/test', $request->file('file'));
-
修正後
アプリ名ディレクトリ/app/Http/Controllers/ImageController.phpStorage::disk('s3')->putFile('/test', $request->file('file'), 'public');
-
- 処理の動作を確認するためブラウザから画像のアップロードを行った。
問題
-
下記エラーが発生する。
Error executing "PutObject" on "https://S3のバケットURL/test/8iPIwmDI2VX6qOZwUq9XCJSLPGxGox2kxpfcOAkT.png"; AWS HTTP error: Client error: `PUT https://S3のバケットURL/test/8iPIwmDI2VX6qOZwUq9XCJSLPGxGox2kxpfcOAkT.png` resulted in a `403 Forbidden` response: <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>5D23B7 (truncated...) AccessDenied (client): Access Denied - <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>5D23B7FF0F008DAE</RequestId><HostId>PETGLYLAydwTGLlN6wskfKQpjULz1bGIQqWZc12NaJvZfCN++WYmjIFJrVoA2V8LNUK+fQwwoJk=</HostId></Error>
-
ブラウザでのエラー画面の表示を下記に記載する。
問題解決までの経緯
-
AWSのコンソールにログインしてS3のコンソールを開く。
-
アップロードを行うバケット名をクリックする。
-
「アクセス権限」をクリックする。
-
「パブリックアクセス」の「編集」をクリックする。
-
各チェックを外し「保存」をクリックする。
-
ブラウザから画像アップロードを実施したところエラーが解消され画像ファイルがアップロードされた。