Enterprise-grade, security-hardened multi-cloud landing zone using Terragrunt and Terraform. Supports AWS and GCP with compliance frameworks including PCI DSS, CIS Benchmarks, and SOC 2.
- Quick Start
- Architecture
- Repository Structure
- Prerequisites
- Available Commands
- Network Architecture
- Security and Compliance
- CI/CD Pipeline
- Configuration Management
- Contributing
- License
git clone https://github.com/cloudon-one/multi-cloud-runway.git
cd multi-cloud-runway
make verify-setup # Check prerequisites
make init # Initialize AWS + GCP
make dev-plan # Plan dev environmentgraph LR
subgraph AWS["AWS Landing Zone"]
A1[VPC / TGW / VPN]
A2[EKS / EC2]
A3[RDS / Aurora / DynamoDB / Redis]
A4[CloudTrail / GuardDuty / SCP]
end
subgraph GCP["GCP Landing Zone"]
G1[Shared VPC / Cloud NAT / DNS]
G2[GKE / Workload Identity]
G3[Cloud SQL / Memorystore]
G4[Audit Logging / IAM / KMS]
end
TG[Terragrunt] --> AWS
TG --> GCP
| Layer | Components |
|---|---|
| Organization | Multi-account structure with OUs (Management, Security, Network, Production, Development) |
| Networking | VPCs per region/env, Transit Gateway, Site-to-Site VPN |
| Compute | EKS clusters, EC2 instances with ASG |
| Data | RDS, Aurora, DynamoDB, ElastiCache Redis, S3 |
| Security | CloudTrail, GuardDuty, SCPs, IAM roles/groups/policies |
| Regions | US (us-east-2), EU (eu-west-2) |
| Layer | Components |
|---|---|
| Organization | Folder hierarchy (admin, shrd, dev, stg, prod) with Shared VPC |
| Networking | Shared VPC host/service projects, Cloud NAT, Cloud DNS, VPC Peering, VPN |
| Compute | Private GKE clusters with Workload Identity, multiple node pools |
| Data | Cloud SQL (PostgreSQL), Cloud Memorystore (Redis) |
| Security | Cloud KMS, IAM permissions, audit logging, firewall rules |
| Regions | US (us-east1), EU (europe-west1) |
.
├── aws-terragrunt-configuration/
│ └── aws/
│ ├── _env.hcl # Shared locals for env-pattern configs
│ ├── _module_version.hcl # Centralized module version (v1.0.0)
│ ├── common.hcl # Root config: S3 backend, provider, default_tags
│ ├── vars.yaml # All environment configurations
│ ├── {service}/{region}/{env}/ # Service deployments (vpc, eks, rds, etc.)
│ ├── accounts/ # AWS Organization accounts
│ ├── network/ # Core networking (VPC, TGW)
│ ├── security/ # SCPs, EventBridge, security SNS
│ └── iam/ # IAM roles, groups, policies, users
├── gcp-terragrunt-configuration/
│ ├── terragrunt/
│ │ ├── terragrunt.hcl # Root config: GCS backend
│ │ ├── vars.yaml # All environment configurations
│ │ └── envs/ # Environment deployments
│ │ ├── global/ # Admin, audit, IAM, DNS
│ │ ├── shrd/{dev,prod}/ # Shared services
│ │ ├── dev/eu/ # Development
│ │ ├── stg/{eu,us}/ # Staging
│ │ └── prod/{eu,us}/ # Production
│ └── tf-modules/ # Local Terraform modules (14 modules)
├── scripts/ # Validation and audit scripts
├── .github/workflows/ # CI/CD pipeline
└── Makefile # Infrastructure management commands
| Pattern | AWS | GCP |
|---|---|---|
| Module Source | External Git repo with centralized version ref | Local tf-modules/ directory |
| State Backend | S3 + DynamoDB locking | GCS |
| Config Structure | {service}/{region}/{env}/terragrunt.hcl |
{env}/{region}/{resource}/terragrunt.hcl |
| Shared Locals | _env.hcl (55 files), _module_version.hcl |
Root terragrunt.hcl with include |
| Variable Source | vars.yaml with Environments.{loc}-{env}.Resources |
vars.yaml with envs.{folder}.{env}.resources |
| Provider Region | Auto-selects us-east-2 or eu-west-2 by path | Per-environment in vars.yaml |
| Default Tags | Injected via provider default_tags |
Per-module labels |
| Tool | Version | Purpose |
|---|---|---|
| Terragrunt | >= 1.0.0 | Infrastructure orchestration |
| Terraform / OpenTofu | >= 1.5.0 | Infrastructure provisioning |
| AWS CLI | >= 2.0 | AWS authentication |
| Google Cloud SDK | Latest | GCP authentication |
| pre-commit | Latest | Git hooks |
Optional: tfsec, checkov, tflint, infracost, terraform-docs
# AWS setup
aws configure
# GCP setup
gcloud auth application-default login# Full workflow
make all # init + validate + security + lint + fmt + plan
# Per-cloud operations
make aws-init # Initialize AWS configs
make aws-validate # Validate AWS configs
make aws-plan # Plan AWS changes
make aws-apply # Apply AWS changes
make gcp-init # Initialize GCP configs
make gcp-validate # Validate GCP configs
make gcp-plan # Plan GCP changes
make gcp-apply # Apply GCP changes
# Per-environment
make dev-plan # Plan dev environment
make staging-plan # Plan staging environment
make prod-plan # Plan production environment
# Quality & security
make fmt # Format HCL/TF files
make lint # Run tflint
make security # Run tfsec + checkov
make pre-commit # Run all pre-commit hooks
# Operations
make health-check # Verify cloud credentials
make clean # Remove caches and temp files
make backup-state # Backup Terraform state files
make cost # Generate cost estimates (requires infracost)
# Single service (navigate to directory)
cd aws-terragrunt-configuration/aws/eks/us/prod && terragrunt plan
cd gcp-terragrunt-configuration/terragrunt/envs/prod/us/svc-gke && terragrunt plan
# Audit GCP module versions
./scripts/check-module-versions.sh| Component | Details |
|---|---|
| Transit Gateway | Centralized hub connecting all VPCs (US + EU) |
| VPN | Site-to-Site VPN per region/environment |
| VPC Endpoints | Private access to AWS services |
| Provider Regions | us-east-2 for US, eu-west-2 for EU (auto-selected by path) |
| Environment | VPC CIDR | Region | GKE Pods | GKE Services |
|---|---|---|---|---|
| Shared Dev | 10.151.0.0/16 | europe-west1 | 10.151.0.0/17 | 10.151.144.0/20 |
| Shared Prod | 10.152.0.0/16 | us-east1 | 10.152.0.0/17 | 10.152.144.0/20 |
| Dev EU | 10.153.0.0/16 | europe-west1 | 10.153.0.0/17 | 10.153.144.0/20 |
| Staging EU | 10.154.0.0/16 | europe-west1 | 10.154.0.0/17 | 10.154.144.0/20 |
| Prod EU | 10.155.0.0/16 | europe-west1 | 10.155.0.0/17 | 10.155.144.0/20 |
| Prod US | 10.156.0.0/16 | us-east1 | 10.156.0.0/17 | 10.156.144.0/20 |
GCP uses Shared VPC (host/service project model), VPC Peering between shared and environment VPCs, Cloud NAT for outbound, and Cloud DNS for resolution.
PCI DSS | CIS Benchmarks | SOC 2 Type II | ISO 27001 | NIST Framework
| Control | AWS | GCP |
|---|---|---|
| Network Isolation | Private subnets, NACLs, SGs | Private GKE, VPC Service Controls |
| Encryption at Rest | KMS with auto-rotation | Cloud KMS, CMEK |
| Encryption in Transit | TLS 1.2+, ACM certificates | Managed SSL, TLS 1.2+ |
| Identity | IAM roles, MFA, cross-account | Workload Identity, groups-based IAM |
| Audit | CloudTrail, Config, GuardDuty | Audit logging, Security Command Center |
| Policy | SCPs, Config Rules | Organization policies, firewall rules |
| State Protection | S3 encryption + DynamoDB locking | GCS encryption + versioning |
make security # tfsec + checkov
python3 scripts/compliance-check.py --framework "PCI DSS" # Compliance audit
python3 scripts/validate-security-policies.py # Policy validationGitHub Actions workflow (.github/workflows/validate.yml) runs on every PR and push to main:
| Job | Tool | Scope |
|---|---|---|
| terraform-fmt | terraform fmt |
All .tf files |
| tflint | TFLint | GCP tf-modules |
| security-scan | Checkov | Terraform security analysis |
| yaml-lint | yamllint | All YAML files |
| markdown-lint | markdownlint | All Markdown files |
| detect-secrets | detect-secrets | Secret leak prevention |
Locally enforced via .pre-commit-config.yaml: terraform_fmt, terraform_validate, terraform_docs, tflint,
detect-secrets, checkov, yamllint, markdownlint, conventional commits, terragrunt fmt/validate, security policy checks.
All environment configuration is centralized in vars.yaml files:
- AWS:
aws-terragrunt-configuration/aws/vars.yaml— usesEnvironments.{region}-{env}.Resources.{service} - GCP:
gcp-terragrunt-configuration/terragrunt/vars.yaml— usesenvs.{folder}.{env}.resources.{service}
- AWS: Module version centralized in
_env.hcland_module_version.hcl(singlemodule_refvariable). Change version in 2 files to update all 66 module references. - GCP: Upstream module versions hardcoded per module (Terraform limitation).
Audit with
./scripts/check-module-versions.sh.
| AWS | GCP | |
|---|---|---|
| Backend | S3 | GCS |
| Locking | DynamoDB | GCS native |
| Encryption | AES-256 | Google-managed |
| Key Pattern | {service}/{region}/{env}/terraform.tfstate |
{path_relative_to_include} |
See CONTRIBUTING.md for full guidelines.
Branch naming: feature/*, fix/*, docs/*, refactor/*, compliance/*
Commit format: Conventional commits — type(scope): description
Types: feat, fix, docs, refactor, test, sec, compliance, build, chore, ci, perf, revert, style
MIT License - see LICENSE for details.
Developed by CloudOn.One
| Document | Description |
|---|---|
| SECURITY.md | Security policies and incident response |
| CONTRIBUTING.md | Contribution guidelines |
| AWS README | AWS-specific documentation |
| GCP README | GCP-specific documentation |