Google Cloud Foundation Builder 组织策略实战指南:17 项基线安全约束的配置与部署
2026/9/14 18:58:46 网站建设 项目流程

Google Cloud Foundation Builder 组织策略实战指南:17 项基线安全约束的配置与部署

【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills

本文是google-cloud-recipe-foundation-builder技能(Agent Skill)配套的组织策略(Organization Policies)参考指南。它详细列出该技能在组织根节点强制执行的 17 项基线安全约束(13 项 Boolean 约束 + 4 项 List 约束),给出每一项的约束名称、约束类型、目标配置以及可直接用于gcloud org-policies set-policy部署的标准 YAML 模板。读完本文,你将掌握如何为 Google Cloud 组织快速建立"默认安全、最小暴露"的治理基线,并能在实际落地时安全地按顺序应用这些策略。

一、约束全景:17 项基线安全策略的构成

google-cloud-recipe-foundation-builder技能在为 Google Cloud 组织搭建企业级着陆区(landing zone)基础时,会在组织根节点依次应用 17 项基线组织策略,作为整个环境的第一道安全护栏。其完整定位与部署流程参见 Foundation Builder 技能主文档 中的Phase 3: Security Guardrails (Org Policies)章节。

从类型上划分,这 17 项策略分为两大类:

  • Boolean 约束(13 项):二进制策略,统一设置为enforce: true,即强制启用;
  • List 约束(4 项):通过allowedValues/denyAll限定允许或拒绝的具体取值。

从作用域看,它们覆盖了四类核心风险面:

  1. 身份与密钥管理(IAM):默认服务账号自动授权、服务账号密钥的创建与上传、IAM 策略成员域限制;
  2. 存储安全(Cloud Storage):公共访问预防、统一存储桶级访问;
  3. 计算与网络(Compute Engine):外部 IP 分配、串口访问、OS Login、区域 DNS、嵌套虚拟化、VPC 外部 IPv6、协议转发、Shared VPC 项目 lien 移除;
  4. 数据服务(Cloud SQL):公网 IP 限制、授权网络限制。

二、Boolean 约束:统一 YAML 模板与 13 项策略明细

所有 Boolean 约束均采用同一套 YAML 结构,只需替换[ORGANIZATION_ID](组织 ID)与[CONSTRAINT_NAME](约束名称):

name: organizations/[ORGANIZATION_ID]/policies/[CONSTRAINT_NAME] spec: rules: - enforce: true

说明:spec.rules[0].enforce: true表示该约束在组织层级被强制开启,组织内的所有下级文件夹与项目将继承该策略。若需在下级层级放行,可另行在对应层级设置豁免(此处基线不涉及)。

以下 13 项策略均使用上述模板,逐一说明其约束名称与安全意图:

2.1 身份与密钥管理类

1. Disable Automatic IAM Grants for Default Service Accounts

  • 约束名iam.automaticIamGrantsForDefaultServiceAccounts
  • 作用:阻止 App Engine 与 Compute Engine 的默认服务账号在项目创建时被自动授予 Editor 角色,避免默认账号权限过大。

2. Disable Service Account Key Creation

  • 约束名iam.disableServiceAccountKeyCreation
  • 作用:禁止用户为服务账号创建新的外部(用户管理)密钥,从源头降低长期凭据泄露风险,倒逼使用 Workload Identity Federation 等短期凭据方案。

3. Disable Service Account Key Upload

  • 约束名iam.disableServiceAccountKeyUpload
  • 作用:禁止用户向服务账号上传公钥,阻断外部密钥与服务账号的关联,与上一条形成"创建、上传双禁用"闭环。

2.2 存储安全类

4. Public Access Prevention

  • 约束名storage.publicAccessPrevention
  • 作用:对组织内所有 Cloud Storage 存储桶强制执行公共访问预防,通过 IAM 策略授予的公共访问(allUsers / allAuthenticatedUsers)将被阻止,防止数据意外公开。

5. Uniform Bucket-Level Access

  • 约束名storage.uniformBucketLevelAccess
  • 作用:对所有存储桶强制执行统一桶级访问,禁用细粒度的对象级 ACL,访问控制完全交由 IAM 统一管理,显著降低 ACL 配置错误的攻击面。

