谷歌云美金充值 GCP谷歌云账户保护策略

谷歌云GCP / 2026-04-15 01:25:21

下载.png

你有没有试过凌晨三点被钉钉消息炸醒?

不是老板催KPI,是告警系统弹出一条红字:「服务账号 key 被用于异常地域登录,检测到 17 次失败 SSH 尝试」。

你猛灌一口冷咖啡,手抖着打开 GCP Console——好家伙,那个你半年前随手创建、填了「test-key-2023」就扔进角落的 service account,正被某个 IP 在哈萨克斯坦的 VPS 疯狂爆破。

别急着删账号。先深呼吸,再问自己一句:你的 GCP 账户,真的算‘有主’吗?

一、别把 IAM 当装饰画——权限不是越细越好,而是越准越稳

很多人以为「最小权限原则」就是给每个工程师配个 roles/editor,再加个 roles/storage.objectViewer,美其名曰「精准授权」。错。这就像给厨师发一把瑞士军刀,却把菜刀、剪刀、开瓶器全焊死在一起——看着全能,实则哪样都用不利索。

GCP 的 IAM 权限模型,本质是「资源 × 角色 × 成员」三维坐标系。但现实里,90% 的误配置来自一个动作:直接在项目级绑定了预定义角色

举个血泪案例:某电商团队为快速上线 CI/CD,给 Jenkins 服务账号直接授予了 roles/compute.admin。结果某次 Jenkins 插件漏洞爆发,攻击者顺藤摸瓜,不仅删光了所有实例,还把整个 VPC 的防火墙规则设成「允许所有 TCP 入站」——因为 compute.admin 包含 compute.firewalls.*,而防火墙是区域级资源,项目级授权等于全域放行。

正确姿势:自定义角色(Custom Roles)+ 资源级绑定(Resource-level binding) 双杀。

  • 比如 Jenkins 只需启动/停止特定命名空间下的 VM,那就新建角色,只包含 compute.instances.startcompute.instances.stop,且仅绑定到 projects/my-prod-123456/zones/us-central1-a/instances/jenkins-worker-* 这类带通配符的资源路径;
  • 数据库备份脚本只需读取 Cloud SQL 实例状态和导出数据?那就只授 cloudsql.instances.get + cloudsql.backupRuns.export,绝不碰 cloudsql.users.create——毕竟,谁也不想半夜收到「root 密码被重置」的短信。

二、MFA 不是摆设,是门神——但得请对路子

GCP 支持多种 MFA:Google Authenticator、Security Key(FIDO2)、甚至短信。可很多团队选了最「方便」的——短信验证码。

问题来了:去年某客户因 SIM 卡劫持,攻击者通过运营商社工补卡,3 分钟内接管了全部 GCP 组织管理员账号。短信 MFA?形同虚设。

真·硬核姿势:

  • 强制启用 Security Key(如 YubiKey):在组织层级设置 constraints/iam.allowedPolicyMemberDomainsconstraints/iam.requireMfa,并指定 requireSecurityKey
  • 禁用短信 & 语音验证码:用 Organization Policy 关闭 constraints/iam.allowedAuthenticators 中的 phone 类型;
  • 给服务账号「上锁」:Service Account 本身不支持 MFA,但你可以用 Workload Identity Federation 让它从 GitHub Actions、AWS IAM 或 Azure AD「借身份」——既免密钥,又自带 SSO 多因子。

三、密钥不是传家宝——该销毁时就别供着

翻翻你们的 gcloud iam service-accounts keys list 输出。是不是有一堆创建于 2021 年、描述写着「for legacy pipeline」的 JSON key?它们没被用,但也没被删——就像老式公寓里那扇永远不上锁的地下室门,没人走,但钥匙一直插在锁孔里。

GCP 官方建议密钥轮换周期 ≤ 90 天。但真正关键的不是「多久换」,而是「换完旧的是否真死了」。

防呆三板斧:

  1. 自动标记 + 自动禁用:用 Cloud Scheduler + Cloud Functions 定期扫描,对超 60 天未使用的密钥打 key-status: pending-deletion 标签,并发邮件;超 90 天?直接调 projects.serviceAccounts.keys.delete
  2. 禁止明文密钥落地:CI/CD 流水线中严禁 echo $KEY_JSON > key.json。改用 gcloud auth activate-service-account --key-file=- 直接管道注入;
  3. 用 Workload Identity 替代密钥:K8s 集群里 Pod 访问 GCS?用 iam.gke.io/gcp-service-account annotation 绑定服务账号,连密钥文件都不生成。

四、日志不是用来凑数的——它是你的「云上 CCTV」

默认情况下,GCP 只记录部分 Admin Activity 日志,而且保留期仅 40 天。你以为开了 Audit Logs 就高枕无忧?醒醒,data_access 日志默认是关的,而它恰恰记录谁读了你的加密密钥、谁下载了敏感 bucket——这些才是黑产最爱的「黄金日志」。

必须打开的三个开关:

  • admin_activity:开,保留 365 天(付费);
  • data_access:开,但仅对高敏资源开启(如 KMS 密钥、Secret Manager、含 PII 的 BigQuery 表),避免日志爆炸;
  • system_event:开,它能抓到「服务账号被意外删除」「组织政策被覆盖」这类底层异动。

再配上 Log Router + Pub/Sub + Cloud Function,就能实现:发现 serviceAccountKeyCreated 事件 → 自动检查创建者是否为超级管理员 → 若否,立刻触发 Slack 告警 + 邮件 + 锁定该密钥。

五、最后的底牌:组织策略 + 灾备演练

再牢的锁,也怕主人把钥匙藏在门口地垫下。GCP 最强防护,其实是「让错误操作根本无法发生」。

例如:
→ 用 constraints/compute.vmExternalIpAccess 禁止所有新 VM 分配外部 IP;
→ 用 constraints/storage.publicAccessPrevention 强制所有新 bucket 默认关闭公共读;
→ 用 constraints/iam.allowedPolicyMemberDomains 只允许 @yourcompany.com 邮箱加入 IAM。

还有,每年至少做一次「账户归零演练」:
• 找个非生产项目,模拟 CEO 账号被盗;
• 尝试删除组织根节点、关闭所有 API、清空 Billing Account;
• 记录从发现到恢复的每一步耗时——你会发现,真正卡住你的不是技术,而是「谁有权重置 Billing Account?」、「哪个 Slack 群里存着 Recovery Codes?」、「备份的 Org Policy YAML 文件在哪个 Git 分支?」

安全不是买一堆工具堆出来的,是每次部署前多按一次「确认」,每次创建密钥后多写一行销毁脚本,每次开会时多问一句「这个权限,今天还必要吗?」

谷歌云美金充值 毕竟,云没有物理围墙,但人的警惕心,永远是最厚的那堵墙。

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