GCP 基础
📖 为什么从"基础"开始?
GCP ACE 考试有四个大域,而 Setting up a cloud solution environment 占了约 17.5% 的分数。这个域考的全是基础:项目怎么组织、权限怎么给、钱怎么管。听起来简单,但很多人在这里丢分——因为他们觉得"这些我都知道",结果被细节题绊倒。
GCP ACE (Google Cloud Associate Cloud Engineer) — Google 云平台的助理级工程师认证。 和 AWS SAA 侧重"架构设计"不同,ACE 更偏"动手操作":考题经常给你一个场景,问你该敲什么命令、选哪个配置。 简单记:SAA = 画架构图的人,ACE = 实际搭环境的人。
本章覆盖四个核心话题:GCP 全球基础设施、资源组织方式、IAM 权限管理、账单与成本控制。
📖 1. GCP 全球基础设施
1.1 为什么要关心"基础设施在哪"?
你选择在哪个 Region 部署资源,直接决定了三件事:延迟(用户访问快不快)、合规(数据能不能出境)、可用性(挂了一个机房还能不能用)。考试里经常给一个场景——"澳洲用户为主,要满足数据主权要求"——答案就是选 australia-southeast1。
1.2 Region、Zone、Multi-region
Region(区域) — 一个独立的地理位置,比如
asia-east1(台湾)、us-central1(爱荷华)。 你可以理解为"一座城市里的数据中心集群"。同一个 Region 内的服务之间网络延迟极低。
Zone(可用区) — Region 内部的一个独立数据中心,比如
asia-east1-a、asia-east1-b。 你可以理解为"同一城市的不同机房"。一个 Zone 挂了,同 Region 的其他 Zone 还在。
Multi-region(多区域) — 跨多个 Region 的逻辑位置,比如
asia、us、eu。 用于需要极高可用性和就近访问的数据存储(如 Cloud Storage 的 multi-regional bucket)。
| 层级 | 举例 | 作用 | 一句话记忆 |
|---|---|---|---|
| Multi-region | asia | 跨区域冗余,最高可用性 | "数据存好几个城市" |
| Region | asia-east1 | 同城低延迟,满足合规 | "一座城市的机房群" |
| Zone | asia-east1-a | 单个数据中心,最小部署单位 | "一栋机房楼" |
GCP 目前有 40+ 个 Region、120+ 个 Zone,覆盖 200+ 个国家和地区。
1.3 GCP 和 AWS/Azure 基础设施对比
如果你之前学过 AWS,这张表帮你快速建立映射:
| 概念 | GCP | AWS | Azure | 一句话记忆 |
|---|---|---|---|---|
| 地理区域 | Region | Region | Region | 名字一样,划分方式类似 |
| 数据中心 | Zone | Availability Zone | Availability Zone | GCP 叫 Zone,少了"Availability" |
| 全球加速 | Cloud CDN + Anycast | CloudFront | Azure CDN | GCP 的 Global LB 自带 Anycast |
| 关键差异 | VPC 是全局的 | VPC 是区域的 | VNet 是区域的 | GCP 考试高频考点! |
⚠️ 考试视角:GCP 的 VPC 是全局资源(global),不绑定某个 Region。这和 AWS 完全不同(AWS VPC 属于某个 Region)。考题经常用这个差异出陷阱题。
📖 2. 项目和资源层次结构
2.1 为什么 GCP 要搞"层次结构"?
想象你是一家公司的 IT 主管,公司有 3 个部门,每个部门有 5 个团队,每个团队有 10 个项目。如果所有资源都在同一个"大锅"里:权限没法分、账单没法拆、出了问题没法隔离。
GCP 的资源层次结构就是用来解决这个问题的——像公司的组织架构一样,从上到下层层管控。
2.2 四层结构
图解说明:
- 这张图在讲什么:GCP 资源层次结构——Organization → Folder → Project → Resource 的四层从属关系。
- 你应该先看哪里:从最顶层的 Organization 开始往下看,注意 Folder 可以嵌套多层,最终所有资源都归属于某个 Project。
- 考试常见问法:给你一个场景("研发部和市场部需要独立管理权限"),问你在哪一层设置 IAM 策略——答案通常是 Folder 层。
组织 (Organization)
└── 文件夹 (Folder) ← 可嵌套,对应"部门/团队"
└── 项目 (Project) ← 资源的基本容器
└── 资源 (Resource) ← VM、数据库、存储桶等
Organization(组织) — 整个公司的 GCP 最顶层节点,关联 Google Workspace 或 Cloud Identity 域名。 你可以理解为"公司总部":所有政策从这里往下传,CTO 在这一层设置全公司的安全基线。
Folder(文件夹) — 组织下面的分组机制,可以多层嵌套。 你可以理解为"部门":研发部下面可以再分前端组、后端组。每层 Folder 都能设独立策略。
Project(项目) — GCP 中最核心的组织单位,所有资源必须属于某个 Project。 你可以理解为"一个具体的项目组":有自己的预算、权限、API 配额。
| 层级 | 是否必需 | 能设 IAM 策略? | 策略是否继承? | 一句话记忆 |
|---|---|---|---|---|
| Organization | 推荐(企业必需) | ✅ | 向下继承 | "公司总部定规矩" |
| Folder | 可选 | ✅ | 向下继承 | "按部门分权" |
| Project | 必需 | ✅ | 向下继承 | "项目是一切的容器" |
| Resource | — | 部分支持 | — | "干活的具体资源" |
2.3 Project 的三个标识符
这是考试常考的细节题:
| 属性 | 示例 | 能否更改 | 全局唯一? | 一句话记忆 |
|---|---|---|---|---|
| Project Name | "My Web App" | ✅ 可改 | ❌ 不唯一 | "显示名,给人看的" |
| Project ID | my-web-app-123 | ❌ 不可改 | ✅ 全局唯一 | "身份证号,一旦定了改不了" |
| Project Number | 123456789012 | ❌ 不可改 | ✅ 全局唯一 | "系统自动编号,你管不了" |
⚠️ 考试视角:题目问"哪个标识符是全局唯一且不可更改的"——答案是 Project ID 和 Project Number 都满足,但 Project ID 是你在创建时选的,Project Number 是系统分配的。最常考 Project ID。
2.4 常用 gcloud 项目命令
# 创建项目
gcloud projects create my-project-id --name="My Project"
# 列出所有项目
gcloud projects list
# 切换当前项目
gcloud config set project my-project-id
# 查看当前配置
gcloud config list
📖 3. Cloud IAM —— 谁能做什么
3.1 为什么 IAM 是考试重点?
ACE 考试四个域中,Configuring access and security 占 17.5%,而 IAM 是这个域的核心。更关键的是,IAM 渗透到其他所有域——你部署 VM 要权限,查日志要权限,管账单也要权限。搞不清 IAM,后面每道题都可能踩坑。
3.2 IAM 的核心模型
GCP IAM 的权限模型可以用一句话概括:"谁"(Member)被赋予了"什么角色"(Role),可以对"哪些资源"(Resource)做操作。
图解说明:
- 这张图在讲什么:IAM Allow Policy 的结构——一条 Policy 由多个 Role Binding 组成,每个 Binding 把一组 Member 绑定到一个 Role 上。
- 你应该先看哪里:先看中间的 Role Binding 框,理解"Member + Role = 权限"这个核心关系。
- 考试常见问法:题目给一段 IAM Policy JSON,问你"alice 在这个项目上有什么权限"——需要找到 alice 所在的 Binding,看绑定的 Role。
IAM Policy(策略) — 把 Member 和 Role 绑定在一起的"合同"。 你可以理解为"门禁授权单":上面写着"张三(Member)获得了前台接待权限(Role),可以进出大楼前厅(Resource)"。
Member 类型
| 类型 | 格式 | 用途 | 一句话记忆 |
|---|---|---|---|
| Google 账号 | user:alice@gmail.com | 个人用户 | "一个人" |
| 服务账号 | serviceAccount:my-sa@proj.iam.gserviceaccount.com | 应用/服务 | "一个程序" |
| Google Group | group:dev@company.com | 团队管理 | "一群人" |
| Cloud Identity 域 | domain:company.com | 整个公司 | "全公司" |
| allUsers | allUsers | 任何人(含匿名) | "全世界" |
| allAuthenticatedUsers | allAuthenticatedUsers | 任何登录的 Google 用户 | "登录了的人" |
3.3 三种角色类型
这是 IAM 最核心的考点。GCP 角色分三种,权限粒度从粗到细:
基本角色 (Basic/Primitive Roles) — "大权限"
| 角色 | 权限 | 一句话记忆 |
|---|---|---|
| Viewer | 只读,看得见但不能改 | "参观者" |
| Editor | 读写,能改但不能管权限和账单 | "干活的人" |
| Owner | 全部权限,包括管权限和账单 | "老板" |
⚠️ 基本角色权限太大,生产环境不推荐使用。考题里如果看到"遵循最小权限原则",答案一定不是 Basic Role。
预定义角色 (Predefined Roles) — "精细权限"
Google 针对每个服务预先定义好的角色,权限粒度远比 Basic Role 细。
roles/compute.instanceAdmin → 可以管 VM 实例
roles/storage.objectViewer → 可以看 Cloud Storage 中的对象
roles/cloudsql.admin → 可以管 Cloud SQL 数据库
预定义角色是考试最推荐的选择。题目说"按最小权限原则分配",大概率选预定义角色。
自定义角色 (Custom Roles) — "DIY 权限"
当预定义角色给的权限不够精确时(比如你只想给某人"创建 VM 但不能删除 VM"的权限),可以自己组合权限。
# 创建自定义角色
gcloud iam roles create myCustomRole \
--project=my-project \
--title="VM Creator Only" \
--permissions=compute.instances.create,compute.instances.get
⚠️ 考试视角:自定义角色只能在 Organization 或 Project 级别创建,不能在 Folder 级别创建。这是常见陷阱。
3.4 角色选择决策树
需要分配权限
│
├─ 是否有合适的预定义角色?
│ ├─ YES → 用预定义角色 ✅(推荐)
│ └─ NO → 预定义角色权限太大?
│ ├─ YES → 用自定义角色 ✅
│ └─ NO → 组合多个预定义角色 ✅
│
└─ 永远不要选 Basic Role(除非题目明确说"快速原型/测试环境")
3.5 服务账号 (Service Account) —— 给程序用的"身份证"
Service Account(服务账号) — 不是给人用的,是给应用程序和 VM 用的身份。 你可以理解为"工牌":你的应用"戴上"这个工牌,就能以特定权限访问 GCP 资源。
服务账号有两个关键用途:
用途 1:给 VM 一个身份
# 创建服务账号
gcloud iam service-accounts create my-app-sa \
--display-name="My App Service Account"
# 给服务账号授权
gcloud projects add-iam-policy-binding my-project \
--member="serviceAccount:my-app-sa@my-project.iam.gserviceaccount.com" \
--role="roles/storage.objectViewer"
VM 启动时绑定这个服务账号,VM 里跑的程序就自动拥有对应权限,不需要硬编码密钥。
用途 2:服务间授权
Service A 需要调用 Service B 的 API?给 Service A 的服务账号授予访问 Service B 的角色即可。
⚠️ 考试视角:
- 默认的 Compute Engine 服务账号权限是 Editor(太大了!),生产环境应该创建自定义服务账号
- 服务账号也可以被"模拟"(impersonate),考题可能问"不下载密钥文件的前提下如何让本地程序以服务账号身份运行"——答案是
--impersonate-service-account
3.6 IAM 策略继承
IAM 策略沿资源层次结构向下继承,且只能加权限、不能减权限。
图解说明:
- 这张图在讲什么:IAM 策略如何沿 Organization → Folder → Project 层次向下继承,子级自动获得父级的所有权限。
- 你应该先看哪里:先看顶层 Organization 的策略,然后沿箭头往下看每一层新增了什么角色——最终有效权限是所有层级的并集。
- 考试常见问法:题目给你一个多层 IAM 配置,问"用户在 Project 层的有效权限是什么"——要把所有父级权限加起来。
Organization: alice = Viewer
└── Folder "Dev": alice = Editor
└── Project "web-app": (alice 继承 Editor)
└── VM instance: (alice 继承 Editor)
在这个例子里,alice 在 Organization 层是 Viewer,但在 Dev Folder 层被额外授予了 Editor。在 web-app Project 及其下的所有资源中,alice 的有效权限是 Editor(取所有层级权限的并集)。
⚠️ 考试视角:子级不能"撤销"父级授予的权限。如果有人在 Organization 层被授予 Owner,你在 Project 层无法把 TA 降为 Viewer——只能从 Organization 层移除。
📖 4. Cloud Console 与 CLI 工具
4.1 四种交互方式
| 工具 | 场景 | 一句话记忆 |
|---|---|---|
| Cloud Console | 浏览器 GUI,适合探索和学习 | "看菜单点菜" |
| gcloud CLI | 终端命令行,适合日常操作和脚本 | "背菜单直接喊" |
| Cloud Shell | 浏览器内终端,预装工具,免费 | "自带厨房的餐厅" |
| Client Libraries | SDK,适合应用程序集成 | "外卖接口" |
4.2 gcloud CLI 结构
gcloud 命令的格式高度统一,记住这个模式就能举一反三:
gcloud <服务> <资源> <动作> [参数]
# 例子:
gcloud compute instances create my-vm --zone=us-central1-a
gcloud storage buckets create gs://my-bucket --location=asia
gcloud iam service-accounts list
4.3 配置管理(考试常考)
# 初始化(首次使用)
gcloud init
# 查看当前所有配置
gcloud config list
# 设置默认 Region 和 Zone
gcloud config set compute/region asia-east1
gcloud config set compute/zone asia-east1-a
# 创建命名配置(多项目切换)
gcloud config configurations create dev-config
gcloud config configurations activate dev-config
# 列出所有配置
gcloud config configurations list
Named Configuration(命名配置) — 一组保存的 gcloud 设置(项目、区域、账号等),可以快速切换。 你可以理解为"浏览器的多个用户 Profile":工作用一套配置,个人用另一套,一键切换。
⚠️ 考试视角:题目说"需要在多个项目间频繁切换"——答案是 Named Configurations,不是每次都 gcloud config set project xxx。
4.4 Cloud Shell
Cloud Shell 是 GCP 提供的免费浏览器终端,预装了 gcloud、kubectl、docker、terraform 等工具。
| 特性 | 详情 | 一句话记忆 |
|---|---|---|
| 费用 | 免费 | "白嫖的开发机" |
| 存储 | 5 GB 持久化 Home 目录 | "关了浏览器文件还在" |
| 预装工具 | gcloud、kubectl、git、docker、python、node | "开箱即用" |
| 超时 | 闲置 20 分钟断开 | "不用就关灯" |
| Web Preview | 支持 8080 端口 Web 预览 | "能跑个小网站看效果" |
📖 5. 账单管理
5.1 为什么账单管理是考点?
很多人以为 ACE 只考技术操作,忽略了账单。但 "Setting up a cloud solution environment" 域明确包含 billing 相关知识。考题通常不问具体数字,而是问"怎么设置预算警报"、"怎么分析成本"、"怎么限制支出"。
5.2 账单账户 (Billing Account)
Billing Account(账单账户) — 付钱的实体,可以是信用卡或发票。 你可以理解为"公司的财务部":多个项目(部门)的支出都归它管,统一出账。
核心关系:
- 一个 Billing Account 可以关联多个 Project
- 一个 Project 只能关联一个 Billing Account
- 没有 Billing Account 的 Project 不能使用付费资源
5.3 成本管理工具
| 工具 | 用途 | 考试怎么考 | 一句话记忆 |
|---|---|---|---|
| Budgets & Alerts | 设置预算阈值,超了发通知 | "如何在支出达到 80% 时收到警报" | "花钱预警器" |
| Billing Export → BigQuery | 把详细账单导到 BigQuery 分析 | "如何分析过去半年每个服务的花费趋势" | "账本导出做分析" |
| Cost Table / Reports | Console 里看费用报表 | "快速查看本月支出" | "看账单" |
| Committed Use Discounts (CUD) | 承诺 1 年或 3 年用量换折扣 | "如何降低长期运行 VM 的成本" | "健身房年卡" |
| Sustained Use Discounts (SUD) | 持续使用自动折扣(Compute Engine) | "VM 跑满一个月自动打折" | "常客自动优惠" |
| Recommender | AI 建议优化资源 | "如何找到浪费的资源" | "AI 帮你省钱" |
5.4 预算和警报设置
# 通过 Console 操作(考试场景更多):
# Billing → Budgets & alerts → Create budget
# 设置金额阈值(如 $500/月)
# 设置通知规则(50%, 80%, 100%)
# 可选:触发 Cloud Functions 自动关停资源
⚠️ 考试视角:预算警报只发通知,不会自动停止资源!想要自动停止,需要配合 Cloud Functions。考题经常用"设置了预算警报后费用仍然超支"来考你——因为警报本身不阻止花钱。
5.5 GCP 定价模型
| 定价模式 | 折扣幅度 | 承诺期 | 适用场景 | 一句话记忆 |
|---|---|---|---|---|
| On-Demand | 0% | 无 | 短期、不确定的工作负载 | "出租车" |
| Sustained Use (SUD) | 最高 30% | 自动 | Compute Engine 持续运行 | "常客自动打折" |
| Committed Use (CUD) | 最高 57% | 1 年或 3 年 | 稳定的长期工作负载 | "健身房年卡" |
| Preemptible/Spot VM | 最高 91% | 无(随时被回收) | 容错型批处理 | "候补票" |
⚠️ 考试视角:SUD 和 CUD 的区别是高频考点。SUD 是自动的,你不需要做任何操作;CUD 需要主动购买承诺。题目问"不需要任何额外操作就能获得折扣"——答案是 SUD。
📖 6. gcloud 命令速查
ACE 是动手操作型考试,这些命令必须熟悉:
项目管理
gcloud projects create PROJECT_ID
gcloud projects list
gcloud projects describe PROJECT_ID
gcloud config set project PROJECT_ID
IAM 管理
# 查看项目 IAM 策略
gcloud projects get-iam-policy PROJECT_ID
# 添加成员角色
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="user:alice@example.com" \
--role="roles/editor"
# 移除成员角色
gcloud projects remove-iam-policy-binding PROJECT_ID \
--member="user:alice@example.com" \
--role="roles/editor"
# 服务账号操作
gcloud iam service-accounts create SA_NAME
gcloud iam service-accounts list
gcloud iam service-accounts keys create key.json \
--iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com
配置管理
gcloud config list
gcloud config set compute/region REGION
gcloud config set compute/zone ZONE
gcloud config configurations create CONFIG_NAME
gcloud config configurations activate CONFIG_NAME
gcloud config configurations list
🎯 场景速查表
| 场景 | 选什么 | 为什么 |
|---|---|---|
| "按最小权限原则分配权限" | Predefined Role | 比 Basic Role 精确,比 Custom Role 方便 |
| "开发者需要创建 VM 但不能删除" | Custom Role | 预定义角色做不到这么精细 |
| "测试环境快速给全部权限" | Basic Role (Editor) | 测试环境可以放宽 |
| "应用程序需要访问 Cloud Storage" | Service Account | 程序用服务账号,不要用人的账号 |
| "多个项目间频繁切换" | Named Configurations | 一键切换整套配置 |
| "控制每月支出不超预算" | Budget Alert + Cloud Functions | 警报只通知,要自动停需要 Functions |
| "降低长期运行 VM 成本" | CUD(1/3 年承诺) | 稳定负载用 CUD 最划算 |
| "VM 跑满月自动打折" | SUD(自动) | 不需要任何操作,自动生效 |
| "批处理任务,能容忍中断" | Preemptible/Spot VM | 最高 91% 折扣,但随时可能被回收 |
| "数据必须留在澳洲" | Region: australia-southeast1 | 数据主权合规 |
| "全球唯一不可更改的项目标识" | Project ID | Name 可改,Number 也唯一但系统分配 |
⚠️ 常见错误
- 以为 Budget Alert 能自动停止资源 — 不能,只能发通知。想自动停,需要配合 Cloud Functions。
- 在生产环境用 Basic Role — Editor 权限太大,应该用预定义角色。考题看到"最小权限"就排除 Basic Role。
- 以为 GCP 的 VPC 和 AWS 一样是区域的 — GCP 的 VPC 是全局的,Subnet 才是区域的。
- 混淆 Project ID 和 Project Name — ID 不可改且全局唯一,Name 可以改且不唯一。
- 用个人 Google 账号给应用程序鉴权 — 应用程序应该用 Service Account,不要用
user:xxx@gmail.com。 - 以为自定义角色可以在 Folder 级别创建 — 只能在 Organization 或 Project 级别。
- 忽略 SUD 自动折扣 — SUD 不需要任何操作,VM 持续运行自动生效。题目问"不需要额外操作的折扣"就选 SUD。