2.3 计算与网络安全类

6. Set New Project Default to Zonal DNS Only

  • 约束名compute.setNewProjectDefaultToZonalDNSOnly
  • 作用:确保新建项目仅使用 Compute Engine 实例的区域(zonal)DNS 名称,防止内部 DNS 名称跨区域泄露。

7. Disable Serial Port Access

  • 约束名compute.disableSerialPortAccess
  • 作用:禁用所有 Compute Engine 虚拟机的串口(Serial Port)访问。串口访问无法通过 IAM 精细审计,禁用后控制台访问通道更安全。

8. Restrict Shared VPC Project Lien Removal

  • 约束名compute.restrictXpnProjectLienRemoval
  • 作用:限制移除 Shared VPC 宿主项目上的 lien(留置权),防止关键网络项目被意外删除,保护共享网络的稳定性。

9. Disable VPC External IPv6

  • 约束名compute.disableVpcExternalIpv6
  • 作用:禁止向 VPC 子网与资源分配外部 IPv6 地址,收窄对外暴露面;有 IPv6 需求的环境需在受控子网单独评估放行。

10. Disable Nested Virtualization

  • 约束名compute.disableNestedVirtualization
  • 作用:禁用 Compute Engine 虚拟机上的硬件辅助嵌套虚拟化,缓解侧信道攻击向量(如基于虚拟化指令的逃逸面扩大)。

11. Require OS Login

  • 约束名compute.requireOsLogin
  • 作用:对所有 Compute Engine 实例强制启用 OS Login,将虚拟机 SSH 访问与用户 Google 身份绑定,实现 SSH 密钥的统一管理与审计,替代分散的实例级 SSH 密钥。

2.4 Cloud SQL 数据服务类

12. Restrict Public IP Access for Cloud SQL

  • 约束名sql.restrictPublicIp
  • 作用:阻止 Cloud SQL 实例以公网 IP 地址创建,强制通过私有 IP 连接数据库,从架构上消除数据库直接暴露在公网的可能。

13. Restrict Authorized Networks for Cloud SQL

  • 约束名sql.restrictAuthorizedNetworks
  • 作用:阻止向 Cloud SQL 实例的授权网络(authorized networks)列表中添加非私有 IP 网段,进一步收紧数据库的入站来源。

三、List 约束:四条策略的专用 YAML 模板

List 约束需要按各自语义使用denyAllallowedValues,不能套用 Boolean 模板。

3.1 VM External IP Access(Deny All)

  • 约束名compute.vmExternalIpAccess
  • 作用:禁止 Compute Engine 虚拟机被分配外部(公网)IP 地址。此处采用"全部拒绝"语义(denyAll: true),即默认不允许任何 VM 拥有公网 IP。
name: organizations/[ORGANIZATION_ID]/policies/compute.vmExternalIpAccess spec: rules: - denyAll: true

3.2 Restrict Protocol Forwarding Creation(Allow INTERNAL)

  • 约束名compute.restrictProtocolForwardingCreationForTypes
  • 作用:将协议转发规则(protocol forwarding rule)的创建限制为仅允许内部目标,阻止面向公网的转发规则创建。
name: organizations/[ORGANIZATION_ID]/policies/compute.restrictProtocolForwardingCreationForTypes spec: rules: - values: allowedValues: - INTERNAL

3.3 Allowed Policy Member Domains(Allow Customer ID)

  • 约束名iam.allowedPolicyMemberDomains
  • 作用:将可被添加到 IAM 策略的域身份限定为组织专属的 Google Workspace 或 Cloud Identity 客户 ID,防止外部域身份被误加进组织级 IAM 策略。
name: organizations/[ORGANIZATION_ID]/policies/iam.allowedPolicyMemberDomains spec: rules: - values: allowedValues: - [DIRECTORY_CUSTOMER_ID] # Replace with your numeric customer ID (e.g., C01234567)

替代写法:也可以使用 principal set 格式principalSet://iam.googleapis.com/organizations/[ORGANIZATION_ID],将范围限定到整个组织内的身份集。

