Chapter 13: Production Operations & Advanced GCP
Topic 85

Landing Zones with Cloud Foundation Fabric / FAST

Landing ZoneGCP

A landing zone is the opinionated baseline an org sits on top of — the resource hierarchy, the billing wiring, shared networking, IAM groups, centralized logging, and the org-policy guardrails that every new project inherits. Building it by hand from the raw primitives is months of work that most teams get partly wrong, and the parts they get wrong are the ones nobody notices until an audit or an incident.

Cloud Foundation Fabric is Google's open-source Terraform module library, and FAST — Fabric FAST — is its staged, end-to-end landing-zone blueprint. Adopting FAST greenfield gives the Hatch org a production hierarchy in days instead of months. The harder problem — wrapping FAST around an org that already exists — is a careful import-and-stage exercise, not a fresh apply, and getting that distinction wrong is how a stage tries to create what is already there.

What a Landing Zone Is

The landing zone is the org-level foundation, built once so every project lands into a governed environment. For Hatch that is the platform/apps/data folder structure, the billing-account wiring, the Shared VPC host project (hatch-net-host), the IAM groups like gcp-org-admins@hatch.io, the org policies that constrain what projects may do, and centralized logging. None of these are application infrastructure; they are the governed ground every application is then deployed onto.

Cloud Foundation Fabric

GoogleCloudPlatform/cloud-foundation-fabric is Google's maintained library of composable Terraform modules — a project factory, a Shared-VPC module, IAM helpers — plus reference end-to-end blueprints that wire them together. It is the successor in practice to the older Cloud Foundation Toolkit (CFT) modules, and it is where Google's own opinion about how a GCP org should be structured is actually encoded. You consume it; you do not reinvent it.

FAST — The Staged Bootstrap

Fabric FAST is a sequence of stages applied in order. Stage 0, org-setup, seeds the automation project, the Terraform state bucket, and the bootstrap identity, and also lays down the folder hierarchy and org policies. Then come networking (the Shared VPC baseline), security (KMS and central logging), and the project factory on top. The staging is not arbitrary: later stages depend on the IAM and the projects that earlier stages create, so the order is the dependency graph made explicit.

FAST stages run in dependency order
# Each stage consumes the outputs of the prior one — order is mandatory
0-org-setup/            # seed project, state bucket, identity, folders, org policies
2-networking/           # Shared VPC baseline (hatch-net-host)
2-security/             # KMS, central logging
2-project-factory/      # projects land here, governed
FAST stages run in dependency order
org-setup
networking
security
project factory

Greenfield Adoption

On a fresh org you run the FAST stages in order, feeding each stage the outputs of the prior one. The result is exactly the Hatch Layer B shape — the org, the folders, the host project, the groups, and hatch-tfstate — produced by reviewed Terraform instead of hand-clicking. The bootstrap stage is the one that creates the very state bucket the rest of the org will then use, which is why it runs first and why its own state needs the same protection every other stack relies on.

Brownfield Adoption of an Existing Org

Wrapping FAST around an org that already has projects and folders is the hard case. You import the existing folders, host project, and bindings into the FAST state stage by stage, run plan until each stage is a no-op, and only then let FAST manage forward. Done carelessly, an un-imported folder makes FAST try to create a folder that already exists, or an org-policy stage clobbers a live policy and locks people out. Brownfield is an import exercise wearing a landing-zone costume.

Config Connector as the KRM Alternative

For org management there is one real alternative. Config Connector — and Config Controller — expresses the same hierarchy and IAM as Kubernetes resources, reconciled continuously by an in-cluster controller that corrects drift on its own. Choose it when the org already lives in Kubernetes and wants drift corrected automatically. But Fabric/FAST is the Terraform-native answer and the form Google ships its reference landing zone in, so it is the default unless the org is genuinely Kubernetes-first.

Cloud Foundation Fabric / FAST vs Config Connector

Cloud Foundation Fabric / FAST — Terraform: staged, plan-reviewed, applied by CI, and the form Google's reference landing zone ships in. Choose it for a Terraform-standardized org, which is most orgs.

Config Connector — expresses the hierarchy as Kubernetes resources reconciled by an in-cluster controller with continuous drift correction. Choose it only when the org is already Kubernetes-native and wants the controller model. Both can build the same Hatch hierarchy; they differ in the engine and in who reconciles drift.

Common Mistakes
  • Adopting FAST brownfield without importing the existing folders, host project, and bindings first, so a stage tries to create folders that already exist or an org-policy stage overwrites a live policy and locks people out.
  • Running the FAST stages out of order — networking before org-setup, or skipping the foundation stage — so a later stage references IAM or projects that do not exist yet and fails mid-apply.
  • Forking and hand-editing Fabric modules instead of consuming them at a pinned version, then being unable to take upstream fixes when a google provider major breaks something.
  • Hand-building the hierarchy from raw google_folder/google_project resources to avoid "a dependency," then reinventing — worse — the project factory, Shared-VPC wiring, and org policies Fabric already solved.
  • Letting the FAST bootstrap stage create the state bucket but never enabling versioning, CMEK, and tight IAM on it, leaving the org's foundation state under-protected.
Best Practices
  • Adopt Cloud Foundation Fabric / FAST for a new org rather than hand-assembling the hierarchy, billing, networking, and IAM from primitives.
  • Run the FAST stages strictly in order, feeding each stage the outputs of the prior, and pin Fabric modules to a known version.
  • For brownfield, import existing folders, projects, and bindings stage by stage and confirm a no-op plan before letting FAST manage forward.
  • Reserve Config Connector for genuinely Kubernetes-native orgs that want continuous drift correction, and default to Fabric/FAST for a Terraform-standardized org.
  • Protect the bootstrap-created state bucket with versioning, CMEK, and tight IAM the moment it exists, since the whole org's foundation state lives in it.
Comparable tools Cloud Foundation Toolkit the older CFT modules Fabric succeeds Config Connector · Config Controller the KRM alternative AWS Landing Zone · Control Tower the cross-cloud analog

Knowledge Check

What does a landing zone provide, and why is building it by hand error-prone?

  • The org-level foundation — hierarchy, billing, shared networking, IAM groups, logging, policies — every project inherits, and hand-building it is months of error-prone work
  • A single reusable project template you copy and paste for each new app, carrying its own labels, default service account, and a starter VPC, but with no folder hierarchy, billing wiring, or org-level concerns at all above the project boundary
  • A read-only billing dashboard that reports spend but has no effect on resource provisioning
  • A network firewall ruleset for the org and nothing more beyond that

Why must the FAST stages run in order?

  • Later stages depend on the IAM and projects earlier stages create, so the order is the dependency graph made explicit
  • Terraform itself refuses to apply more than one FAST stage within a single project
  • The stages are ordered alphabetically by directory name and the leading numbers are purely a cosmetic convention to keep the folders sorted neatly in the file browser
  • Running them out of order is faster and still produces exactly the same end result

What makes brownfield FAST adoption fundamentally different from greenfield?

  • The existing folders, host project, and bindings must be imported stage by stage until each plan is a no-op, or FAST tries to create what already exists
  • Brownfield skips the org-setup bootstrap stage entirely, inherits the existing seed service account and state bucket untouched, and instead starts the FAST sequence directly at the networking stage
  • Brownfield consumes a completely different Fabric module library than greenfield adoption does
  • There is no real difference; both greenfield and brownfield are a single fresh apply

When is Config Connector justified over Fabric/FAST for org management?

  • When the org is already Kubernetes-native and wants the hierarchy reconciled continuously by an in-cluster controller with automatic drift correction
  • Always, because the KRM resource model is strictly superior to Terraform for any org management and its continuous reconciliation loop removes the need to ever run a plan or apply against the hierarchy again
  • Whenever the org grows past more than roughly ten managed projects
  • Only once Google has formally deprecated Cloud Foundation Fabric, which it now has

You got correct