亚马逊S3桶返回403禁止

tha*_*guy 46 amazon-s3 amazon-web-services

我最近继承了一个使用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/*"
    }
 ]
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

静态虚拟主机

启用.

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

Sth*_*the 28

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

ntpdate pool.ntp.org
Run Code Online (Sandbox Code Playgroud)

问题就消失了.我正在跑,CentOS 6如果它有任何相关性.这是示例输出:

19 Aug 20:57:15 ntpdate[63275]: step time server ip_address offset 438.080758 sec
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!

  • 上帝保佑你,好人.请毫不犹豫地回答旧帖. (8认同)
  • 我当时正在使用VM快照,但仍不知所措。我想投票十次。 (2认同)

tha*_*guy 26

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

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


小智 12

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

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/*"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

  • 就我而言,我忘记添加“BUCKET_NAME/*”,只允许自己访问存储桶的根目录。谢谢! (2认同)

小智 11

我遇到了同样的问题,只是在策略桶资源的末尾添加 * 解决了它

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

  • 为什么这是downvoted?在我的资源末尾添加 /* 解决了这个问题。 (4认同)