2017-10-08 45 views
0

これは尋ねるのが愚かだと思いますが、現在のPHP SDK経由でS3にアップロードするために特別なことはありますか?同じ資格情報でcli経由でアップロードできますが、SDKを試すと失敗します。ここでPHP経由でs3にアップロードするとアクセスが拒否されない

コード:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "Stmt1480066717000", 
      "Effect": "Allow", 
      "Action": [ 
       "s3:DeleteObject", 
       "s3:GetObject", 
       "s3:PutObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::my-bucket/*" 
      ] 
     }, 
     { 
      "Sid": "Stmt1480066765000", 
      "Effect": "Allow", 
      "Action": [ 
       "s3:ListBucket" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::my-bucket" 
      ] 
     } 
    ] 
} 

私がアップロードすることができた述べたように:

<?php 
require "awssdk_v3/aws-autoloader.php"; 

use Aws\S3\S3Client; 

function s3_upload($file, $name) { 
    $s3 = S3Client::factory(
     array(
      'key' => getenv('AWS_ACCESS_KEY_ID'), 
      'secret' => getenv('AWS_SECRET_ACCESS_KEY'), 
      'version' => "2006-03-01", 
      'region' => getenv('AWS_REGION') 
     ) 
    ); 
    $result = $s3->putObject(
     array(
      'Bucket' => getenv('AWS_BUCKET'), 
      'Key' => $name, 
      'SourceFile' => $file, 
      'ContentType' => mime_content_type($file), 
      'ACL' => 'public-read' 
     ) 
    ); 
    return true; 
} 

私はこの

s3_upload($_FILES['avatarfile']['tmp_name'], "avatar_2.jpg"); 

私が使用するユーザーのようにそれを呼び出すには、付属のこのポリシーを持っていますそのユーザーの資格情報を使用してCLIからファイルを作成します。この地域はフランクフルトですから、eu-central-1と書いてありますか?このような

私が取得エラー開始:

Fatal error: Uncaught exception 'Aws\S3\Exception\S3Exception' with message 'Error executing "PutObject" on "https://my-bucket.s3.eu-central-1.amazonaws.com/avatar_2.jpg"; AWS HTTP error: Client error: `PUT https://my-bucket.s3.eu-central-1.amazonaws.com/avatar_2.jpg` resulted in a `403 Forbidden` response 
+0

同じ資格情報を使用していて、同じ場所にアップロードしてもよろしいですか? – tadman

+0

どのようにKEYのenv変数を設定していますか? env varsの代わりにプロファイルに切り替えようとしています。 – strongjz

+0

'S3Client :: factory'と' $ s3-> putObject'に渡された両方の配列を 'var_dump 'して、それらの配列が正しいかのように見えます。私はまた、クライアントから 'getCredentials'を使って資格を抽出し、正しい値を返しました。したがって、これは理由ではありません。とにかくありがとう! – iGEL

答えて

1

は、私は、問題のおかげto this answerを発見しました。私はACL 'public-read'を設定しようとしていますが、​​、ただs3:PutObjectを私に与えていません。いずれかを変更すると問題が解決されます。

とにかく助けてくれてありがとう。

関連する問題