質問: UdemyのAWSのカリキュラムの中でS3を使用するためサンプルファイルのListBuckets.phpへターミナル上でアクセスするというステップがあるのですが、 コマンドを実行すると下記のエラーが出てきてしまい、アクセスが拒否されている状況です。 なぜ403のエラーが出てしまっているのかがわからないので、原因がわかりそうなら教えていただきたいです。 ーーーーーーーーーーーーーーー ターミナル [ec2-user@udemy-aws-14days-batch src]$ cd .. [ec2-user@udemy-aws-14days-batch ~]$ cd src/ [ec2-user@udemy-aws-14days-batch src]$ cp -r ../udemy-aws-14days/Day7/src-s3-sample/* . [ec2-user@udemy-aws-14days-batch src]$ ll 合計 16 -rw-rw-r-- 1 ec2-user ec2-user 1164 1月 4 05:20 DbUploadFromCSV.php -rw-rw-r-- 1 ec2-user ec2-user 315 1月 4 05:20 ListBuckets.php -rw-rw-r-- 1 ec2-user ec2-user 538 1月 4 05:20 PutObject.php -rw-rw-r-- 1 ec2-user ec2-user 82 1月 4 05:20 data.csv [ec2-user@udemy-aws-14days-batch src]$ php ListBuckets.php PHP Fatal error: Uncaught exception 'Aws\S3\Exception\S3Exception' with message 'Error executing "ListBuckets" on "https://s3.ap-northeast-1.amazonaws.com/"; AWS HTTP error: Client error: `GET https://s3.ap-northeast-1.amazonaws.com/` resulted in a `403 Forbidden` response: AccessDeniedAccess Denied685CA6 (truncated...) AccessDenied (client): Access Denied - AccessDeniedAccess Denied685CA6C6A37AEB413q1F7DESodFGgMv4uYwxm3VCVTcFgOk4B54aIUH3HW17hcazmHGFMEY/0rDRuHOn34CZImV+HOI=' GuzzleHttp\Exception\ClientException: Client error: `GET https://s3.ap-northeast-1.amazonaws.com/` resulted in a `403 Forbidden` response: AccessDeniedAccess Denied685CA6 (truncated...) in /home/ec2-user/vendor/guzzlehttp/guzzle/src/Exception/RequestExce in /home/ec2-user/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php on line 191 [ec2-user@udemy-aws-14days-batch src]$
回答: 有料コンテンツであれば、まずはサポートで質問してみるのが早いかと思いますよ。 (teratailの回答者はudemyのコースの内容を知ることが出来ず、正確な回答をするのには情報が足りないためです) ・・・という前提になりますが、勘と推測で回答しますと 発生しているエラーメッセージは「このバケットへのアクセス権限が無いよ」という意味です。 (これはEC2からS3へのHTTPアクセス自体には成功していることも示しています) つまり > > 作成したEC2インスタンス(名前はudemy-aws-14days-batch-Batch)のsrcディレクトリの配下に置いたListBuckets.phpにアクセスできない > > > ではなく、 **ListBuckets.phpは動いているが、何らかの設定が足りないためS3からアクセス拒否のメッセージが帰ってきている** というのが正しい状況です。 EC2からS3にアクセスするには以下の流れが必要です。 1. バケットへのアクセス許可設定を行う(許可するIAM roleとポリシーを指定する) 2. EC2にIAM roleを付与するか、プログラム上でアクセスキーを使用する 今回のケースだと、1が失敗しているか、1は成功しているが2に失敗しているのどちらかのケースだと思われますので、**現在見ている教材から遡ってアクセスそれぞれの手順についてミスが無いか確認して、問題があれば修正する**。 というのが解決方法になります。 `EC2 s3 アクセス PHP`といったキーワードで検索して、(教材とは異なる形になるかもしれませんが)一度実際に試してみて、流れと全体像を把握してみるのもお勧めです。