执行“ GetObjectAcl”时出错,导致403禁止访问被拒绝

时间:2018-07-20 21:41:17

标签: php laravel-5 amazon-s3

我正在尝试通过Laravel 5.5 / PHP 7将图像从一个文件夹复制到Amazon S3中的另一个文件夹

$s3 = Storage::disk('s3');
$s3->copy('old_path/image.jpg', 'new_path/image.jpg');

我得到了错误:

Aws \ S3 \ Exception \ S3Exception
Error executing "GetObjectAcl" on "https://mybucket.s3.us-east-2.amazonaws.com/old_path/image.jpg?acl"; AWS HTTP error: Client error: `GET https://mybucket.s3.us-east-2.amazonaws.com/old_path/image.jpg` resulted in a `403 Forbidden` response: <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>xxx (truncated...) AccessDenied (client): Access Denied - <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>xxx</RequestId><HostId>xxx</HostId></Error>

我注意到查询acl已自动附加到old_path/image.jpg,正如您在错误消息https://mybucket.s3.us-east-2.amazonaws.com/old_path/image.jpg?acl中看到的那样,我怀疑它是引起错误的原因,因为可以通过URL https://mybucket.s3.us-east-2.amazonaws.com/old_path/image.jpg访问该图像,但是末尾的?acl无法访问该图像。

我不知道该怎么解决。有主意吗?!

1 个答案:

答案 0 :(得分:0)

通常,当您的Bucket-ACL不正确时会出现。您的用户没有足够的权限来获取对象ACL。您必须生成适当的存储桶策略并将其插入到存储桶中。

您可以使用生成器来创建策略。如果您有一个,则可以扩展它们。

https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-bucket-policy.html

有时候为定义的用户设置正确的权限有点复杂,您必须尝试一下。