如何阻止GCE enforcer删除SSH、HTTP/HTTPS防火墙规则?
关于GCE Enforcer删防火墙规则问题的解决方案
我完全能理解你遇到这种突发问题的崩溃感——托管多年的GCE实例突然毫无预警地无法访问,折腾半天发现居然是官方的gceenforcer@system.gserviceaccount.com服务账户在偷偷删你的防火墙规则,换VPC、换区域都躲不开,这换谁都得闹心!下面针对你的疑问逐一解答:
1. GCE Enforcer到底是什么?
它是Google Cloud内置的自动化管理组件,属于系统级服务账户,核心作用是维持GCE资源与平台配置的一致性。简单来说,如果你的项目/实例开启了某些“平台托管”类的配置规则,Enforcer会自动扫描并修正不符合规则的资源(比如防火墙规则),确保资源状态和预设的配置逻辑对齐。
2. 为什么它会未经通知就删除防火墙规则?
最常见的触发原因有这几个:
- 你的项目可能被组织政策约束了:比如开启了
compute.vmExternalIpAccess或防火墙规则强制合规的政策,Enforcer会严格执行这些政策,自动清理不符合要求的自定义规则 - 实例的“启用HTTP/HTTPS流量”选项看似勾选,但背后的项目级配置或组织政策被修改,导致Enforcer判定这些规则是“违规”的,所以自动删除
- 某些Google Cloud的安全优化工具触发了规则修正:比如平台的安全健康检查功能,可能会自动清理它认为存在风险的规则
3. 怎么阻止它删除规则?
第一步:检查组织政策限制
先确认项目是否受上层组织政策约束:
- 打开Google Cloud Console,进入IAM与管理员 > 组织政策
- 搜索
compute.firewallRules.enable或compute.vmExternalIpAccess相关政策,查看是否有强制限制 - 如果存在这类政策,要么调整政策允许你的自定义规则,要么申请项目级例外
第二步:修改实例的防火墙管理模式
- 进入目标GCE实例的详情页,找到“防火墙”配置区域
- 查看是否有“强制使用平台管理的防火墙规则”这类选项,如果有,取消勾选,切换为“自定义防火墙规则”模式
第三步:限制Enforcer服务账户的权限(谨慎操作)
如果上面的方法没用,可以降低gceenforcer@system.gserviceaccount.com的权限,阻止它修改防火墙:
- 进入IAM与管理员 > IAM页面,找到这个系统服务账户
- 移除它的
Compute Security Admin或Compute Firewall Admin角色,只保留Compute Viewer这类只读权限 - 之后用
gcloud命令重新添加你的防火墙规则:gcloud compute firewall-rules create allow-http --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=http-server gcloud compute firewall-rules create allow-https --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:443 --source-ranges=0.0.0.0/0 --target-tags=https-server
第四步:检查VPC网络的自动同步设置
- 进入你的VPC网络详情页,查看是否开启了“自动同步防火墙规则”选项,如果有,关闭它,确保自定义规则不会被平台自动覆盖
额外建议
如果以上方法都无效,你可以去日志资源管理器搜索gceenforcer相关的操作日志,里面会记录它删除规则的具体触发原因;也可以直接联系Google Cloud支持,提供项目ID、实例ID和规则删除的时间戳,让官方帮你排查深层问题。
内容的提问来源于stack exchange,提问作者Diwaker
相关产品推荐
相关产品推荐

