亚马逊S3桶返回403禁止

时间:2014-11-01 17:55:44

标签: amazon-web-services amazon-s3

我最近继承了一个使用S3存储资产的Rails应用程序。我已将所有资产转移到我的S3存储桶,没有任何问题。但是,当我将应用程序更改为指向新存储桶时,我获得403 Forbidden Status。

我的S3存储桶设置了以下设置:

权限

每个人都可以列出

广告管理政策

{
 "Version": "2012-10-17",
 "Statement": [
    {
        "Sid": "PublicReadGetObject",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::bucketname/*"
    }
 ]
}

CORS配置

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
    </CORSRule>
    <CORSRule>
        <AllowedOrigin>https://www.appdomain.com</AllowedOrigin>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

静态虚拟主机

开。

我还能做些什么才能让公众获得这些资产?

10 个答案:

答案 0 :(得分:26)

问题在于转移是根据this thread完成的,这本身不是问题。问题来自之前的开发人员在转移之前没有更改文件的权限。这意味着我无法管理任何文件,即使它们在我的文件夹中。

通过从上一个存储桶中彻底重新下载文件,删除旧的幻像文件,重新上传新文件以及设置其允许公开阅读文件的权限来解决问题。

答案 1 :(得分:25)

我知道这是一个旧线程,但我遇到了同样的问题。我让一切都工作了几个月,它突然停止工作,给我一个403 Forbidden错误。事实证明,系统时钟是真正的罪魁祸首。我认为s3使用某种基于时间的令牌,它具有非常短的寿命。在我的情况下,我刚刚跑了:

ntpdate pool.ntp.org

问题消失了。如果它有任何相关性,我正在运行CentOS 6。这是样本输出:

19 Aug 20:57:15 ntpdate[63275]: step time server ip_address offset 438.080758 sec

希望有所帮助!

答案 2 :(得分:11)

也可能需要根据亚马逊文档设置适当的政策。

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

对此政策提出疑问

{
  "Version":"2012-10-17",
  "Statement":[{
    "Sid":"PublicReadGetObject",
        "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::YOUR-BUCKET-NAME/*"
      ]
    }
  ]
}

答案 3 :(得分:1)

这是我用来使S3存储桶中的index.html文件可从互联网访问的存储桶策略:

enter image description here

我还需要转到权限->“阻止公共访问”,并删除存储桶的阻止公共访问规则。像这样:

enter image description here

还要确保每个存储桶中各个对象的访问权限是公开的。在这里检查: enter image description here

答案 4 :(得分:0)

对我来说,没有其他答案有效。文件权限,存储桶策略和时钟都很好。对我来说,这个问题是断断续续的,虽然听起来有些陈词滥调,但以下两种方法以前都对我有用:

  1. 注销并重新登录。
  2. 如果您要上传单个文件,请尝试进行批量上传。相反,如果要上传单个文件,请尝试批量上传。

答案 5 :(得分:0)

在设置了正确的权限后,为我解决了一个奇怪的事情,就是我从文件名中删除了扩展名。因此,我在存储桶中有很多项目都具有相同的权限,有的工作可以找到,有的返回了403。唯一的区别是那些不工作的项目在文件名末尾有.png。当我删除它们时,它们工作正常。不知道为什么。

答案 6 :(得分:0)

在我的iPhone应用程序中,我发现了同样的问题。在具有相同配置和S3设置的Android上,它可以正常工作,但iPhone应用程序抛出错误。在检查了他们的日志后,我就此问题联系了Amazon支持团队。他们告诉我您的iPhone有日期和时间。然后我转到iPhone的设置,并调整了正确的日期和时间。然后,我尝试上传新图像,它按预期工作。

如果您遇到相同的问题,但您的iPhone或模拟器中的日期或时间有误;这可能会对您有所帮助。

谢谢!

答案 7 :(得分:0)

对我来说,这是访问控制标签下的公共访问权限

仅确保公共访问权限下的读写权限默认为Yes-表示

快乐的编码。

JFYI:我的Android开发中正在使用flutter。

enter image description here

答案 8 :(得分:0)

确保您使用正确的 AWS 配置文件!!!! (开发\生产等...)

答案 9 :(得分:-1)

在策略存储区资源末尾添加*时,我遇到了同样的问题

{
  "Version":"2012-10-17",
  "Statement":[{
    "Sid":"PublicReadGetObject",
        "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::example-bucket/*"
      ]
    }
  ]
}