Amazon web services 亚马逊S3:403禁止;根据策略无效:策略已过期“;(红宝石)

Amazon web services 亚马逊S3:403禁止;根据策略无效:策略已过期“;(红宝石),amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我使用Froala HTML编辑器将图像直接上传到AmazonS3存储桶。在过去的几个月里,它一直运转良好。在开发方面,我没有做任何改变 大约一天前,我上传到Amazon S3的所有图像开始失败,并得到403“根据策略无效:策略过期”响应 我意识到我的bucket没有策略,并且使用旧的ACL作为权限(我的理解是策略正在取代ACL?) 我使用Amazon策略生成器更新了我的策略,我仍然得到403 我试图将该策略设置为公共策略,只是想让它发挥作用(请注意,我已经删除了任何我认为敏感的内容): { “

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

大约一天前,我上传到Amazon S3的所有图像开始失败,并得到
403“根据策略无效:策略过期”
响应

我意识到我的bucket没有策略,并且使用旧的ACL作为权限(我的理解是策略正在取代ACL?)

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

我试图将该策略设置为公共策略,只是想让它发挥作用(请注意,我已经删除了任何我认为敏感的内容):

{
“版本”:“2012-10-17”,
“Id”:“保单123…”,
“声明”:[
{
“Sid”:“Stmt123…”,
“效果”:“允许”,
“委托人”:“*”,
“行动”:“*”,
“资源”:“arn:aws:s3::/*”
}
]
}
根据我的理解,这项政策应该允许公众在采取任何行动时完全访问桶。很明显,我不想把它用于生产,但我只是想让它再次发挥作用

然而,我仍然得到403“政策过期”

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

AmazonS3控制台甚至警告我,我已经在bucket上设置了公共访问,因此我知道该策略至少“在某种程度上”起作用

问题

  • 如果我更新Amazon S3策略,我是否需要更新用于签名上传的应用程序
    accessKey
    secretKey
  • 我是否可以尝试显式删除策略过期?我的用户将上传图像,我不希望应用程序“用户”过期,它应该始终有效吗

  • 此错误指的是不同的策略—不是bucket策略,而是用于发送
    POST
    上载的HTML表单中包含的已签名策略语句的过期时间戳。听起来你是说这是你上传的,而不是网站的访问者,这让我假设这就是你的“Froala HTML编辑器”将内容上传到S3的方式

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


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

    最终解决了这个问题,您是对的。问题是我生成了策略,然后添加了JS文件,它是静态的……因此在部署后它可以工作几个小时,然后在过期后停止。我在服务器上动态生成策略,然后将其添加到meta标记中,并使用该值设置JS编辑器代码,从而解决了这个问题。
    {
        "Version": "2012-10-17",
        "Id": "Policy123...",
        "Statement": [
            {
                "Sid": "Stmt123...",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "*",
                "Resource": "arn:aws:s3:::<BUCKET_NAME>/*"
            }
        ]
    }