AWS S3 未授权请求计费问题:空的 S3 存储桶可能会大幅增加成本
高级软件工程师 Maciej Pocwierz 最近透露了一个重大问题——空的 S3 存储桶可能会意外地导致大量的 AWS 账单。在他的案例中,一天内执行了近 1 亿次 S3 PUT 请求,这导致了一笔远不能忽略的账单。
Pockwierz 通过在 eu-west-1 区域创建一个 S3 存储桶来为客户端进行概念验证,并上传一些文件进行测试。当检查 AWS 账单页面以验证他是否在免费等级的限制范围内时,他发现账单是 1300 美元,原因是执行了 100,000,000 次的 S3 PUT 请求。
在调查这些请求的原因时,Pocwierz 写道:
默认情况下,AWS 不会记录针对 S3 存储桶执行的请求。但是,可以使用 AWS CloudTrail 或 S3 Server Access Logging 来启用该类日志。启用 CloudTrail 日志后,我立即观察到了来自多个帐户或 AWS 外部的数千个写入请求。
每个区域每天计费的 S3 使用量(来源:Pocwierz 的 Medium博客文章)
造成该事件的根本原因是一个广泛使用的开源工具的默认设置,该工具无意中将相同的存储桶名作为备份目标。这导致了大量的未经授权的请求,并造成了重大的财务影响。此外,一半的请求来自不同的区域。没有指定区域的 S3 请求被重定向到 us-east-1,这给存储桶所有者带来了额外的成本。
从这次经验中吸取的教训是,S3 存储桶容易受到未经授权的请求攻击,这突出了在存储桶名称中添加随机后缀以增强其安全性的必要性。另一个关键的收获是,在执行请求时显式指定 AWS 区域可以帮助避免重定向产生的额外成本。此外,个人决定暂时公开自己的存储桶以供写作,这表明没有恶意的疏忽很容易导致潜在的数据泄露。
Pockwierz 的发现在社区中引起了轰动。在 Reddit 上关于该发现的一条帖子中,seanamos-1 总结道:
桶名从来没有被暗示需要保密,很明显,它们并不是这样设计的。但如果你不对桶名保密,就会很容易地受到账单攻击。这是需要解决的。
此外,在 Hacker News 的一条帖子中,受访者 tedminston 写道:
更疯狂的是,当请求是 403 时,打开 Requester Pays 实际上并不意味着请求者付款。从本质上讲,每个 S3 存储桶,无论是公共的还是私有的,只要它的名字能被发现,都可能被 DDoSed,从而产生一笔疯狂的账单。这是 AWS 需要解决的平台级安全问题。我们不需要另一个“存储桶门”(Bucketgate)事件。
最后,AWS 的首席布道师 Jeff Barr 在一条 推文 中回应了 Pockwierz 的发现和社区讨论:
感谢所有让我们注意到这篇文章的人。我们同意客户不应该为自己没有发起的未经授权的请求付费。我们将很快分享更多关于我们将如何帮助防止这些收费的信息。
DuckbillGroup 首席云经济学家 Corey Quinn 在随后的推文中回应道:
这感觉像是 AWS 处理意外账单方式的一个潜在转折点,我非常支持。
Steef-Jan Wiggers 是 InfoQ 的高级云编辑之一,目前在荷兰 i8c 担任集成架构师。他目前的技术专长主要集中于集成平台实施、Azure DevOps 和 Azure 平台解决方案架构。Steef-Jan 经常在会议和用户组中发表演讲,并为 InfoQ 撰稿。此外,在过去的 14 年里,微软一直将其评为 Microsoft Azure MVP。
原文链接:
https://www.infoq.com/news/2024/05/aws-empty-s3-bucket-billing/
声明:本文为 InfoQ 翻译,未经许可禁止转载。
德国再次拥抱Linux:数万系统从windows迁出,能否避开二十年前的“坑”?
微信扫码关注该文公众号作者