卖兜搞IT

小心你创建的aws s3把你的AWS账单打爆

原文链接(或点击文末阅读原文) https://medium.com/@maciej.pocwierz/how-an-em)pty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1

中文翻译:

想象一下,你在你偏好的一个地区创建了一个空的、私有的AWS S3存储桶。第二天早上你的AWS账单会是多少?

几周前,我开始为我的客户开发一个文档索引系统的PoC。我在欧洲(爱尔兰)地区创建了一个单独的S3存储桶,并上传了一些文件进行测试。两天后,我查看了我的AWS账单页面,主要是为了确保我的操作在免费套餐限制之内。显然,并非如此。我的账单超过了1300美元,计费控制台显示仅在一天内就执行了近1亿次的S3 PUT请求!

Image

这些请求是从哪里发出的呢?

默认情况下,AWS不会记录针对您的S3存储桶执行的请求。然而,可以使用AWS CloudTrail或S3服务器访问日志来启用此类日志记录。启用CloudTrail日志后,我立即观察到成千上万的写请求来自多个账户或完全来自AWS之外。

为什么会有一些第三方用未经授权的请求轰炸我的S3存储桶呢?

这是一种针对我的账户的类似DDoS的攻击吗?是针对AWS的吗?事实证明,一种流行的开源工具的默认配置是将它们的备份存储在S3中。而且,作为存储桶名称的占位符,他们使用了……与我用于我的存储桶相同的名称。这意味着每次使用默认配置值部署此工具时,都会尝试将其备份存储在我的S3存储桶中!

注意:我无法透露我所指的工具的名称,因为那会让受影响的公司面临数据泄露的风险(如下文所述)。

因此,一大群配置错误的系统试图将它们的数据存储在我的私有S3存储桶中。但为什么我应该为这个错误买单呢?原因如下:

S3对未经授权的传入请求收费

这在我与AWS支持人员的交流中得到了确认。正如他们所写的:

是的,S3也会对未经授权的请求(4xx)收费[1]。这是预期行为。

因此,如果我现在打开终端并键入:

aws s3 cp ./file.txt s3://your-bucket-name/random_key

我会收到一个AccessDenied错误,但你会为这个请求付费。而我甚至不需要一个AWS账户来这样做。

还有一个问题一直在困扰着我:为什么我的账单中有一半以上的费用来自us-east-1地区?我在那里甚至没有一个存储桶!答案是没有指定地区的S3请求默认会转到us-east-1,并根据需要重定向。而存储桶的所有者会为该重定向请求额外付费。

安全方面

现在我们明白了为什么我的S3存储桶遭受了数百万次请求轰炸,以及为什么我最终面临了巨额的S3账单。在那一刻,我有一个想要探索的想法。如果所有那些配置错误的系统都试图将它们的数据备份到我的S3存储桶中,为什么不就让它们这样做呢?我将我的存储桶对公开写入打开,并在不到30秒的时间内收集了超过10GB的数据。当然,我不能透露这些数据属于谁。但这让我惊讶于一个无辜的配置疏忽是如何导致危险的数据泄露!

从中我学到了什么?

教训1:任何知道你S3存储桶名称的人都可以随意增加你的AWS账单。

除了删除存储桶之外,你无法阻止这种情况发生。当通过S3 API直接访问时,你无法使用CloudFront或WAF等服务保护你的存储桶。标准的S3 PUT请求的价格仅为每1,000次请求0.005美元,但单个机器可以轻松执行数千次此类请求。

教训2:给你的存储桶名称添加一个随机后缀可以增强安全性。

这种做法减少了对配置错误的系统或有意攻击的易受攻击性。至少避免使用短和常见的名称来命名你的S3存储桶。

教训3:在执行大量请求到S3时,确保明确指定AWS地区。

这样你就可以避免额外的S3 API重定向费用。

事后:

  1. 1. 我向易受攻击的开源工具的维护者报告了我的发现。他们迅速修复了默认配置,尽管他们无法修复现有的部署。

  2. 2. 我通知了AWS安全团队。我建议他们限制不幸的S3存储桶名称,以保护他们的客户免受意外费用的影响,并保护受影响的公司免受数据泄露。但是他们不愿意解决第三方产品的配置错误。

  3. 3. 我向两家在我的存储桶中发现数据的公司报告了这个问题。他们没有回复我的电子邮件,可能将其视为垃圾邮件。

  4. 4. AWS很友善地取消了我的S3账单。然而,他们强调这是一种例外情况。

感谢你抽出时间阅读我的帖子。我希望它能帮助你避免意外的AWS费用!