AWS S3客户端PutObject访问被拒,但CyberDuck可以成功PutObject。

3

我在S3存储桶策略上遇到了一个谜题,它阻止了我的Php S3Client PutObject。我收到的错误信息是:

"PutObject" 在 "https://s3.amazonaws.com/reusable-system-dev/b1e42024e33d62b852d3c94c85f68c72.jpeg" 上执行时发生错误; AWS HTTP 错误:客户端错误响应[url] https://s3.amazonaws.com/reusable-system-dev/b1e42024e33d62b852d3c94c85f68c72.jpeg [状态码] 403 [原因短语] 非法访问 AccessDenied (client): 拒绝访问

但是,使用相同的Access Key和Secret Key,我可以使用CyberDuck客户端进行PutObject!是否有隐藏的S3策略会导致这种奇怪的行为?


你在HEAD或GET请求中是否遇到了类似的症状? - Judge Mental
4个回答

2
我之前见过这种情况。问题可能出在您的Php代码中s3client生成的日期/时间戳上。打开s3client的调试功能,查看请求中的日期/时间戳是否使用“GMT”(正确)或其他内容。如果是其他内容,那可能就是问题所在。您可以将其与CyberDuck进行比较,如果它会显示请求的调试输出。请注意保留HTML标签。

1
这可能是由于错误的身份验证造成的。请确保您的身份验证完美无误。
一种测试的方法是尝试通过s3客户端访问S3上的某些受限制/私有资源。

我本来也希望是这样的。不幸的是,我已经三次检查了访问密钥和秘密密钥,它们都是一样的。而且这个存储桶只有私有资源... - Reusable

1

PutObject:

注意:

为了在发送请求主体之前发送请求头,请使用100-continue HTTP状态码来配置您的应用程序。


有趣...我刚试了一下,不幸的是它没有任何效果。我猜测我得到的错误是权限问题,而不是身份验证或重定向错误。 - Reusable

0

我之所以出现错误是因为使用了CannedACL(需要PutObjectAcl权限)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接