web-dev-qa-db-ja.com

AWSで「PutObject」の実行中にエラーが発生し、アップロードが失敗する

AWSアカウントを確立しました。私の最初のプログラムによるPUTをS3で実行しようとしています。コンソールを使用してバケットを作成し、そこに物を入れました。サブディレクトリ(myFolder)も作成し、公開しました。 .aws/credentialsファイルを作成し、サンプルコードを使用しようとしましたが、次のエラーが発生します。

" https://s3.amazonaws.com/gps-photo.org/mykey.txt "での "PutObject"の実行中にエラーが発生しました; AWS HTTPエラー:クライアントエラー:PUT https://s3.amazonaws.com/gps-photo.org/mykey.txt403 Forbidden応答:AccessDeniedAccess DeniedFC49CD(切り捨て...)AccessDenied(クライアント):アクセスが拒否されました-AccessDeniedAccess DeniedFC49CD15567FB9CD1GTYxjzzzhcL + YyYsuYRx4UgV9wzTCQJX6N4jMWWF9VFVGVF9VMFV9G9VFVGVFV9VfVmG9VfVGVFVGVfV9VfBmGVfV9VfGVfzVkVzVfkVfGVFzVkVfzGkVfzGVF9D9VfVfF0f0f0R0R099

私のコードは

<?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";
}

誰かが私を助けてくれるなら、それは素晴らしいことです。ありがとう。 -レン

8
LenB

私が遭遇したのと同じ問題のようです。 AmazonS3FullAccessポリシーをAWSアカウントに追加します。

  • AWSにログインします。
  • [サービス]で[IAM]を選択します。
  • [ユーザー]> [ユーザー]を選択します
  • Permissoinsタブを開く
  • AmazonS3FullAccessポリシーをアカウントにアタッチします
14
Braden Boggs

私は同じ問題に直面し、以下のような解決策を見つけました。

行を削除

'ACL' => 'public-read'

リスト、読み取り、書き込みはあるが、オブジェクト固有の変更権限(AWSポリシーのPutObjectAcl)はないデフォルトの権限。

7
iRviNe48

ブレーデンのアプローチはうまくいきますが、それは危険です。ユーザーは、すべてのS3バケットへのフルアクセスとコンソールへのログイン機能を持ちます。サイトで使用されている資格情報が危険にさらされている場合は、...

より安全なアプローチは次のとおりです。

  1. AWSコンソール-> IAM->ポリシー->ポリシーの作成
  2. サービス= S3
  3. アクション=(必要最低限​​のみ、例:リストと読み取り)
  4. リソース->特定->バケット-> ARNを追加(必要なバケットのみのARNを入力)
  5. リソース->特定->オブジェクト-> Anyをチェックするか、特定のオブジェクトのARNを配置します
  6. ポリシーを作成するために確認および保存します
  7. AWSコンソール-> IAM->ユーザー->ユーザーの追加
  8. アクセスタイプ->「プログラムによるアクセス」のみをチェック
  9. 次:権限->既存のポリシーを直接添付
  10. 新しく作成したポリシーを検索して選択します
  11. 確認して保存し、ユーザーを作成します

このようにして、必要なアクセス権のみを持つユーザーができます。

7
MrG

必要なすべての権限を持っていると想定し、このエラーが発生してもアップロードできる場合は、バケットの下のバケット権限セクションを確認し、「すべてのパブリックアクセスをブロックする」を無効にして(チェックを外して)、それでも確認しますエラーを取得します。必要に応じて、このオプションを再度有効にできます。

これは、オブジェクトのアクセス許可の変更を防止するためにAWSが追加する追加のセキュリティ設定/ポリシーです。 enter image description here アプリで問題が発生した場合や警告が生成された場合は、まずコードを調べて、権限を変更しようとしているのかどうかを確認してください(変更したくない場合があります)。これらの設定は、ニーズに合わせてカスタマイズすることもできます。

ここでも、S3バケットをクリックして、この設定をカスタマイズできます。

2
JPaulino

問題は、それらをすべて追加するとバケット自体に対する権限が不足することでした。

2
LenB

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 から取得そこのサービスビルダー。

2
Denault

同じエラーの問題が発生しました。プロジェクトはlaravel vue、axiosを使用してs3にファイルをアップロードしています。

私はサーバーとしてvagrant Homesteadを使用しています。仮想ボックスサーバーの時刻が正しくないことが判明しました。正しいUTC時刻で更新する必要がありました。私がs3エラーから取った正しい時間に更新した後、それはうまくいきました。

エラー:機密情報を削除しました

message: "Error executing "PutObject" on "https://url"; AWS HTTP error: Client error: `PUT https://url` resulted in a `403 Forbidden` response:↵<?xml version="1.0" encoding="UTF-8"?>↵<Error><Code>RequestTimeTooSkewed</Code><Message>The difference between the reque (truncated...)↵ RequestTimeTooSkewed (client): The difference between the request time and the current time is too large. - <?xml version="1.0" encoding="UTF-8"?>↵<Error><Code>RequestTimeTooSkewed</Code><Message>The difference between the request time and the current time is too large.</Message><RequestTime>20190225T234631Z</RequestTime><ServerTime>2019-02-25T15:47:39Z</ServerTime><MaxAllowedSkewMilliseconds>900000</MaxAllowedSkewMilliseconds><RequestId>-----</RequestId><HostId>----</HostId></Error>"

前:

vagrant@Homestead:~$ date
Wed Feb 20 19:13:34 UTC 2019

後:

vagrant@Homestead:~$ date
Mon Feb 25 15:47:01 UTC 2019
0
ace.spades