AWS の超初心者です。
S3 に設置された CSV ファイルを PHP で定期的に取得する処理を作成する必要があります。
AWS SDK for PHP を composer でインストールしています。
勉強用に個人で作成したバケットには接続でき、
下記のスクリプトでファイル一覧が表示できました。
php
1try { 2 $s3 = new S3Client([ 3 'credentials' => [ 4 'key' => AWS_ACCESS_KEY_ID, 5 'secret' => AWS_SECRET_ACCESS_KEY, 6 ], 7 'region' => 'ap-northeast-1', 8 'version' => 'latest', 9 ]); 10 11 // バケットを指定 12 $objects = $s3->listObjects([ 13 'Bucket' => S3_BUCKET_NAME 14 ]); 15 foreach ($results as $result) { 16 foreach ($result['Contents'] as $object) { 17 echo $object['Key'] . "\n"; 18 } 19 } 20} catch (Exception $e) { 21 var_dump($e); 22}
ここからが本題です。
S3 への接続情報をお客様から頂き、AWS CLI や S3 ブラウザで一覧を取得、ダウンロードはできました。
お客様から頂いたバケット名ですが、
バケット名/jpn/hoge/ といった感じで、パス名になっています。
上記のスクリプトをお客様の接続情報に書き換えて実行すると、
403: Forbidden で、エラーコードが SignatureDoesNotMatch と表示されます。
個人的な考えですが、スクリプトは「バケット名」の指定であるのに対し、
「パス名」になっているのが問題だと思います。
また、「バケット名」、つまりパスのルートには権限がありません。
バケット名だけ指定すると、エラーコードは AccessDenied となります。
※ S3 ブラウザでも、接続はできるのですが、Failed -AccessDenied:AccessDenied と
「Tasks」タブに表示されており、ルートのパスをクリックすると AccessDenied となるので、
バケット名の直下にアクセス権限がないのは明らかです。
お聞きしたいのは、AWS SDK for PHP でパス指定して接続が出来るのか、という点です。
プログラムでアクセスする場合、パスを指定してのアクセスは無理なのでしょうか?
無理であれば、ルート直下にファイルを置いてもらえるバケットを作成できないか、
お客様に問い合わせないといけません。
ご教示のほど、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー