在AWS的海洋中成为一条小鱼的一件令人恐惧的事情是,在不太可能的情况下,由于公开曝光的服务上发生大量交易,这种责任似乎是无限的。 AWS专为大型企业而设计,对于他们而言,可用性是至关重要的。为了保持服务质量,我们付出了很多努力,但显然要从天文账单中节省下来,却没有。亚马逊似乎屡次被要求设定支出上限,但AFAIK最好的办法就是计费提醒。我读过一些恐怖的故事,例如为家人和朋友建立一个小型网站并获得10,000美元账单的家伙。亚马逊所做的最好的事情就是提供账单提醒,如果您是AFK怎么办?在您关闭之前,可能会有相当大的一笔钱消失。
所以,我的狡猾计划-写一个从计费阈值事件中解雇的Lambda,这会抬高吊桥并关闭所有面向公众的设施。
因此,我从CloudFront开始,虽然禁用分发需要花费一些时间才能传播,但这是完全可行的。
现在我们来谈谈我的第一个技术难题。我以为我可以检查所有存储桶中的公共许可权并将其吊销。但是,自从我上次详细研究S3以来,就已经有了这个静态网站设置。那么,如何以编程方式将其关闭?显然我不想删除存储桶。令我惊讶的是,未在ACL中创建公共许可。 API中有一项服务可以更新这些静态网站之一上的属性,但不能将其撤消。
与API网关似乎有些相同。您可以删除API,但不能暂停它。而且,如果删除它,那么重新构建可能会为您提供不同的主机名,这会带来一些麻烦。
我正在尝试编写一个相当通用的Lambda并将其设为公共领域。
答案 0 :(得分:0)
对于API网关,您可以通过creating或updating使用计划将其锁定,以将限制速率限制为0。这意味着对该API的任何请求都将通过响应HTTP 429 — To many requests
。过去,AWS确实会对受限制的请求收费,但是自2016年以来,that is no longer the case的限制费率限制为0将阻止您的API被使用或产生费用。 (如果要立即将其关闭,也应同时将油门爆发设为0。)
对于S3,您可以通过blocking all public access或for 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设置适当的限制。