为什么AWS不推荐使用公共S3存储桶?

我们强烈建议您永远不要向任何公众提供对您的S3存储桶的访问权限。 我已经为一个用于托管网站的存储桶设置了非常细粒度的公共策略(s3:GetObject)。Route53明确支持将存储桶设置为别名以实现此目的。这个警告只是多余的,还是我做错了什么?

1@MichaelHampton 在S3控制台中会显示这个,没有太多额外的上下文。https://businessinsights.bitdefender.com/amazon-stop-s3-buckets-leaking-data - ceejayoz
相关的 - AWS可以查看私有存储桶吗?还是必须将其设置为公开才能让AWS访问其中的文件? - Criggie
@Criggie AWS是他们的支持团队吗?还是其他什么呢? - ceejayoz
@ceejayoz 是的,AWS支持团队。 - Criggie
我想,在一定程度上的支持下,他们可能会在内部进行调查,尽管S3支持使用非亚马逊密钥进行加密。他们的流程应该确保不会在没有明确许可的情况下进行操作,我认为。 - ceejayoz
2个回答

是的,如果你知道自己在做什么(编辑:并且其他有访问权限的人也知道...),你可以忽略这个警告。

这个警告存在的原因是因为即使是那些应该更加明智的大型组织,也会意外地将私人数据放入公共存储桶中。亚马逊还会给你发送提醒邮件,如果你将存储桶设置为公共访问,除了控制台上的警告之外。

由于IT技术人员错误配置S3存储桶,Accenture、Verizon、Viacom、伊利诺伊州选民信息和军事信息都被发现无意中对所有人开放在线上。

如果你百分之百确定存储桶中的所有内容都应该是公开的,并且没有人会意外地将私人数据放入其中 - 静态HTML网站就是一个很好的例子 - 那么请放心将其设置为公共访问。


2实际上,你几乎从来不可能百分之百确定,所以最佳做法是不要这样做。 - Shadur
这是几个月前,FBI或CIA中的一方将本应安全保存的私人数据留在了公共S3上。我会看看是否能找到相关新闻文章的链接。 - Reactgular
请点击此处查看:https://gizmodo.com/thousands-of-job-applicants-citing-top-secret-us-govern-1798733354 - Reactgular
尊敬的先生,您能告诉我如何具体地允许只有我的网站和安卓应用程序能够访问我的存储桶中的对象吗?基本上,我不希望别人爬取我的存储桶内容。但是我的网站和应用程序应该能够加载它们。 - bad_keypoints
@bad_keypoints,你所描述的在S3中基本上是不可能的。你的网站无法区分爬虫和普通访问者。从技术角度来说,你可以编写服务器端逻辑来检查用户的消耗量,并在一定点停止他们...但是这样的逻辑会很麻烦,而且你必须使用真正的主机(例如EC2而不是S3)。简而言之,如果你担心爬虫,你需要一个更先进的后端解决方案(并且它不会是一个10%的解决方案)...或者你可以选择不去担心。 - machineghost

ceejayoz的回答中提到的隐私问题并不是唯一的问题。
从S3存储桶中读取对象是需要付费的。 您将根据每次从该存储桶下载而向AWS支付费用。如果您有大量的流量(或者如果有人想要损害您的业务并开始全天候大量下载文件),那么费用会很快变得昂贵。

如果您希望从存储桶中公开访问文件,您应该创建一个指向并被授予对S3存储桶访问权限的Cloudfront分发

现在,您可以使用Cloudfront分发的域名来提供文件服务,而无需向公众授予任何S3访问权限。
在这种配置下,您支付的是Cloudfront的数据使用费用,而不是S3的费用。而且在高流量情况下,费用更便宜。


2CloudFlare也可以使用,并且很可能会更便宜。 - chrylis -cautiouslyoptimistic-
你支付的是CloudFront的数据使用费,而不是S3的。而且在大量使用时,费用要便宜得多。但是有一个巨大的警告,就是CloudFront的请求定价比S3的要贵得多,所以攻击者可以发送大量请求(甚至取消它们),以避免实际接收数据和减少自身带宽的需求。 - Bruno Reis
我有一件简单的事情要确认:即使一个存储桶是公开可访问的,但只有通过存储桶策略向Cloudflare授予权限,只有Cloudflare才能访问它,它不会像真正的公开那样。 - Arslan Ali
1@ArslanAli 是的,基本上是一样的东西,但Cloudflare正在扮演Cloudfront的角色。 - Quentin Hayot