2017-09-28 34 views
0

eu-west-1地域のAWSにlatheesan-public-bucketというパブリックS3バケットを(たとえば)持っています。laravelのpublic AWS S3バケットにアクセスする方法

私は(例えば)ブラウザに次のURLを参照してくださいした場合:

<?xml version="1.0" encoding="UTF-8"?> 
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <Name>latheesan-public-bucket</Name> 
    <Prefix /> 
    <Marker /> 
    <MaxKeys>1000</MaxKeys> 
    <IsTruncated>false</IsTruncated> 
    <Contents> 
     <Key>test.json</Key> 
     <LastModified>2017-07-11T16:39:50.000Z</LastModified> 
     <ETag>"056f32ee5cf49404607e368bd8d3f2af"</ETag> 
     <Size>17658</Size> 
     <StorageClass>STANDARD</StorageClass> 
    </Contents> 
</ListBucketResult> 

https://latheesan-public-bucket.s3-eu-west-1.amazonaws.com/

私はバケツ内の1つのファイルを持っていることを示す次のXMLを取得

https://latheesan-public-bucket.s3-eu-west-1.amazonaws.com/test.jsonにアクセスすると、私のパブリックバケットからファイルをダウンロードできます。

私のLaravelアプリケーションで同じことを達成するために、その後、私の.env私が追加した次の行に

league/flysystem-aws-s3-v3

AWS_REGION=eu-west-1 
AWS_BUCKET=latheesan-public-bucket 

最後に、私はその後、パブリックS3バケットにアクセスするためにlaravelファイルシステムを使用しようとした私が最初に作曲を経由して、このパッケージを追加しましたこのようなファイル:

$json = Storage::disk('s3')->get('test.json'); 

私がこれをしたとき、

Illuminate \ Contracts \ Filesystem \ FileNotFoundException 
test.json 

だから私の質問:

AWS_KEY=123 
AWS_SECRET=123 
AWS_REGION=eu-west-1 
AWS_BUCKET=latheesan-public-bucket 

は今、私はこのエラーを取得する:

Error retrieving credentials from the instance profile metadata server. (cURL error 28: Connection timed out after 1000 milliseconds (see http://curl.haxx.se/libcurl/c/libcurl-errors.html))

だから、私はいくつかの偽の資格情報を使用して.env私の更新:私は、次のエラーを得ましたそうです。まず私はここで間違っていますか?実際に有効なS3キー/シークレットを提供せずに、laravelのパブリックs3バケットにアクセスする手段はありませんか?もし私がそれらを知らないならば?私は公共S3バケツへのURLしか持っていません。

P.S. latheesan-public-bucketは存在しません(私の問題を説明するダミーのバケツ名でした。私は実際のパブリックバケットを持っていますが、上記のようにブラウザでうまく動作します)。

答えて

2

あなたはHTTPSのURL経由でアクセスしようとすると、それが公開されているので、それが動作し、あなたがSDK経由でアクセスしようとすると、あなたが

だ、それにアクセスするためのAPIを使用しようとしています。

バケツにアクセスするための正しいアクセス権(これはもはやパブリックにする必要はありません)をインスタンス・プロファイルに渡すか、単純にHTTPクライアントを使用してファイルを取得します。

+0

私は他の人たちが持っていた同様の問題について読んでいましたが、これはおそらく問題だったと思いました。私は 'file_get_contents()'を使ってパブリックファイルをリスト表示/取得するためのヘルパーファサードを書くつもりだと思います。 – Latheesan

0

S3 APIを使用してバケットにアクセスする場合は、AWS資格情報が必要です。その理由は、APIがS3リクエストに署名する必要があるためです。

関連する問題