最后审核时间:2026年5月
使用原生 Terraform 构建 AGWA 考试中的 AWS 服务——每次构建一个代码块,并紧扣考试领域。相同的代码可在 OpenTofu 上运行。
在本实验结束时,您将使用纯 Terraform 配置好每个 Google Workspace 管理员都应该了解的 GCP 侧基础架构——包括启用 Cloud Identity API,在项目范围内创建 IAM 组,将该组绑定到查看者角色,以及设置一个 Cloud Audit Logs 接收器,将组织级别的审计事件路由到专用的日志存储桶中。总共四个模块;AGWA 考试会测试 Cloud Identity + 审计日志的边界。
将这些代码片段放入一个 main.tf 文件中,运行 terraform init,然后逐步运行 terraform apply。
注意:AGWA 考试的大部分内容都在 Workspace 管理控制台中(Gmail 路由、云端硬盘共享策略、移动设备管理、上下文感知访问),这些内容不能通过 google 提供商直接用 Terraform 配置。googleworkspace 提供商确实存在,但它需要一个具有域级委托权限的 Workspace 超级管理员服务账号——这超出了本实验的范围。
>= 1.5 或 OpenTofu >= 1.6。your-project-id 和 your-org-id 替换为实际值。在实验范围内全部免费:
Workspace 产品本身按席位计费(Business Starter 约为每月 6 美元/用户,Enterprise 版最高约为每月 30 美元/用户)——这超出了实验范围。以下基础架构是免费的。
启用 Cloud Identity、IAM 和 Cloud Logging API。
terraform {
required_version = ">= 1.5"
required_providers {
google = { source = "hashicorp/google", version = "~> 6.0" }
}
}
provider "google" {
project = "your-project-id" # REPLACE
region = "us-central1"
}
locals {
labels = {
project = "certlabpro-agwa"
managed_by = "terraform"
}
}
resource "google_project_service" "cloudidentity" {
service = "cloudidentity.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "logging" {
service = "logging.googleapis.com"
disable_on_destroy = false
}Cloud Identity Groups 是 Google Workspace 组在 GCP 侧的镜像——它们存在于相同的身份目录中,并且可以通过相同的 group-email@your-domain.com 格式进行寻址。AGWA 考试会测试这种“单一管理界面”的身份模型:在 Workspace 中配置的用户与在 GCP 中获得 IAM 绑定的身份是同一个。
我们创建一个安全组 dev-readers@your-domain.com。将 your-org-id 替换为您的 Cloud Identity 客户 ID(通过 gcloud organizations list 命令查找 → directoryCustomerId 字段)。
此资源需要域所有权——除非您控制 your-domain.com 并在组织范围内启用了 Cloud Identity API,否则它将失败。如果只是一个快速实验而没有真实域,请跳过此步骤,并在步骤 3 中使用现有的 IAM 身份。
resource "google_cloud_identity_group" "dev_readers" {
display_name = "dev-readers"
description = "Lab Cloud Identity group for the AGWA walkthrough"
parent = "customers/your-org-id" # REPLACE — find via `gcloud organizations list`
group_key {
id = "dev-readers@your-domain.com" # REPLACE with your Workspace domain
}
labels = {
"cloudidentity.googleapis.com/groups.discussion_forum" = ""
}
initial_group_config = "WITH_INITIAL_OWNER"
depends_on = [google_project_service.cloudidentity]
}Workspace 管理员通常会向 Workspace 组分配 GCP 权限——AGWA 推荐的模式是“向组授予角色,在 Workspace 中管理成员资格”。我们将步骤 2 中的 dev-readers 组绑定到当前项目的 roles/viewer 角色。任何被 Workspace 管理员添加到 dev-readers@your-domain.com 的用户都会立即继承此 GCP 项目的查看者权限。任何被移除的用户都会失去此权限。
请注意 IAM member 字段上的 group: 前缀——这是绑定组身份的规范语法。AGWA 考试还会测试其他前缀:user:(个人)、serviceAccount:(服务账号)、domain:(域中的所有用户)。
data "google_project" "current" {}
resource "google_project_iam_member" "dev_readers_viewer" {
project = data.google_project.current.project_id
role = "roles/viewer"
member = "group:${google_cloud_identity_group.dev_readers.group_key[0].id}"
}AGWA 考试会测试 Cloud Audit Logs 的范围:Admin Activity 日志始终开启且免费;Data Access 日志默认关闭并正常计费;System Event 日志始终开启且免费;Policy Denied 日志(VPC-SC 拒绝)始终开启且免费。
我们创建一个名为 audit-events 的专用日志存储桶(与默认的 _Required 和 _Default 存储桶分开),然后创建一个日志接收器,将所有与 IAM 相关的审计日志路由到其中。这为合规团队提供了一个独立于 _Default 中操作日志的保留窗口——这是 AGWA 推荐的模式,用于“审计日志保留期长于事件响应期”。
resource "google_logging_project_bucket_config" "audit" {
project = data.google_project.current.project_id
location = "global"
retention_days = 400 # 13 months — typical compliance ask
bucket_id = "audit-events"
depends_on = [google_project_service.logging]
}
resource "google_logging_project_sink" "audit_sink" {
name = "certlabpro-agwa-audit-sink"
destination = "logging.googleapis.com/${google_logging_project_bucket_config.audit.id}"
filter = "logName:\"cloudaudit.googleapis.com\" AND protoPayload.serviceName=\"iam.googleapis.com\""
unique_writer_identity = true
}terraform destroy 会销毁所有内容。Cloud Identity 组会被销毁(仅从 Cloud Identity 中删除;如果它是一个真实的 Workspace 组,可在 25 天内从管理控制台恢复)。IAM 绑定会解除;组的成员会立即失去查看者权限。日志存储桶 + 接收器会干净地销毁;400 天的保留期仅在日志写入期间有意义。
AGWA 涵盖了无法通过 google 提供商直接用 Terraform 配置的 Workspace 管理界面——Gmail 路由规则/垃圾邮件过滤器/DMARC/DKIM/SPF、云端硬盘共享默认设置/共享云端硬盘/标签、Meet 录制策略、日历会议室配置、移动设备管理(高级+基本)、Chrome 浏览器策略、上下文感知访问策略(这些策略确实通过 google_access_context_manager_* 有 Terraform 界面,但它们位于组织范围并需要 Cloud Identity Premium)、Vault 保留规则、eDiscovery 导出以及更广泛的 Workspace 管理控制台设置树。
googleworkspace Terraform 提供商存在,用于 Workspace 内部的用户/组/组织单元/域/角色分配,但它需要一个具有域级委托权限的服务账号以及超级管理员的 subject——这超出了快速实验的范围。
我们坚持使用 Cloud Identity Groups + IAM + Audit Logs 原语,因为它们是 Workspace 和 GCP 之间明确定义的边界——这是每个 Workspace 管理员必须掌握的部分。对于 Workspace 内部的管理模式(Gmail/云端硬盘/Meet/移动设备/Chrome),手册和 Editorial 部分涵盖了概念表面。