AWS S3 上的静态 Web 托管给我“403 权限被拒绝”

cha*_*198 8 web-hosting amazon-s3 amazon-web-services

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

  1. 我在 route53 中有一个域名。

  2. 根据域名,我创建了一个存储桶名称(为了我的问题,让我们坚持使用存储桶和域名作为 abc.nl)

  3. 创建存储桶,不更改任何默认提供的检查列表。
  4. 单击存储桶(abc.nl)并在“存储桶策略”下方添加
{
    "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/*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)
  1. 我已经提供了我usernameAmazonS3FullAccessIAM政策。
  2. 我的阻止公共访问(帐户设置)也没有改变。 阻止公共访问(帐户设置)
  3. 现在我将所有静态文件上传到存储桶(abc.nl)。
  4. 在属性选项卡中,我index.htmlstatic website hosting块下添加了。

现在,根据手册,我应该能够单击链接并访问该页面。但出于某种原因,它向我抛出了 403 访问禁止错误。

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

如果您想知道哪个手册,我正在关注https://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html how to host static web site

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

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

mat*_*sev 11

Principal您的存储桶策略的值是错误的。复制自示例:使用已链接到的自定义域设置静态网站

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

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


小智 6

按照以下步骤操作即可 100% 正常工作。

  1. 在存储桶下,选择您的存储桶的名称。
  2. 选择权限
  3. 在存储桶策略下,选择编辑
  4. 要授予对您网站的公共读取访问权限,请复制以下存储桶策略,并将其粘贴到存储桶策略编辑器中。

重要提示:您的存储桶名称后面是一个带星号的斜杠 (/*)

   {
      "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)

注意: AWS 文档链接


jog*_*old 5

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

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

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