aws s3Client PutObject 访问被拒绝,但 CyberDuck 可以成功访问 PutObject


aws s3Client PutObject Access Denied, but CyberDuck can PutObject Successfully

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

在"https://s3.amazonaws.com/reusable-system-dev/b1e42024e33d62b852d3c94c85f68c72.jpeg"上执行"放置对象"时出错;AWS HTTP 错误:客户端错误响应 [url] https://s3.amazonaws.com/reusable-system-dev/b1e42024e33d62b852d3c94c85f68c72.jpeg [状态代码] 403 [原因短语] 禁止访问被拒绝(客户端):访问被拒绝

但是,使用相同的访问密钥和密钥,我可以使用CyberDuck客户端放置对象! 是否有任何隐藏的 S3 策略可能导致这种奇怪的行为?

我以前见过这种确切的症状。问题可能出在 s3client 在 Php 代码中生成的日期/时间戳上。打开 s3client 的调试,并查看请求中的日期/时间戳是否以"GMT"(正确)或其他方式生成。如果是其他原因,这可能是问题所在,如果它会显示其发出的请求的调试输出,则可以将其与 CyberDuck 进行比较。

这可能是由于错误的身份验证。确保您身份验证完美。

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

PutObject

注意:

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

由于CannedACL的使用(需要PutObjectAcl权限),我得到了错误。