返回列表

谷歌云账单号 GCP谷歌云账号安全加固

谷歌云GCP / 2026-04-14 23:20:26

下载.png

话说某天凌晨三点,你正裹着毯子刷手机,突然收到一封邮件——「您的GCP项目已被用于挖矿,费用飙升至$12,847.63」。你猛灌一口冷咖啡,手抖着点开控制台,发现一个叫 svc-backup-legacy 的服务账号,权限高得像CEO,却连密码都没改过;另一个叫 default 的账号,居然被绑在了三个外部CI/CD流水线里,还开着 roles/editor……别慌,这不是惊悚片预告,是上周我帮客户救火时的真实开场。

谷歌云(GCP)好用是真的,但它的安全,默认不是「铁桶」,而是「敞篷跑车」——引擎轰鸣,风很大,但没顶棚。你得自己装上防滚架、系紧四点式安全带、再给油箱加个指纹锁。今天这篇,不聊ISO 27001条款编号,也不背IAM策略语法树,就当咱俩坐在工位上,泡杯茶,打开GCP控制台,一项一项动手加固。全程真实路径、真实按钮位置、真实容易踩的坑——比如那个让你以为「已启用」其实根本没生效的两步验证,我们待会儿就把它揪出来打一顿。

第一步:把你的主账号变成「门禁森严的故宫」

谷歌云账单号 别笑——很多人还在用邮箱+密码直通GCP控制台。这相当于把家门钥匙挂在门口信箱上,还贴张纸条:「备用钥匙在花盆底下」。

必须立刻做三件事:

  1. 启用两步验证(2-Step Verification):不是「应用专用密码」,不是「短信验证码」(GCP官方已不推荐短信),而是用Google Authenticator或支持TOTP的硬件密钥(如YubiKey)。路径:右上角头像 → Manage your Google AccountSecurity2-step verification。⚠️重点来了:开启后,必须点击「Verify it’s working」并成功生成并输入一次动态码,否则系统默认「挂起状态」,你以为开了,其实没开。
  2. 关闭「允许不安全应用访问」:路径同上 → SecurityLess secure app access → 确保为OFF。很多老脚本爱用这个通道,但它是裸奔通道,关掉它,逼自己改用OAuth或服务账号密钥——虽然麻烦点,但值。
  3. 设置「登录异常提醒」:同一账号在巴西、哈萨克斯坦、深圳同时登录?GCP不会自动锁你,但会发邮件。路径:Security Checkup → 开启 Email alerts for suspicious sign-in attempts。别嫌烦,这是你账户的「夜间保安」。

第二步:砍掉默认服务账号的「尚方宝剑」

GCP每个新项目都会自动生成一个 [email protected] 的默认服务账号。它默认拥有 Editor 权限,且项目内所有Compute Engine实例、Cloud Functions都默认用它运行——等于给每一台虚拟机配了一把万能钥匙。

危险操作请同步执行:

  • 进入 IAM & Admin → IAM,找到该账号,点击右侧铅笔图标 → 移除 roles/editor,换成最小必要角色,比如 roles/compute.viewer(仅查看)或 roles/storage.objectViewer(仅读对象)。
  • Compute Engine → Metadata,检查所有实例的「Service account」字段——如果还是默认账号,赶紧换!新建专用服务账号,只授所需权限。
  • 终极建议:在组织层级启用组织策略 constraints/iam.disableDefaultServiceAccount。一旦启用,新项目将不再创建默认服务账号。路径:Resource Manager → Organization Policies → 搜索该约束 → 设置为 Enforce

第三步:给服务账号「立家规」——最小权限 + 生命周期管控

别再写 roles/owner 了,那不是权限,是「信任状」。你要的是「螺丝刀」,不是「瑞士军刀」。

实操清单:

  • 按功能建账号,不按人建账号svc-db-backup 只给 Cloud SQL 和 Storage Reader;svc-ci-deploy 只给特定目录的 Artifact Registry Writer + Cloud Run Deployer。命名带业务前缀,一眼看懂用途。
  • 禁用长期密钥,拥抱短期凭证:别再下载JSON密钥文件存Git里了!改用 Workload Identity Federation(K8s/GitHub Actions友好)或 Service Account Keys with 90-day expiry(路径:IAM → Service Accounts → Keys → Add Key → Create new key → JSON → Set expiration)。
  • 定期清理「幽灵账号」:每月跑一次 gcloud iam service-accounts list --format="table(displayName, email, disabled)",把三个月没调用过的、名字含 test/dev-old 的账号直接禁用。留着?等于在墙上多凿一扇窗。

第四步:让日志说话,而不是等报警

安全不是「不出事」,而是「出事前5分钟就知道哪扇门被撬了」。

三类日志必须盯死:

  • Admin Activity 日志:谁删了防火墙规则?谁给服务账号加了Owner?路径:Logging → Logs Explorer,查询:resource.type = "project" AND log_id("cloudaudit.googleapis.com/activity")。建议导出到BigQuery,设告警:30分钟内出现5次失败的 SetIamPolicy 请求?立马微信轰炸你。
  • Data Access 日志(需手动开启):默认关闭!但它记录谁读了你的敏感数据(如Secret Manager、Cloud SQL)。开启路径:Logging → Log Router → Create Sink → 目标选BigQuery → 过滤条件加 log_id("cloudaudit.googleapis.com/data_access")
  • VPC Flow Logs:不是查「谁连了数据库」,而是查「谁连了不该连的端口」。尤其关注 connection_dest_port:22(SSH)或 connection_dest_port:3306(MySQL)来自陌生IP段的流量。

第五步:组织级兜底——用策略堵住团队的「捷径」

开发小哥说:「我就开个临时防火墙,测试完就关!」结果他休假了,防火墙开着半年……组织策略就是给他戴上的「电子手铐」。

推荐三条必启策略:

  • constraints/compute.vmExternalIpAccess:禁止所有VM申请外部IP(除非白名单项目);
  • constraints/iam.allowedPolicyMemberDomains:只允许 @yourcompany.com 邮箱加入IAM,堵死个人Gmail乱加权限;
  • constraints/storage.publicAccessPrevention:强制所有新Bucket启用 publicAccessPrevention = enforced,再也不会因一个错配的ACL导致百万文件裸奔。

最后送一句大实话:GCP安全没有「一劳永逸」,只有「持续拧螺丝」。每周花15分钟,检查一次IAM成员列表,扫一眼关键日志,确认下服务账号密钥是否快过期——这比半夜爬起来处理挖矿告警,体面多了。

对了,文末彩蛋:把这段命令复制粘贴进Cloud Shell,一键生成当前项目所有高危权限报告:
gcloud projects get-iam-policy YOUR_PROJECT_ID --flatten="bindings[].members" --format="table(bindings.role, bindings.members, bindings.condition.expression)" --filter="bindings.role:(Owner OR Editor OR SecurityAdmin)"

现在,去关掉那个还在用默认服务账号的测试实例吧。你离「凌晨三点不接告警电话」,只差这一次保存。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系