π Overview
This document outlines the AWS account structure, governance, and control strategy used across our organization.
It describes how AWS Control Tower, AFT, and SCPs interact to provide a compliant, secure, and automated multi-account landing zone β aligning with AWS Well-Architected and CIS Benchmarks.
π Organizational Structure
| OU | Description | Primary Accounts |
|---|---|---|
| Security OU | Core compliance and security monitoring |
Log Archive, Audit
|
| Internal OU | Shared platform services and IAM root |
Shared Services, IAM/Root
|
| NPR Networking OU | Non-Production networking environment |
Internal Comms, External Comms
|
| PRD Networking OU | Production networking environment |
Internal Comms, External Comms
|
| Deprecated OU | Legacy accounts (no new workloads) | Various (read-only) |
π§ Regional Strategy
| Component | Region | Rationale |
|---|---|---|
| IAM Identity Center (SSO) | us-east-1 |
Global endpoint for AWS SSO and Organizations |
| Control Tower Management Account |
us-east-1 backend |
Required by AWS |
| All Member Accounts |
eu-west-2 (London) |
Primary data residency & workload region |
| Backup / DR |
eu-west-1 (Ireland) |
Optional failover region |
π Conceptual Flow Diagram
ββββββββββββββββββββββββββββββββββββββββββββββββ
β Management Account β
β (AWS Organizations + Control Tower + AFT) β
ββββββββββββββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββββββββββββββββββ
β Control Tower Landing Zone β
β β’ Security OU (LogArchive + Audit) β
β β’ Creates baseline guardrails (AWS-managed) β
β β’ Delegates to AFT for account provisioning β
ββββββββββββββββββββββββββββββββββββββββββββββββ
β Management Acct (us-east-1)
ββββββββββββββββββββββ΄βββββββββββββββββββββ
β β
ββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββ
β Account Factory for TF (AFT) β β AWS Organizations (Org Root) β
β β’ GitOps: account requests β β β’ OU hierarchy (SEC, INT, β
β β’ Customizations pipelines β β NPR, PRD, DEPRECATED) β
β β’ Baselines, tagging, roles β β β’ SCPs attached per OU β
ββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββ
β β
β β
β ββββββββββββββββββββββββββββββββββββββββββ
β β SCP layer (Preventive Guardrails) β
β β β’ Enforced at Org root / OU level β
β β β’ Deny/allow APIs before IAM evaluated β
β β β’ Prevents config drift or unsafe ops β
β ββββββββββββββββββββββββββββββββββββββββββ
β
ββββββββββ΄ββββββββββ
β Enrolled Account β
β (e.g. Internal, β
β NPR, PRD, etc.) β
ββββββββββββββββββββ
π§© Control Tower & AFT Integration
Landing Zone
- Deployed via AWS Control Tower in the management account.
- Establishes:
- AWS Organizations
- Log Archive and Audit accounts
- Baseline guardrails (AWS-managed)
Account Factory for Terraform (AFT)
- Provides GitOps-based account lifecycle management.
- Each account is provisioned using Terraform pipelines that:
- Enroll the account in Control Tower
- Apply OU-specific baselines (e.g., Config, logging)
- Tag accounts automatically
- AFT runs in its own AFT Management Account.
Account Hierarchy Diagram
Management Account
βββ AWS Control Tower (Landing Zone)
βββ AFT Pipelines (Account Factory for Terraform)
βββ AWS Organizations (Root OU)
βββ Security OU
βββ Internal OU
βββ NPR Networking OU
βββ PRD Networking OU
βββ Deprecated OU
π§° Networking & Shared Services Strategy
| Service | Owning Account | Scope | Sharing Mechanism |
|---|---|---|---|
| Transit Gateway (TGW) | Internal Comms (per env) | Environment-specific | AWS RAM (within the env) |
| Internet Gateway (IGW) | External Comms (per env) | Environment-specific | Single point of entry – not shared |
| NAT Gateway (NGW) | Shared Services | Cross-environment | Single point of exit – not shared |
| Network Firewall (NFW) | Shared Services | Cross-environment | AWS RAM + TGW routing |
| VPC Endpoint Services | Shared Services | Org-wide | Route53 Reslover |
π Governance & Security Controls
Governance is enforced using three layers:
| Layer | Type | Enforcement Mechanism |
|---|---|---|
| Preventive | Service Control Policies (SCPs) | AWS Organizations |
| Detective | Config / Security Hub / GuardDuty | Audit account |
| Proactive | CloudFormation Hooks / AFT Customizations | Terraform baselines |
π« Core SCP Pack (Preventive Guardrails)
1οΈβ£ Deny Root User Access
Prevents use of root credentials in any account.
{
"Sid": "DenyRootUser",
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"StringLike": {
"aws:PrincipalArn": "arn:aws:iam::*:root"
}
}
}
2οΈβ£ Restrict Regions (EU + us-east-1)
{
"Sid": "DenyOutsideApprovedRegionsExceptIdentity",
"Effect": "Deny",
"NotAction": [
"iam:*","organizations:*","route53:*","sso:*","support:*"
],
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": ["eu-west-1", "eu-west-2", "us-east-1"]
}
}
}
3οΈβ£ Deny Unapproved Network Creation
{
"Sid": "DenyUnapprovedNetworking",
"Effect": "Deny",
"Action": [
"ec2:CreateInternetGateway","ec2:AttachInternetGateway",
"ec2:CreateNatGateway","ec2:CreateVpcPeeringConnection",
"ec2:CreateTransitGateway","ec2:DeleteTransitGateway"
],
"Resource": "*"
}
4οΈβ£ Restrict Service Creation
| Resource | Allowed Account(s) | SCP Condition |
|---|---|---|
| TGW (Transit Gateway) | Internal Comms (PRD/NPR) |
aws:PrincipalAccount = INC IDs |
| IGW (Internet Gateway) | External Comms (PRD/NPR) |
aws:PrincipalAccount = EXC IDs |
| NFW (Network Firewall) | Shared Services |
aws:PrincipalAccount = SSV ID |
| NGW (NAT Gateway) | Shared Services |
aws:PrincipalAccount = SSV ID |
| VPC Endpoint Services | Shared Services |
aws:PrincipalAccount = SSV ID |
5οΈβ£ Tag Enforcement
{
"Sid": "RequireStandardTags",
"Effect": "Deny",
"Action": ["ec2:RunInstances","rds:CreateDBInstance","s3:CreateBucket"],
"Resource": "*",
"Condition": {
"Null": {
"aws:RequestTag/Environment": "true",
"aws:RequestTag/Owner": "true"
}
}
}
6οΈβ£ Deny Org Tampering
Protects core logging and control-plane resources
{
"Sid": "DenyOrgTampering",
"Effect": "Deny",
"Action": [
"organizations:LeaveOrganization",
"cloudtrail:StopLogging",
"config:StopConfigurationRecorder"
],
"Resource": "*"
}
7οΈβ£ Deprecated OU Policy
{
"Sid": "DenyNewCreates",
"Effect": "Deny",
"Action": ["*"],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Environment": "deprecated"
}
}
}
π§ Control Layers Explained
| Layer | Description | Managed By |
|---|---|---|
| Control Tower | Creates baseline governance (OU, guardrails, log archive, audit) | AWS |
| AFT | Automates account provisioning, tagging, baseline controls | Platform team |
| SCPs | Prevent actions that violate org standards (region, network, security) | Org root |
| Delegated Security Accounts | Detect & monitor compliance (Config, GuardDuty) | Security team |
πͺ Deployment Workflow
| Step | Action | Tool |
|---|---|---|
| 1 | Enable Control Tower (Landing Zone) | Console / CLI |
| 2 | Bootstrap AFT management | Terraform |
| 3 | Create OUs + SCPs | Terraform |
| 4 | Submit account requests via AFT | GitOps |
| 5 | Apply OU-specific baselines | Terraform |
| 6 | Validate security controls | AWS Config / Security Hub |
| 7 | Continuous compliance | Detective + Proactive guardrails |
π§© Future Enhancements
- Add Policy Staging OU for testing new SCPs.
- Integrate Proactive Controls (CloudFormation hooks).
- Automate SCP compliance drift detection using AWS Config custom rules.
- Add organizational backup plans (AWS Backup delegated admin).
