【问题标题】:Static web hosting on AWS S3 giving me "403 permission denied"AWS S3 上的静态 Web 托管给了我“403 权限被拒绝”
【发布时间】:2019-10-08 05:27:04
【问题描述】:

如果有人能指出我做错了什么,我将不胜感激。看下面的步骤

  1. 我在route53有一个域名。

  2. 基于域名,我创建了一个桶名(为了我的问题,让我们坚持桶和域名为 abc.nl)

  3. 已创建存储桶,但未更改任何默认提供的检查列表。
  4. 点击bucket(abc.nl)并在“bucket policy”下方添加
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::1234567:user/usrname"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::abc.nl/*"
        }
    ]
}
  1. 我在 IAM 中提供了 AmazonS3FullAccessusername 政策。
  2. My Block 公共访问(帐户设置)也未更改。
  3. 现在我将所有静态文件上传到存储桶 (abc.nl)。
  4. 在属性选项卡中,我在static website hosting 块下添加了index.html

现在,按照手册,我应该可以单击链接并访问该页面。 但由于某种原因,它向我抛出了 403 访问禁止错误。

据我了解,只需添加 bucket policy 即可开启公共访问。但对我来说,我没有看到“公共”标签。所以,不知道怎么回事。 (我的理解可能是错误的,因此这篇文章。)

如果您想知道我关注的是哪本手册,https://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.htmlhow to host static web site

无论如何,有人指出我在哪里做错了,我应该从存储桶的权限中选择哪些选项?我可能会漏掉一些台词。

PS:我已经多次创建和删除同一个存储桶,只是为了每次都重新开始。

【问题讨论】:

    标签: amazon-web-services amazon-s3 web-hosting


    【解决方案1】:

    您的存储桶策略的 Principal 值错误。复制自您链接到的Example: Setting up a Static Website Using a Custom Domain

    要授予公共读取访问权限,请将以下存储桶策略附加到 example.com 存储桶,用您的存储桶名称替换 example.com

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

    【讨论】:

      【解决方案2】:

      要使存储桶公开(= 所有人),您需要在存储桶策略中将 * 设置为委托人:

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

      还请检查您在存储桶上没有阻止公共访问设置,因为它会阻止您将存储桶设为公开。

      【讨论】:

      • 那我做错了。我已经提供了您提到的存储桶策略,但是当应用保存时,我得到“拒绝访问”,所以我编辑了这样的策略。我应该提到它。现在我很困惑,我应该使用哪个用户来创建存储桶“IAM 用户名”或“根账户凭证”,它们都具有相同的规范 id?那为什么我点击访问被拒绝。
      • 您的访问被拒绝,因为阻止公共访问设置阻止您将存储桶公开。您需要在此存储桶上禁用它。
      • 我不关注你。应该勾选哪些按钮?是全局设置还是单独设置?
      • 全局禁用它(帐户级别),如果适用于存储桶本身。您当然可以在其他不应公开的存储桶上启用此设置。
      • 糟糕,我错了!谢谢@jogold。我误解了“帐户设置”选项,认为它们只是设置默认值。经过一些实验,我可以确认帐户设置会覆盖单个存储桶,允许人们一键阻止公共访问(这很好而且令人欣慰)。因此,人们需要首先在“帐户设置”级别禁用选项,然后在存储桶级别。我建议通过了解每个选项来小心关闭哪些“帐户设置”选项,然后再将它们全部停用。谢谢,@jogold!
      【解决方案3】:

      {

      "Version": "2012-10-17",
      "Statement": [
          {
              "Sid": "PublicRead",
              "Effect": "Allow",
              "Principal": "*",
              "Action": [
                  "s3:GetObject",
                  "s3:GetObjectVersion"
              ],
              "Resource": "arn:aws:s3:::pasteyourbucketname(copy&pasteARNName)/*"
          }
      ]
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-10
        • 1970-01-01
        • 1970-01-01
        • 2016-06-15
        • 2020-09-06
        • 1970-01-01
        • 2016-04-21
        相关资源
        最近更新 更多