【问题标题】:Amazon S3 Permission IssueAmazon S3 权限问题
【发布时间】:2013-08-06 21:12:03
【问题描述】:

我的应用程序有 2 个存储桶: - gambiify-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 游戏产品 [05/Aug/2013:19:03:57 +0000] 173.193.185.250 - 133EF43443891C63 REST.HEAD.OBJECT profile_thumb_small/51e9a03453c80.jpeg "头 /profile_thumb_small/51e9a03453c80.jpeg HTTP/1.1" 403 签名不匹配 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 整数/9223372036854775807 构建/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

【问题讨论】:

    标签: symfony amazon-s3


    【解决方案1】:

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

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

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

    更新:

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

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

    有关此问题的更多详细信息,请参阅下面的 cmets。

    【讨论】:

    • 我有点困惑,因为我已经在控制台中启用了日志记录,但文档指出有一个字段可以记录:forums.aws.amazon.com/thread.jspa?threadID=131329&tstart=0
    • 我不确定您找对地方了。如果启用了访问日志,那么您在 API 调用后从 S3 收到的响应不会有任何差异。您应该在配置生产存储桶时指定的日志存储桶中查看保存在 S3 上的访问日志。
    • 我在桶里找。 (它与访问的 Bucket 相同)。而且有很多文件只包含引用的内容。
    • 这些日志文件的命名格式是否为:TargetPrefixYYYY-mm-DD-HH-MM-SS-UniqueString? (TargetPrefix 是您在配置存储桶日志记录时提供的键)。如果是,除了引用的错误之外,它们都没有包含其他任何内容吗?
    • 一个示例文件名是这样的:2013-07-31-22-16-35-80805E1DA6CB1C4F,它似乎不包含 TargetPrefix。而且我没有提供任何信息,我只是在存储桶属性下的管理控制台中启用了日志记录。我正在登录到我正在监控的同一个存储桶。
    【解决方案2】:

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

    【讨论】:

    • 我不是云前端,我没有设置任何 ACL 东西,只是试图使其公开可用(用于提供图像),否则无法通过 API 访问它来存储图像。跨度>
    • 很奇怪。那是 SDK 的一个相当旧的版本,但如果这是问题所在,我会感到惊讶。您正在使用 SDK 对文件执行 HEAD 请求,但没有查询字符串身份验证。大概是因为该文件已经是公开的。嗯……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 2017-09-08
    • 2013-05-29
    • 2018-04-15
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    相关资源
    最近更新 更多