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

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

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

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

Amazon S3

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

AWS(Amazon Web Services)

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

解決済

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

kubotea
kubotea

総合スコア2

Laravel

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

Amazon S3

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

AWS(Amazon Web Services)

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

1回答

0グッド

0クリップ

3428閲覧

投稿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/ツールのバージョンなど)

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

ベストアンサー

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

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

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

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

投稿2021/09/11 14:53

AbeTakashi

総合スコア3957

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Laravel

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

Amazon S3

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

AWS(Amazon Web Services)

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