0

我的应用程序有 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 或试图请求什么的 URL?因为如果我提供到现有资源的正确路径,则存储桶可以正常工作:例如: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

4

2 回答 2

0

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

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

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

更新:

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

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

有关该问题的更多详细信息,请参阅下面的评论。

于 2013-08-01T09:34:56.423 回答
0

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

于 2013-08-03T05:10:07.843 回答