首页 > 解决方案 > 在计费恐慌中锁定公共站点访问

问题描述

作为 AWS 海洋中的一条小鱼,可怕的事情之一是,在公开服务的大量交易发生的不太可能发生的情况下,似乎是无限责任。AWS 专为大人物而设计,对他们而言,可用性是最重要的。在保持服务正常方面付出了很多努力,但在将我们从天文账单中拯救出来时显然没有。亚马逊似乎多次被要求设置支出上限,但 AFAIK,他们想出的最好的办法是账单提醒。我读过一些恐怖故事,比如有人为家人和朋友建立了一个小型网站并收到了 10,000 美元的账单。亚马逊做得最好的就是提供账单提醒,如果你是 AFK 怎么办?在您关闭之前,相当大的金额可能会消失。

所以,我的狡猾计划 - 编写一个 Lambda 从一个计费阈值事件中触发,该事件会提升吊桥并关闭任何面向公众的设施。

所以,我从 CloudFront 开始,这是非常可行的,尽管禁用分发需要一些时间来传播。

现在我们来到了我的第一个技术难题。我以为我可以检查所有存储桶的公共权限并撤销它们。但是,自从我上次详细查看 S3 以来,就有了这个静态网站设置。那么,我如何以编程方式将其关闭?显然我不想删除存储桶。令我惊讶的是,打开它并不会在 ACL 中创建公共权限。API 中有一项服务可以更新这些静态网站之一的属性,但不能撤销它。

API网关似乎有点相同。您可以删除 API,但不能暂停它。如果你删除它,那么重新构建可能会给你一个不同的主机名,这会产生一些麻烦。

我正在尝试编写一个相当通用的 Lambda 并将其设为公共域。

标签: amazon-web-servicesamazon-s3aws-lambda

解决方案


回答你的问题...

对于 API Gateway,您可以通过创建更新使用计划将其限制为 0来锁定它。这意味着对该 API 的任何请求都将以HTTP 429 — To many requests. 过去,AWS 确实对受限制的请求收费,但自 2016 年以来,情况不再如此,因此 0 的限制率限制将阻止您的 API 被使用或产生费用。(如果您想立即锁定它,您还应该同时将油门爆发设置为 0。)

对于 S3,您可以通过阻止整个账户或特定存储桶的所有公共访问来锁定存储

更简单的方法

话虽如此,我认为所有这些都有一个更简单的解决方案。您可以将 API Gateway 用作S3或几乎任何 AWS 服务的代理端点。然后,您可以使用每月、每周或每日配额为该端点设置 UsagePlan,从而限制允许对该 API 网关端点的 API 请求总数。

这样做的好处是您不必只对预算通知做出反应。您可以主动设置网站的使用量限制。但是,您确实需要记住,这种方法并不能完全保护您免受巨额账单的影响。(如果您允许公开访问将文件上传到您的 S3 存储桶,则可能有人上传了 5TB 的文件,这将产生大约 100 美元/月的存储成本。但是,这种情况不太可能发生,并且很容易通过不允许上传。)您还需要了解您使用的服务的定价模型,以便为您的代理 API 设置适当的限制。


推荐阅读