質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

5361閲覧

AWSのS3に画像をアップロードできない

kubotea

総合スコア2

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/09/11 14:41

編集2021/09/12 14:31

前提・実現したいこと

Laravel6にて音楽系のウェブアプリケーションを作成しています。
現在AWSのS3に画像をアップロードし,表示する機能を実装しているのですが,画像をアップロードする際にエラーが発生してしまいます。詳細は下記に詳しく掲示しますが,エラー内容としてはリージョンについて書かれておりました。

発生している問題・エラーメッセージ

Error executing "PutObject" on "https://.png"; AWS HTTP error: Client error: PUT https://*******.png resulted in a 400 Bad Request response: <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AuthorizationHeaderMalformed</Code><Message>The authorization header (truncated...) AuthorizationHeaderMalformed (client): The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'ap-northeast-1' - <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AuthorizationHeaderMalformed</Code><Message>The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'ap-northeast-1'</Message><Region>ap-northeast-1</Region><RequestId>*******</RequestId><HostId>*********</HostId></Error>

該当のソースコード

// MyScoreController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\MyScore; use App\User; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; public function upload(Request $request) { $this->validate($request, [ 'file' => [ 'required', 'file', 'image', 'mimes:jpeg,png', 'title' => 'required', ] ]); if ($request->file('file')->isValid([])) { $upload_info = Storage::disk('s3')->putFile('g-chord', $request->file('file'), 'public'); $path = Storage::disk('s3')->url($upload_info); $user_id = Auth::id(); $title = $request->input('title'); $new_image_data = new Image(); $new_image_data->user_id = $user_id; $new_image_data->path = $path; $new_image_data->title = $title; $new_image_data->save(); return redirect('/myscore'); }else{ return redirect('/myscore/upload'); } }

ここが画像をアップロードする動きを担っています。

// upload.blade.php @extends('layouts.app') @section('content') <div class="upload"> <form action="/myscore/upload" method="POST" enctype="multipart/form-data"> @csrf <div class="name"> <h2>タイトル</h2> <input type="text" name="title" placeholder="タイトル"/> </div> <div class="image"></div> <label for="photo">画像ファイル:</label> <input type="file" class="form-control" name="file"> <br> <input type="submit" value="アップロード" style="margin:20px;"/> </div> </form> </div> @endsection
{ "Id": "Policy******", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt********", "Action": [ "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::hogehoge", "Principal": "*" }, { "Sid": "Stmt*******", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::hogehoge/*", "Principal": "*" }, { "Sid": "Stmt********", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": "arn:aws:s3:::hogehoge", "Principal": "*" }, { "Sid": "Stmt*********", "Action": [ "s3:GetObjectAcl" ], "Effect": "Allow", "Resource": "arn:aws:s3:::hogehoge/*", "Principal": "*" }, { "Sid": "Stmt************", "Action": [ "s3:PutObjectAcl" ], "Effect": "Allow", "Resource": "arn:aws:s3:::hogehoge/*", "Principal": "*" }, { "Sid": "Stmt********", "Action": [ "s3:ReplicateObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::hogehoge", "Principal": "*" }, { "Sid": "Stmt*********", "Action": [ "s3:DeleteObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::hogehoge/*", "Principal": "*" } ] }

こちらはバケットポリシーになります。

試したこと

当たり前ですが,.envのAWS_DEFAULT_REGIONは変更しております。ですが変わらずエラーになっております。またS3のバケットポリシーにてPutObjectを追加しましたがそれも見当違いだったようです。

補足情報(FW/ツールのバージョンなど)

他に掲示するべき必要な情報等ありましたら遠慮なくお申し付けくださいませ。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

またS3のバケットポリシーにてPutObjectを追加しましたがそれも見当違いだったようです。

と書かれてますが、PutObjectのポリシーだけでは足りないです。7つほどポリシーを付与する必要があります。

参考)
https://flysystem.thephpleague.com/v1/docs/adapter/aws-s3-v3/

ポリシーが原因なのかどうかまでは質問文だけの情報からは読み取れないのですが(かなり怪しいのは間違いないですが、これ以外の要素もあるかもしれません)、こちらの件はしっかり確認した方がいいでしょう。

投稿2021/09/11 14:53

AbeTakashi

総合スコア4512

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kubotea

2021/09/11 16:08

Abe様,度重なる御指導ありがとうございます。 仰っていたバケットポリシーに関してなのですが,PutObject以外にも元々何個か追加していたのですが,Abe様から送付された資料に記載されたバケットポリシー全ては書いてなかったので補完しました。しかしエラーに関しては変わらず同じエラー内容でした...
AbeTakashi

2021/09/11 16:15

パケットポリシーは重要な要素なので、質問文にちゃんと追加した方がいいです。基本的に参考のリンク先の設定がきちんと行われていれば問題ないはずです。ポリシー以外の要素もしっかりチェックした方が良いと思います。クレデンシャル情報、リソースの指定先などもしっかりチェックしてみるといいかと。チェックしても分からないのであれば、一部を伏せ字にするなどして、質問文に追記した方が良いかと思います(現状の質問文の要素だけでは外部の人は何が悪いのか判断がつきません)
kubotea

2021/09/12 14:34

Abe様,返信いただきましてありがとうございます。 質問文にてバケットポリシーを追加いたしましたのでよろしければ確認していただければと思います。また,質問の方に戻らせて頂くのですが,上記にあります通りエラー文にはリージョンが間違っているというようなエラーが書いてあるのですがこちらはあまり関係していないのでしょうか?
AbeTakashi

2021/09/12 15:35

パケットポリシー見ましたが、なんかすごく冗長的ですね。参考リンク先のようにすっきり書けるとは思うのですが・・・(コピペして一部を自分の環境に合わせるだけだと思います) パケットポリシーの勘所としては「7つのActionをAllowする」「すべてのActionに対してResourceの指定は / と /* の二つを行う」になると思います。現状だとResourceの指定が本当にそれでいいのかな?という感じがしますが、私はそのような指定をしたことが無いのでダメとも言い切れません。あとは前回も書きましたが、クレデンシャル情報が正しいかなども確認するといいかと思います。
kubotea

2021/09/13 02:34

Abe様,回答いただきましてありがとうございます。 Abe様が仰るようにクレデンシャル情報を再度確認したところ,うまくコピペできていないところがあったのを確認しました。こんなことか...と正直思ってしまいましたが,言われなければ気づかなかったと思います。今回もお付き合いいただきましてありがとうございます。またどこかで私の質問を見ることがありましたら,その際はお付き合いいただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問