【问题标题】:Amazon S3: 403 forbidden "Invalid according to policy: policy expired" (Ruby)Amazon S3:403 禁止“根据策略无效:策略已过期”(Ruby)
【发布时间】:2018-03-21 23:41:23
【问题描述】:

我正在使用 Froala HTML 编辑器将图像直接上传到 Amazon S3 存储桶。在过去的几个月里,它一直运行良好。我在开发方面没有改变任何东西。

大约一天前,我上传到 Amazon S3 的所有图片都开始失败并收到 403 "Invalid according to policy: policy expired" 响应。

我意识到我的存储桶没有策略,并且正在使用旧的 ACL 获取权限(我的理解是策略正在取代 ACL?)。

我使用亚马逊政策生成器更新了我的政策,但我仍然收到 403。

我尝试将政策设置为公开,只是为了让它发挥作用(请注意,我已经删除了我认为敏感的所有内容):

{
    "Version": "2012-10-17",
    "Id": "Policy123...",
    "Statement": [
        {
            "Sid": "Stmt123...",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "*",
            "Resource": "arn:aws:s3:::<BUCKET_NAME>/*"
        }
    ]
}

据我了解,此政策应允许对存储桶进行完全公开访问以执行任何操作。显然我不希望它用于生产,但我只是想让它再次工作。

但是,我仍然收到 403“策略已过期”。

我看过其他一些关于更新计算机时钟的帖子,但我没有更改我的计算机或服务器上的任何内容,并且我的策略中没有设置过期时间,所以我不确定为什么会这样问题。

Amazon S3 控制台甚至警告我已在存储桶上设置公共访问权限,因此我知道该策略至少“在某种程度上”有效。

问题

  1. 如果我更新了 Amazon S3 政策,我是否需要更新用于签署上传的应用程序 accessKeysecretKey
  2. 有什么方法可以尝试显式删除策略过期?我的用户将上传图片,我不希望应用程序“用户”过期,它应该始终有效?

【问题讨论】:

    标签: amazon-web-services amazon-s3 policy


    【解决方案1】:

    此错误涉及不同的策略 - 不是存储桶策略,而是用于发送 POST 上传的 HTML 表单中包含的已签名策略声明的过期时间戳。听起来您是在说这是 在进行上传,而不是网站的访问者,这让我假设这就是您的“Froala HTML 编辑器”将您的内容上传到 S3 的方式。 .

    这表明您的工作站的系统时钟不正确,或者时钟看似正确,但实际系统时区设置错误。

    后一个问题的一个例子,假设您在 America/Los_Angeles,并且您的系统时钟显示时间为 08:00,这与您的挂钟一致;但是,如果您的系统时区错误地设置为 America/New_York,那么您的系统时钟实际上反映的时间比当前时间晚了三个小时,导致您签名上传的过期时间戳比预期提前 3 小时——可能会过期过去,因此无效并被 S3 拒绝为具有过期的策略。

    【讨论】:

    • 终于解决了这个问题,你是对的。问题是我正在生成策略,然后添加 JS 文件,它是静态的......所以它会在部署后工作几个小时,然后在到期后停止。我通过在服务器上动态生成策略然后将其添加到元标记并使用该值来设置 JS 编辑器代码来解决它。
    猜你喜欢
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2017-04-03
    • 1970-01-01
    • 2021-02-13
    • 2011-09-10
    相关资源
    最近更新 更多