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.txt
は403 Forbidden
応答:AccessDenied
Access DeniedFC49CD(切り捨て...)AccessDenied(クライアント):アクセスが拒否されました-AccessDenied
Access 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";
}
誰かが私を助けてくれるなら、それは素晴らしいことです。ありがとう。 -レン
私が遭遇したのと同じ問題のようです。 AmazonS3FullAccessポリシーをAWSアカウントに追加します。
私は同じ問題に直面し、以下のような解決策を見つけました。
行を削除
'ACL' => 'public-read'
リスト、読み取り、書き込みはあるが、オブジェクト固有の変更権限(AWSポリシーのPutObjectAcl)はないデフォルトの権限。
ブレーデンのアプローチはうまくいきますが、それは危険です。ユーザーは、すべてのS3バケットへのフルアクセスとコンソールへのログイン機能を持ちます。サイトで使用されている資格情報が危険にさらされている場合は、...
より安全なアプローチは次のとおりです。
このようにして、必要なアクセス権のみを持つユーザーができます。
必要なすべての権限を持っていると想定し、このエラーが発生してもアップロードできる場合は、バケットの下のバケット権限セクションを確認し、「すべてのパブリックアクセスをブロックする」を無効にして(チェックを外して)、それでも確認しますエラーを取得します。必要に応じて、このオプションを再度有効にできます。
これは、オブジェクトのアクセス許可の変更を防止するためにAWSが追加する追加のセキュリティ設定/ポリシーです。 アプリで問題が発生した場合や警告が生成された場合は、まずコードを調べて、権限を変更しようとしているのかどうかを確認してください(変更したくない場合があります)。これらの設定は、ニーズに合わせてカスタマイズすることもできます。
ここでも、S3バケットをクリックして、この設定をカスタマイズできます。
問題は、それらをすべて追加するとバケット自体に対する権限が不足することでした。
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 から取得そこのサービスビルダー。
同じエラーの問題が発生しました。プロジェクトは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