如何获取DIRECTORY_CUSTOMER_ID:在 Phase 1 预检阶段,Foundation Builder 技能会执行gcloud organizations describe [ORGANIZATION_ID],输出中的owner.directoryCustomerId字段即为该值;displayName字段对应组织域名。详见 Foundation Builder 技能主文档 的 Phase 1。

3.4 Allowed Contact Domains(Allow Org Domain)

  • 约束名essentialcontacts.allowedContactDomains
  • 作用:将可注册为组织 Essential Contacts 的邮箱域限定为组织官方域名,确保安全通知、公告类邮件只发送到受控邮箱,防止通知被劫持到外部域。
name: organizations/[ORGANIZATION_ID]/policies/essentialcontacts.allowedContactDomains spec: rules: - values: allowedValues: - @[YOUR_DOMAIN] # Replace with your organization's domain (e.g., @example.com)

注意:此处的取值需携带@前缀(如@example.com),与 IAM 域约束(纯C01234567客户 ID)的书写格式不同。

四、部署指令:顺序应用与执行要求

4.1 核心命令

为每项策略生成对应的 YAML 文件后,使用gcloud org-policies set-policy按顺序逐条应用:

gcloud org-policies set-policy [POLICY_FILE_NAME].yaml

在 Foundation Builder 技能的整体流程中,该命令属于Phase 3: Security Guardrails,与后续的文件夹/项目创建(Phase 4)、集中式日志与监控(Phase 5)构成完整落地顺序,详见 Foundation Builder 技能主文档。

4.2 权限要求与失败自愈

执行gcloud org-policies set-policy需要orgpolicy.policy.set权限。若命令因Permission Denied失败,技能会按"懒修复(lazy role remediation)"策略尝试为部署身份授予整个Organization Admin Group(9 个角色,含roles/orgpolicy.policyAdmin)后重试;若授权命令本身失败,则暂停执行并请求组织管理员人工介入。完整的角色清单与可复制脚本见 Administrative IAM 参考。

4.3 部署顺序的安全警示

[!CAUTION] 务必先确认部署身份所在域已被允许,再应用iam.allowedPolicyMemberDomains。 该策略会立即限制可被加入 IAM 策略的域身份。如果当前执行部署的身份属于未允许的域,执行策略本身或后续步骤时可能将部署身份自身锁在管理范围之外。因此必须最后应用先确保部署身份处于允许域内再执行。

五、验证与后续检查

部署完成后,可通过以下方式确认 17 项策略均已正确落地:

# 列出组织下所有组织策略,核对 17 项目标策略均已配置 gcloud org-policies list --organization=[ORGANIZATION_ID]

在 Foundation Builder 的 Validation Logic & Checklist 中,该项对应 "Security Policies" 检查点:验证全部 17 项策略已 enforce 或正确配置,其余检查点(文件夹、账单、日志桶、日志 sink、指标作用域)参见 Foundation Builder 技能主文档 与 集中式日志与监控参考。

六、实践要点小结

  1. 两类模板不可混用:Boolean 约束统一enforce: true;List 约束按需使用denyAll: trueallowedValues
  2. 先算好两个占位值[ORGANIZATION_ID][DIRECTORY_CUSTOMER_ID],后者来自gcloud organizations describe输出的owner.directoryCustomerId
  3. 顺序敏感iam.allowedPolicyMemberDomains必须谨慎排序,避免锁定部署身份。
  4. 权限兜底:策略失败时优先通过 Organization Admin Group(含roles/orgpolicy.policyAdmin)完成自愈,而不是中断整个着陆区部署。
  5. 可追溯验证:用gcloud org-policies list --organization=...留存证据,作为合规审计基线。

这 17 项约束共同构成了 Foundation Builder 着陆区的"最小安全基线":身份侧杜绝默认授权与静态密钥,存储侧杜绝公共暴露与细粒度 ACL,计算网络侧收窄公网面并统一身份化登录,数据库侧强制私有网络连接。对于新建的 Google Cloud 组织,这套策略组合可以低成本地建立与 Google Cloud 企业级安全基线对齐的治理起点。

【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询