在计费恐慌中锁定公共网站访问权限

时间:2019-02-27 09:12:24

标签: amazon-web-services amazon-s3 aws-lambda

在AWS的海洋中成为一条小鱼的一件令人恐惧的事情是,在不太可能的情况下,由于公开曝光的服务上发生大量交易,这种责任似乎是无限的。 AWS专为大型企业而设计,对于他们而言,可用性是至关重要的。为了保持服务质量,我们付出了很多努力,但显然要从天文账单中节省下来,却没有。亚马逊似乎屡次被要求设定支出上限,但AFAIK最好的办法就是计费提醒。我读过一些恐怖的故事,例如为家人和朋友建立一个小型网站并获得10,000美元账单的家伙。亚马逊所做的最好的事情就是提供账单提醒,如果您是AFK怎么办?在您关闭之前,可能会有相当大的一笔钱消失。

所以,我的狡猾计划-写一个从计费阈值事件中解雇的Lambda,这会抬高吊桥并关闭所有面向公众的设施。

因此,我从CloudFront开始,虽然禁用分发需要花费一些时间才能传播,但这是完全可行的。

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

与API网关似乎有些相同。您可以删除API,但不能暂停它。而且,如果删除它,那么重新构建可能会为您提供不同的主机名,这会带来一些麻烦。

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

1 个答案:

答案 0 :(得分:0)

回答您的问题...

对于API网关,您可以通过creatingupdating使用计划将其锁定,以将限制速率限制为0。这意味着对该API的任何请求都将通过响应HTTP 429 — To many requests。过去,AWS确实会对受限制的请求收费,但是自2016年以来,that is no longer the case的限制费率限制为0将阻止您的API被使用或产生费用。 (如果要立即将其关闭,也应同时将油门爆发设为0。)

对于S3,您可以通过blocking all public accessfor the entire account for a specific bucket来锁定存储桶。

更简单的方式

话虽这么说,我认为所有这一切都有一个更简单的解决方案。您可以将API Gateway用作proxy endpoint for S3或用于pretty much any AWS service。然后,您可以使用每月,每周或每天的配额为该终结点设置一个UsagePlan,以限制对该API网关终结点允许的API请求总数。

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