创建预算操作以关闭 Lambda

ite*_*ory 4 amazon-web-services aws-lambda

我注册了一个免费的 AWS Lambda 帐户,并创建了一个简单的公共服务供我和其他人使用。然而,由于我还不知道使用情况如何,所以我现在要小心。否则,有人可能会简单地向我的服务发送一百万个请求,我就会为此付费。我宁愿不提供该服务。

因此,我想创建一个预算操作,一旦超过 0.01 美元,就关闭所有服务。我这样做的方法是,我向 Lambda 服务角色(在设置 lambda 服务时自动创建)授予预算权限 (budgets.amazonaws.com),然后进行 IAM 操作设置,添加AWSDenyAll一旦超出预算,就对角色本身进行管理政策。

这似乎不起作用。如果我手动附加AWSDenyAll策略,Lambda 服务仍然可用。我对角色/政策系统的理解也可能从根本上是错误的。

如何实现可从预算警报触发的“完全关闭”操作?

Erm*_*ary 5

您将该AWSDenyAll策略应用到Lambda 函数的执行角色,该角色用于定义从 Lambda 本身访问 AWS 资源的权限(配置 > 权限 > 执行角色)。

您实际上已阻止 Lambda 函数本身访问 AWS 服务。

您尚未阻止任何 IAM 委托人(用户或角色)、AWS 服务(包括 API 网关)或其他 AWS 账户,这就是您的 Lambda 仍然可以手动或通过网关调用的原因。


现在,现在可能出现的一个问题是“如何阻止 API 网关调用我的 Lambda?”。

API Gateway 获得触发 Lambda 的访问权限的方式是通过基于资源的权限策略(配置 > 权限 > 基于资源的策略)。

这并未“封装”在 IAM 实体(用户或角色)内,目前,您只能在 AddPermission 和 AddLayerVersionPermission API 操作范围内更新 Lambda 资源的基于资源的策略

这意味着撤销 API Gateway 调用您的函数的访问权限的唯一方法是删除允许 API Gateway 使用 API 操作RemovePermission或通过控制台调用您的函数的资源策略。

没有办法通过预算行动来做到这一点。


可能出现的另一个问题是“如何防止 API GatewayLambda 函数被调用?”。

根据文档,使用预算操作仍然无法实现这一点,您只能应用 IAM 策略或服务控制策略 (SCP),这些策略都无法帮助您防止触发通过 API 网关触发的 Lambda。您可以阻止 AWS 用户在控制台内触发 Lambda,但无法阻止 API 网关,除非您使用 IAM 对用户进行身份验证。


一旦达到特定的预算限制,就没有任何方法可以“关闭”Lambda 函数或 API 网关。

您只需创建一个预算来提醒您,过滤服务维度,例如 Lambda 和 API 网关服务,然后采取手动操作(设置具有固定使用量和实际/预测通知的每月使用预算)。