【问题标题】:AWS S3: Unable to make access publicAWS S3:无法公开访问
【发布时间】:2019-03-08 05:18:20
【问题描述】:

目标:使用 AWS S3 发布静态网页

问题:访问被拒绝和 403 错误

我已经研究这个问题几个小时了。在看了几个教程(比如这里的一个:https://www.youtube.com/watch?v=4UafFZsCQLQ)之后,在 AWS S3 上部署一个静态网页似乎很容易。但是,我在学习教程时不断遇到“拒绝访问”错误,并且在尝试访问我的页面时遇到 403 错误。

403 Error when loading page

查看我的静态网页 (http://watchyourinterest.live.s3-website.us-east-2.amazonaws.com) 时,我收到 403 错误(见上图)。这是在添加以下存储桶策略之后:

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

我还将权限中的所有公共访问设置更改为 False(只是为了确保没有任何东西可以限制这一点,尽管我确实计划在我完成这项工作后将它们更改为它们应该是的)。

Public Access Settings

我还确保将索引文档正确设置为我的 index.html 页面,并将错误文档也正确设置为我的 error.html 文件。

在查看教程时,这似乎应该使我的页面很好。但是,正如我之前所说,我不断收到 403 错误。经过进一步思考,我尝试将所有文​​件的公共访问权限设置为所有人,但是每次我尝试单击所有人选择时,都会收到一条错误消息,显示“拒绝访问”。

Trying to set file to public access

Access denied error when I attempt setting public access...

同样,当我单独单击文件并以不同的方式对它们执行操作时,也会发生同样的情况,如下所示:

Access denied again when trying to make public

在列出我所有存储桶的主页上,当我希望它公开而不是这样时,我也得到了存储桶的这种奇怪的“访问”状态:

"Access" state of bucket, I WANT THIS TO BE PUBLIC

任何帮助将不胜感激!

【问题讨论】:

    标签: amazon-web-services amazon-s3 access-denied


    【解决方案1】:

    如果您已允许公开访问,则在您的存储桶的权限选项卡下,检查对象所有权部分。如果显示“已强制执行存储桶所有者,已禁用 ACL”,请单击编辑。将 ACL 设置为启用并保存更改。在此之后,“公开”选项将可用于存储桶中的对象。

    【讨论】:

    • 哦,这很奇怪! AWS 控制台强烈建议不要启用 ACL,但如果没有它,单个对象将无法获得“公开”选项。令人困惑!我错过了什么? ??‍♂️
    【解决方案2】:

    问题的根本原因是存储桶级别的公共访问设置。根据屏幕截图,您的存储桶仅允许授权用户访问存储桶内的任何内容。

    即使您已通过存储桶策略授予对存储桶对象的访问权限,公共访问设置也会阻止访问。

    为解决此问题,请更改公共访问设置如下:

    1. 点击编辑公共访问设置,它应该显示在下面的设置中。

    1. 不选中所有复选框。点击保存。它将要求确认。在给定框中输入“确认”。

    这应该将该存储桶的访问权限显示为公开。

    现在您应该能够使用给定的静态网站托管端点访问您的网站。

    【讨论】:

    • 谢谢你。我已经编辑了帖子,您可以根据现在包含的屏幕截图看到,我以前已经有过这样的内容,所以很遗憾,这不是问题。
    • @PatrickLymanOld 我检查了你的截图。不,它不包括在内。在上一个屏幕截图中,我仍然可以看到存储桶只有授权用户访问。
    • 通过在 s3 控制台中编辑公共访问设置来更改访问权限,您只需在其中选择存储桶并将公共访问设置编辑为 false。
    【解决方案3】:

    我认为您可能缺少列表操作,请尝试

        {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Sid": "PublicListObject",
                    "Effect": "Allow",
                    "Principal": "*",
                    "Action": "s3:ListBucket",
                    "Resource": "arn:aws:s3:::watchyourinterest.live"
                },
                {
                    "Sid": "PublicReadGetObject",
                    "Effect": "Allow",
                    "Principal": "*",
                    "Action": ["s3:Get*","s3:List*"]
                    "Resource": ["arn:aws:s3:::watchyourinterest.live/*","arn:aws:s3:::watchyourinterest.live"]
                }
            ]
        }
    

    【讨论】:

    • 另一个建议是公开该对象的 acl。所以尝试使用docs aws s3api put-object-acl --bucket MyBucket --key file.txt --acl public-read
    【解决方案4】:

    与@Sangam Belrose 解释的答案类似,但是这也需要应用于整个 AWS 控制台帐户。当这些被改变时,我不再遇到我的问题。下面的图片说明了这一点:

    1. 选择 AWS 控制台左侧的“此帐户的公共访问设置”选项卡。请注意,此帐户最初的访问权限仅适用于“仅限此帐户的授权用户”。

    ACCOUNT Public Access Settings

    1. 确保最后一个复选框,即“阻止公共和跨账户访问具有公共策略的存储桶”的复选框未选中。

    UNCHECK THIS BOX

    1. 在框确认窗口出现时输入确认

    2. 现在可以看到,如果这个 AND 存储桶的公共访问设置设置正确,那么这个存储桶现在将是公共的。

    It is now public, woo!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多