Amazon S3许可问题

时间:2013-07-31 17:28:50

标签: symfony amazon-s3

我的应用程序有2个桶: - gambify-dev-devil(用于开发) - gambify-prod(用于生产)

我已将它们设置为完全相同,但对于我的制作,我遇到了访问某些资源的问题。我的生产环境是宝塔毒素。我使用Gaufrette,LiipImagine和Vichuploader进行文件处理。我遇到的问题是,在我的生产环境中似乎我的应用程序请求错误的资源或存在访问问题。因为我有很多日志表明我的存储桶中存在AccessDenied错误:

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>D90C05F182C91003</RequestId>
<HostId>
i7SkwNCbyUnCCBCnkyyrv7x9pOLGtr4sUgqWYkJMqk0X0lXYIW5zeu4688FCqBiA
</HostId>
</Error>

为了进一步调查这个问题(我真的不知道它来自何处,因为它在其他所有环境和生产中都运行良好,它在2周前工作正常),我想看看哪个资源是请求。是否有机会找到所请求的URL或试图请求的内容,导致此问题?因为如果我提供一个正确的路径来存在现有的ressouce,那么这个桶就可以了: 例如:https://s3-eu-west-1.amazonaws.com/gambify-prod/profile/default.png

更新: 现在我发现了导致我出现问题的真正错误消息:

  

04fadbab7a82c23143855d5c918e1ba8fa32ef1d622c00a3daa9fcdc6daf5d90   gambify-prod [05 / Aug / 2013:19:03:57 +0000] 173.193.185.250 -   133EF43443891C63 REST.HEAD.OBJECT   profile_thumb_small / 51e9a03453c80.jpeg“HEAD   /profile_thumb_small/51e9a03453c80.jpeg HTTP / 1.1“403   SignatureDoesNotMatch 1015 - 7 -   “https://gambify-prod.s3.amazonaws.com/profile_thumb_small/51e9a03453c80.jpeg”   “aws-sdk-php / 1.5.17.1 PHP / 5.3.23 Linux / 2.6.32-042stab068.8 Arch / x86_64   SAPI / fpm-fcgi Integer / 9223372036854775807 Build / 20121126140000   simplexml / 0.1 json / 1.2.1 pcre / 8.31 spl / 0.2 curl / 7.19.7 openssl / 0.9.8k   apc / 3.1.9 pdo / 1.0.4dev pdo_sqlite / 1.0.1 sqlite / 2.0-dev sqlite3 / 0.7-dev   zlib / 1.1 memory_limit / 200M date.timezone / Europe.Berlin   open_basedir / off safe_mode / off zend.enable_gc / on“ -

我仍然不知道是什么导致了初始问题。

将有关签名错误的讨论移至:Amazon S3 signature not working with SDK

2 个答案:

答案 0 :(得分:0)

如果您尚未这样做,则可以配置生产存储桶以记录针对它的所有请求,类似于Apache或其他Web服务器访问日志。

http://docs.aws.amazon.com/AmazonS3/latest/dev/ServerLogs.html

启用日志后,您将能够找到请求的URL,请求的URL以及请求的时间。

<强>更新

如果在尝试通过API或AWS控制台访问S3服务器日志文件时返回AccessDenied错误,则问题是由日志文件上缺少权限(ACL)引起的。

要访问这些日志文件,应为拥有它们的用户授予“打开/下载”权限。使用启用了公共读取的存储桶策略不足以访问服务器日志文件。

有关此问题的更多详情,请参阅以下评论。

答案 1 :(得分:0)

这些看起来就像S3在未正确设置ACL / Grant权限时发回的响应。我先检查一下。如果您的存储桶位于CloudFront分配之后,请确保您也使CloudFront缓存无效。