2015-12-24 39 views
5

私はAWS acctを確立しました。私の最初のプログラム的なPUTをS3にしようとしています。私はバケツを作成してそこに物を置くためにコンソールを使いました。私はサブディレクトリ(myFolder)も作成して公開しました。AWSに「PutObject」を実行中にエラーが発生しました。アップロードが失敗します。

Error executing "PutObject" on "https://s3.amazonaws.com/gps-photo.org/mykey.txt"; AWS HTTP error: Client error: `PUT https://s3.amazonaws.com/gps-photo.org/mykey.txt` resulted in a `403 Forbidden` response: 
<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>FC49CD (truncated...) 
AccessDenied (client): Access Denied - <?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>AccessDenied</Code><Message>Access Denied</Message <RequestId>FC49CD15567FB9CD</RequestId><HostId>1GTYxjzzzhcL+YyYsuYRx4UgV9wzTCQJX6N4jMWwA39PFaDkK2B9R+FZf8GVM6VvMXfLyI/4abo=</HostId></Error> 

私のコードでは、誰も私を助けることができるならば、それは素晴らしいことだ

<?php 

// Include the AWS SDK using the Composer autoloader. 
require '/home/berman/vendor/autoload.php'; 
use Aws\S3\S3Client; 
use Aws\S3\Exception\S3Exception; 
$bucket = 'gps-photo.org'; 
$keyname = 'my-object-key'; 
// Instantiate the client. 
$s3 = S3Client::factory(array(
    'profile' => 'default', 
    'region' => 'us-east-1', 
    'version' => '2006-03-01' 
)); 
try { 
    // Upload data. 
    $result = $s3->putObject(array(
     'Bucket' => $bucket, 
     'Key' => "myFolder/$keyname", 
     'Body' => 'Hello, world!', 
     'ACL' => 'public-read' 
    )); 
    // Print the URL to the object. 
    echo $result['ObjectURL'] . "\n"; 
} catch (S3Exception $e) { 
    echo $e->getMessage() . "\n"; 
} 

です:私は私の.aws /資格情報がファイルおよびサンプルコードを使用して試してみましたが、私は次のエラーを取得する作成しました。ありがとう。 --Len

答えて

2

403は、キーが正しくないこと、またはキーへのパスが正しくないことを示しています。パッケージが/myFolder/$keynameに正しいキーをロードしていることを確認しましたか?

(ファイルの種類、パス、アクセス許可などをアップロードすることを心配するのではなく)簡単に試してみると役に立ちます。

$result = $client->listBuckets(); 
foreach ($result['Buckets'] as $bucket) { 
    // Each Bucket value will contain a Name and CreationDate 
    echo "{$bucket['Name']} - {$bucket['CreationDate']}\n"; 
} 

出所:http://docs.aws.amazon.com/aws-sdk-php/v2/guide/service-s3.htmlサービスビルダーもチェックしてください。

+0

aws_access_key_idを確認したところ、正しいです。上記の単純化されたリクエストを試したところ、同じエラーが発生しました。私は秘密鍵が正しいかどうかをチェックする方法は分かりませんが、カット&ペーストで行われたので、間違っていると思わない理由はありません。私にとって設定上の問題のようです。 – LenB

+0

あなたは単に 'file_get_contents'とキーを' echo'しようとしましたか? 'myFolder/my-object-key'から現在ロードしています。それは正しい経路ですか? 'print_r(file_get_contents( 'myFolder/my-object-key'))'問題がキーが間違っているとは必ずしも言えませんが(コピー&ペーストは、安全ではない)、それは鍵へのパスが間違っている可能性が高いということです。 – Denault

2

問題は、すべて正常に機能したことを追加した後、バケット自体の権限が不足していたことです。

+0

同じエラーですが、これを明確にすることはできません。バケットは読み取り可能ですが、S3FullAccessで十分ではありませんか? – Kzqai

6

私は同じ問題を抱えています。 AmazonS3FullAccessポリシーをAWSアカウントに追加します。

  • AWSにログインします。
  • サービスでIAMを選択します。
  • [ユーザー]> [[ユーザー]
  • オープンPermissoinsタブ
  • アカウントにAmazonS3FullAccessポリシーを添付し
+0

ソリューションのおかげで、私にとって完璧に機能します – nitin

0

はブレーデンのアプローチは動作しますが、それは危険です。ユーザーはすべてのS3バケットにアクセスし、コンソールにログインすることができます。サイト内で使用される資格情報が侵害されている場合は、よく...

より安全なアプローチがある:

  1. AWSコンソール - > IAM - >ポリシー - >ポリシーを作成します
  2. サービス= S3
  3. アクション=(必要最低限​​のみリストと読む)
  4. リソース - >特定 - >バケット - > ARNを追加します(必要な場合のみバケット)のARNを置く
  5. リソース - >特定 - >オブジェクト - >どれを確認するか、ARNの特定のオブジェクト
  6. のを置きます ポリシー
  7. AWSコンソールを作成するための
  8. レビューと保存 - > IAM - >ユーザー - > [ユーザーを追加します
  9. アクセスタイプ - > "プログラムによるアクセスを" チェックのみ
  10. 次へ:権限 - >直接既存のポリシーを添付し
  11. 新しく作成したポリシーを検索して選択します
  12. レビューとあなただけの必要なアクセス権を持つユーザーを持つことになります。このようにして、ユーザ

を作成するために保存します。