【问题标题】:How to revoke public permissions from a Amazon S3 Bucket如何撤销 Amazon S3 存储桶的公共权限
【发布时间】:2018-04-24 05:10:34
【问题描述】:

我创建了一个 Amazon S3 存储桶来仅存储我网站中的图像。我拥有超过 100 万张具有公共读取权限的图像。每次我登录时,亚马逊都会给我这个警告:

"此存储桶具有公共访问权限 您已提供对此存储桶的公开访问权限。我们强烈建议您永远不要授予对您的 S3 存储桶的任何类型的公共访问权限。 "

我使用以下存储桶策略只允许在我的网站中显示图片:

{
    "Version": "2012-10-17",
    "Id": "http referer policy example",
    "Statement": [
        {
            "Sid": "Allow get requests originated from www.example.com and example.com.br",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::examplebucket.com/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": [
                        "http://www.example.com/*",
                        "http://www.example.com.br/*",
                        "https://www.example.com/*",
                        "https://www.example.com.br/*"
                    ]
                }
            }
        }
    ]
}

如何撤消对存储桶和我的文件的公共访问权限并将其仅授予我的站点?

谢谢!

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    这是一个可怕的警告,旨在防止人们无意中泄露数据。最近新闻中有很多关于公司不小心设置权限以允许公众阅读的案例。

    在您的情况下,您确实希望这些是公开可读的,因此您可以忽略警告。您的安全策略看起来不错,并且仍然符合公共托管的文档。

    如果您真的不希望有人能够直接下载它们,理论上您可以将这些图像放在另一台服务器后面,然后将它们流式传输给用户。不过,这实际上并不安全。

    如果您根本不想让这些公开可用,只需从您的存储桶中删除此策略即可。在这种情况下,您的网站将无法提供图片。

    【讨论】:

    • 感谢您的解释!我删除了该政策并且图像仍然有效,因为我使用公共阅读上传了它们。但考虑到我有超过 100 万张图片,不可能更改所有权限...谢谢!
    • @Andre 这就是为什么重要的是不仅要测试您的存储桶策略是否允许您所期望的,还要测试它是否拒绝您不期望的。在对象上使用public-read,上面的策略实际上并没有做任何事情。如果您仍想通过引用者拒绝,您可以创建一个 Deny 策略测试 StringNotLikeIfExists aws:referer 条件键,但请谨慎使用,因为如果您不提供来自控制台和其他内部机制的访问,则可能会被拒绝必要的匹配条件,以防止此政策拒绝它们。
    【解决方案2】:

    您的政策看起来不错。您提供了更高级别的安全性,然后只是通过引用标头公开,并且不允许列出对象。

    使用 S3 提供 CSS、JS 和图像等常用文件就是这么简单。但是,对于所有意外的安全问题,我通常会推荐以下方法之一:

    1. 为存储桶启用静态网站托管。这让未来的管理员非常清楚这个存储桶是用于公共文件的。此外,我没有看到这些存储桶的大警告消息。启用重定向请求。
    2. 最好关闭所有公共访问并使用 CloudFront。启用源访问身份。您将获得 CloudFront 的所有优势、更严格的安全性等。

    Using an Origin Access Identity to Restrict Access to Your Amazon S3 Content

    【讨论】:

    • 好建议。请注意对另一个答案的评论,对象也是public-read,因此所示的存储桶策略目前是一种无操作。此外,干净地使用 CloudFront 的引用过滤有点混乱,需要 Lambda@Edge 查看器请求触发器来检查和拒绝或将引用转发到存储桶,这仅适用于静态网站端点,而不是 REST(所以没有OAI),如果您的资产被多个引用页面引用,则后一种解决方案会对缓存命中产生负面影响。
    猜你喜欢
    • 2019-12-05
    • 2014-12-23
    • 2012-04-05
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2021-06-25
    相关资源
    最近更新 更多