如何设置预算告警触发后自动暂停整个AWS账户的全部活动
AWS预算告警触发后自动冻结账户所有活动的配置方案
AWS没有原生的「一键暂停全账户所有活动」功能,该操作存在极高的业务中断风险,因此需要通过组合多个AWS服务的能力实现需求,具体配置方案如下:
前置准备
- 确认已开通AWS Budgets并配置好对应阈值的告警规则,告警需发送到Amazon SNS主题,后续自动化流程将监听该SNS主题的消息
- 提前创建专用IAM角色,给角色授予服务控制策略(SCP)修改权限、Lambda调用权限,遵循最小权限原则仅开放必要权限
- 提前设置好专属应急运维角色/根用户白名单,避免冻结后无法自行解除限制
方案1:通过SCP冻结全账户非必要操作(推荐)
该方案不会删除现有运行资源,仅禁止所有新增/修改类操作,避免费用持续上涨,对业务影响可控:
- 编写限制全量操作的SCP策略,示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAllNonEssentialActions", "Effect": "Deny", "NotAction": [ "iam:DetachPolicy", "organizations:DetachPolicy", "organizations:DeletePolicy" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:PrincipalARN": "arn:aws:iam::你的账户ID:role/你的应急运维角色名" } } } ] }
- 创建Lambda函数,逻辑为:接收到SNS推送的预算告警消息后,自动将上述SCP策略挂载到AWS账户根节点,若为组织成员账户则挂载到对应成员账户节点
- 配置SNS主题的订阅规则,将上述Lambda函数设为订阅端,触发条件绑定预算告警阈值即可
方案2:强制停止所有可计费资源(仅适用于单账户无组织场景)
如果需要直接停止所有运行中的收费资源,可以在Lambda函数中扩展如下逻辑:
- 遍历所有区域的EC2实例,调用
stop_instances接口停止所有实例 - 遍历所有区域的RDS实例,调用
stop_db_instance接口停止实例,可同步配置快照后删除逻辑避免闲置计费 - 遍历所有S3存储桶,配置禁止写入规则,避免产生额外存储和流量费用
- 遍历所有闲置EIP、未挂载EBS卷,直接释放避免持续扣费
注意事项
- 配置SCP策略时必须将应急运维角色/根用户排除在拒绝规则之外,避免触发冻结后无法自行操作解除限制
- 所有自动化流程配置完成后必须做模拟触发测试,同时验证应急恢复流程可用,避免误触发导致不可逆的业务中断
- 建议配置多级告警规则:80%预算阈值触发邮件、短信通知,100%阈值触发SCP操作限制,120%阈值再触发资源停止逻辑,降低误操作风险
- 不要直接配置激进的资源删除逻辑,避免告警误触导致业务数据丢失
内容的提问来源于stack exchange,提问作者Aleksandr Zakharov
相关产品推荐
相关产品推荐

