aws s3Client PutObject访问被拒绝,但是Cyber​​Duck可以成功地使用PutObject

时间:2016-03-04 14:37:34

标签: php amazon-web-services amazon-s3

我在S3存储桶策略上面临一个谜,它阻止了我从PutObject获取Php S3Client。我得到的错误是:

  

执行错误" PutObject" on" https://s3.amazonaws.com/reusable-system-dev/b1e42024e33d62b852d3c94c85f68c72.jpeg&#34 ;; AWS HTTP错误:客户端错误响应[url] https://s3.amazonaws.com/reusable-system-dev/b1e42024e33d62b852d3c94c85f68c72.jpeg [状态代码] 403 [原因短语]禁止AccessDenied(客户端):访问被拒绝

但是,使用相同的Access键和Secret键,我可以使用Cyber​​Duck客户端使用PutObject!是否存在可能导致这种奇怪行为的隐藏S3策略?

4 个答案:

答案 0 :(得分:2)

之前我已经看过这个确切的症状了。问题可能在于您的Php代码中的s3client生成的日期/时间戳。打开s3client的调试,看看请求中的日期/时间戳是否正在生成" GMT" (正确)或其他。如果它的其他东西,这可能是问题,你可以将它与Cyber​​Duck进行比较,如果它将显示它所做的请求的调试输出。

答案 1 :(得分:1)

这可能是由于身份验证错误造成的。确保您完美地进行身份验证。

测试的一种方法是尝试从S3到s3客户端访问一些受限/私有资源。

答案 2 :(得分:1)

PutObject:

注意:

要将应用程序配置为在发送请求正文之前发送请求标头,请使用 100-continue HTTP状态代码

答案 3 :(得分:0)

由于使用CannedACL,我收到了错误消息(需要PutObjectAcl权限)。