我已经建立了AWS帐户。我正在尝试将我的第一个程序化PUT转换为S3。我用控制台创建了一个桶并把东西放在那里。我还创建了一个子目录(myFolder)并将其公之于众。我创建了我的.aws / credentials文件并尝试使用示例代码,但是我收到以下错误:
执行错误" PutObject" on" https://s3.amazonaws.com/gps-photo.org/mykey.txt&#34 ;; AWS HTTP错误:客户端错误:
PUT https://s3.amazonaws.com/gps-photo.org/mykey.txt
导致403 Forbidden
响应:AccessDenied
访问DeniedFC49CD(截断...) AccessDenied(客户端):访问被拒绝 -AccessDenied
访问DeniedFC49CD15567FB9CD1GTYxjzzzhcL + YyYsuYRx4UgV9wzTCQJX6N4jMWwA39PFaDkK2B9R + FZf8GVM6VvMXfLyI / 4abo =
我的代码是
<?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";
}
如果有人能帮助我,那就太好了。谢谢。 --Len
答案 0 :(得分:12)
看起来我遇到了同样的问题。将AmazonS3FullAccess策略添加到您的AWS账户。
答案 1 :(得分:7)
布拉登的方法会起作用,但这很危险。用户可以完全访问所有S3存储桶并能够登录控制台。如果站点中使用的凭据受到损害,那么......
更安全的方法是:
通过这种方式,您将拥有仅具有所需访问权限的用户。
答案 2 :(得分:5)
我遇到了同样的问题,并找到了以下解决方案。
删除行
'ACL'=>'公开读取'
具有列表,读取和写入的默认权限,但没有更改对象特定的权限(AWS策略中的PutObjectAcl)。
答案 3 :(得分: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同时查看那里的服务构建者。
答案 4 :(得分:2)
问题是,一旦我添加了一切正常工作,就会对存储桶本身缺乏权限。
答案 5 :(得分:1)
假设您拥有所有必需的权限,如果遇到此错误,但仍然能够上载,请检查存储桶下的存储桶权限部分,然后尝试禁用(取消选中)“阻止所有公共访问权限”,然后查看如果仍然出现错误。您可以根据需要再次启用此选项。
这是AWS为防止更改对象权限而添加的一项额外的安全设置/策略。如果您的应用给您带来了问题或生成了警告,请首先查看代码,看看是否尝试更改任何权限(您可能不需要)。您还可以自定义这些设置,以更好地满足您的需求。
同样,您可以通过单击S3存储桶,权限/编辑来自定义此设置。
答案 6 :(得分:0)
我遇到了同样的错误问题。项目是laravel vue,我正在使用axios将文件上传到s3。
我正在使用无家可归的宅基地作为服务器。原来虚拟盒服务器上的时间不正确。我必须用正确的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