每当我在 GCP 中创建一个新项目时,它都会预加载大量我不想要的 API/服务:
BigQuery API
BigQuery Migration API
BigQuery Storage API
Cloud Datastore API
Cloud Debugger API
...
如何快速禁用所有这些?我尝试过使用 UI 来完成此操作,但这需要大量的点击和等待。有没有更快、更容易重复的方法?
附注我很确定我不需要这些,但为什么 Google 会预加载它们,而且看起来这么多?
我在文档中进行了深入研究,并将这一行拼凑在一起,我可以从 Cloud Shell 编辑器运行它:
gcloud services list --format="value(config.name)" \
| xargs -I{} gcloud services disable --force {}
config.name
一开始并不明显,读取整个 JSON 输出的量太大了。我发现这个命令可以帮助理解按键:
gcloud services list --format text --limit 1
---
config.authentication: {}
config.documentation.summary: A data platform for customers to create, manage, share and query data.
config.monitoring: {}
config.name: bigquery.googleapis.com
config.quota: {}
config.title: BigQuery API
config.usage.requirements[0]: serviceusage.googleapis.com/tos/cloud
name: projects/1036866263612/services/bigquery.googleapis.com
parent: projects/1036866263612
state: ENABLED
--force
一开始也不明显,当我在没有它的情况下运行单行代码时,我得到了这个错误:
ERROR: (gcloud.services.disable) FAILED_PRECONDITION: The service bigquery.googleapis.com is depended on by the following active service(s): bigquerystorage.googleapis.com,cloudapis.googleapis.com; Please specify disable_dependent_services=true if you want to proceed with disabling all services.
Help Token: Acz52G35wwAHic2MVFBydEf3GnUW8kGOFsau4WeUP72xPGrnZDlWAiUu5HD8AtOxQk0gv0my6uzVEXnampf1_NqXamrmHQWUwSkgOrw6ybqxTd7R
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
violations:
- subject: ?error_code=100001&service_name=bigquery.googleapis.com&services=bigquerystorage.googleapis.com&services=cloudapis.googleapis.com
type: googleapis.com
- '@type': type.googleapis.com/google.rpc.ErrorInfo
domain: serviceusage.googleapis.com
metadata:
service_name: bigquery.googleapis.com
services: bigquerystorage.googleapis.com,cloudapis.googleapis.com
reason: COMMON_SU_SERVICE_HAS_DEPENDENT_SERVICES
disable_dependent_services=true
没有出现在 gcloud services disable --help
中,但是 --force
的描述明确表明我应该使用该选项。
我有一个仅用于翻译的项目。我有多个来源,并认为禁用项目中的 api 是最安全的方法。当然,可以限制 API 密钥仅使用翻译 google api,但是如果添加了新的 api 密钥并且管理员会跳过限制步骤。 api 密钥可用于执行项目中的所有操作。
这是我启动云控制台所做的事情
#!/bin/bash
# List all services that are enabled on the project
enabled_services=$(gcloud services list --enabled --format="value(config.name)")
# Loop through the list of enabled services
for service in $enabled_services; do
if [ "$service" != "translate.googleapis.com" ]; then
echo "Disabling $service..."
gcloud services disable $service --quiet
else
echo "Skipping Cloud Translation API..."
fi
done
echo "All services except Cloud Translation API have been disabled."