亚马逊 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" 有效。
问题
- 如果我更新了 Amazon S3 政策,我是否需要更新我用于签署上传的应用程序
accessKey
或 secretKey
?
- 有什么我可以尝试明确删除保单到期的吗?我的用户将上传图片,我不希望应用程序 "user" 过期,它应该始终有效吗?
此错误涉及不同的策略——不是存储桶策略,而是用于发送 POST
上传的 HTML 表单中包含的已签名策略声明的到期时间戳。听起来你是在说这是 你 在上传,而不是网站的访问者,这让我假设这就是你的 "Froala HTML editor" 将你的内容上传到的方式S3...
这表明您的工作站的系统时钟不正确,或者时钟看起来是正确的,但实际的系统时区设置是错误的。
后一个问题的例子,假设你在 America/Los_Angeles 并且你的系统时钟显示时间为 08:00,这与你的挂钟一致;但是,如果您的系统时区被错误地设置为 America/New_York,您的系统时钟实际上反映的时间比当前时间晚三个小时,导致您签名的上传的到期时间戳比预期早 3 小时 --可能在过去过期,因此无效并被 S3 拒绝为具有过期策略。
我正在使用 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" 有效。
问题
- 如果我更新了 Amazon S3 政策,我是否需要更新我用于签署上传的应用程序
accessKey
或secretKey
? - 有什么我可以尝试明确删除保单到期的吗?我的用户将上传图片,我不希望应用程序 "user" 过期,它应该始终有效吗?
此错误涉及不同的策略——不是存储桶策略,而是用于发送 POST
上传的 HTML 表单中包含的已签名策略声明的到期时间戳。听起来你是在说这是 你 在上传,而不是网站的访问者,这让我假设这就是你的 "Froala HTML editor" 将你的内容上传到的方式S3...
这表明您的工作站的系统时钟不正确,或者时钟看起来是正确的,但实际的系统时区设置是错误的。
后一个问题的例子,假设你在 America/Los_Angeles 并且你的系统时钟显示时间为 08:00,这与你的挂钟一致;但是,如果您的系统时区被错误地设置为 America/New_York,您的系统时钟实际上反映的时间比当前时间晚三个小时,导致您签名的上传的到期时间戳比预期早 3 小时 --可能在过去过期,因此无效并被 S3 拒绝为具有过期策略。