如何快速批量禁用GCP新项目中默认启用的所有API/服务?
批量禁用GCP新项目默认API的可复用方案
控制台手动点击禁用的方式效率极低,通过命令行脚本或者基础设施即代码模板可以实现一键清理,支持跨项目重复使用。
gcloud CLI 脚本方案
提前在本地安装初始化gcloud CLI,完成账号认证、切换到目标项目后,按以下步骤操作:
- 先预览当前项目所有已启用的API,确认范围:
gcloud services list --enabled --format="value(config.name)" - 配置需要保留的核心API白名单(注意不要删除资源管理、IAM、账单相关的基础依赖API,否则会导致项目权限、账单功能异常),执行批量禁用:
# 替换为你实际需要保留的API列表 REQUIRED_APIS=( "cloudresourcemanager.googleapis.com" "iam.googleapis.com" "iamcredentials.googleapis.com" "cloudbilling.googleapis.com" ) # 批量禁用所有非白名单API gcloud services list --enabled --format="value(config.name)" \ | grep -vxFf <(printf "%s\n" "${REQUIRED_APIS[@]}") \ | xargs -I {} gcloud services disable {} --force
注意:首次执行前可以把最后一行的gcloud services disable {} --force替换成echo {},先打印所有待禁用的API列表,确认没有误加核心API后再执行正式禁用命令;--force参数用于级联关闭依赖待禁用API的关联服务,避免禁用流程报错卡住。
Terraform 模板方案
如果需要频繁创建新项目,可以把API清理逻辑做成可复用的Terraform模板,新建项目时直接套用即可,不需要每次手动执行脚本:
variable "project_id" { type = string description = "目标GCP项目ID" } # 配置需要保留的API白名单 variable "required_apis" { type = list(string) default = [ "cloudresourcemanager.googleapis.com", "iam.googleapis.com", "cloudbilling.googleapis.com" ] } # 拉取项目当前所有已启用的API data "google_project_services" "default_enabled" { project = var.project_id } # 批量禁用非白名单API resource "google_project_service" "cleanup_unneeded" { for_each = toset([ for api in data.google_project_services.default_enabled.services : api if !contains(var.required_apis, api) ]) project = var.project_id service = each.value disable_on_destroy = false }
GCP默认预加载大量API的原因
- 降低新用户上手成本:多数初次使用GCP的用户不了解"服务需要先启用API才能调用"的逻辑,默认开启BigQuery、Cloud Datastore这类高频使用服务的API,可以避免用户操作时反复触发"API未启用"的报错,减少入门阻碍。
- 支撑控制台基础功能:部分API是为GCP网页控制台的功能展示服务的,比如服务引导卡片、资源推荐、状态监控面板的加载都需要调用对应API,默认开启可以保证控制台页面功能正常可用。
- 满足服务底层依赖:GCP不少计算、运维类服务存在底层依赖关系,比如Cloud Debugger、Cloud Trace这类诊断类API是GKE、Cloud Run等服务的默认运维组件依赖项,提前开启可以避免用户部署业务时因为依赖缺失出现功能异常。
补充说明:API处于启用状态本身不会产生费用,GCP所有服务均按实际资源使用量、API调用量计费,没有实际调用的启用API不会产生账单。
内容的提问来源于stack exchange,提问作者Zach Young
相关产品推荐
相关产品推荐

