亚马逊 S3:403 禁止 "Invalid according to policy: policy expired" (Ruby)

Amazon S3: 403 forbidden "Invalid according to policy: policy expired" (Ruby)

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

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

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

我使用 Amazon 策略生成器更新了我的策略,但我仍然收到 403。

我尝试将策略设置为 public 只是想让它起作用(请注意,我已经删除了我认为敏感的任何内容):

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

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

然而,我仍然得到 403 "policy expired"。

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

Amazon S3 控制台甚至警告我已在存储桶上设置 public 访问权限,因此我知道该策略至少 "somewhat" 有效。

问题

  1. 如果我更新了 Amazon S3 政策,我是否需要更新我用于签署上传的应用程序 accessKeysecretKey
  2. 有什么我可以尝试明确删除保单到期的吗?我的用户将上传图片,我不希望应用程序 "user" 过期,它应该始终有效吗?

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

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

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