๐๏ธ Understanding AWS Control Tower Account Factory for Terraform (AFT) โ The Easy Way

๐น What is AWS Control Tower?
AWS Control Tower helps organizations set up and govern a secure multi-account AWS environment using best practices. It provides:
A Landing Zone with preconfigured organizational units (OUs)
An Account Factory to create new AWS accounts
Guardrails for compliance and governance
Butโฆ the default Account Factory is not Infrastructure-as-Code friendly.
๐น Introducing AFT (Account Factory for Terraform)
AFT is an AWS solution that enables you to provision AWS accounts in Control Tower using Terraform and GitOps workflows.
โ Benefits:
Infrastructure as Code (IaC)
Automated account creation
Custom Terraform-based configurations
GitOps-style management
๐ How AFT Works โ High-Level Workflow
Step 1: User submits account request (in Git)
Step 2: AFT reads request and creates account
Step 3: Post-creation: Shared configurations are applied
Step 4: Account-specific customizations are deployed
Step 5: Global customizations run across all accounts
๐ฏ End result: A fully governed AWS account with your orgโs policies and configurations applied automatically.
๐งฑ AFT Architecture Breakdown
AFT is built from multiple Terraform modules. Hereโs what each one does โ explained in plain English:
1. aft-infrastructure
๐งฐ Sets up the core AFT infrastructure
๐ฆ Creates:
S3 buckets
DynamoDB tables
CodePipelines
IAM roles
Lambda functions
2. aft-account-request-framework
๐ฌ Reads account requests from Git or DynamoDB
โ
Validates request format
๐ Triggers account creation via Control Tower
Example account request:
account_email = "dev@yourcompany.com"
account_name = "dev-yourteam"
organizational_unit = "Development"
3. aft-account-provisioning-customizations
๐ ๏ธ Applies shared Terraform modules to every new account right after creation.
Use this for:
Setting up baseline networking
Creating shared roles
Enabling security services
4. aft-account-customizations
๐ฏ Applies account-specific Terraform modules based on Git folder.
Example:
/account-customizations/dev-yourteam/main.tf
Deploy custom:
VPCs
ECS clusters
IAM policies
SSM documents
5. aft-global-customizations
๐ Applies Terraform changes across all accounts.
Perfect for:
AWS Config
GuardDuty
SecurityHub
CloudTrail centralization
6. aft-code-repositories
๐ Creates the Git repos AFT depends on:
account-request
account-customizations
global-customizations
7. aft-feature-options
๐งช Advanced settings and feature toggles, like:
Async provisioning
CloudTrail event tracking
Custom pipelines
8. aft-lambda-layer
๐งฌ Builds a shared Lambda Layer for reusing Python libraries across AFT Lambdas.
๐ Example GitOps Setup
โ
Account Request Repo (account-request
)
account_email = "analytics@example.com"
account_name = "analytics"
organizational_unit = "BusinessUnit1"
๐ง Customizations Repo (account-customizations
)
โโโ dev-yourteam/
โ โโโ main.tf <- VPC, EC2, S3 setup
โโโ prod-yourteam/
โ โโโ main.tf <- Hardened config
๐ Global Customizations (global-customizations
)
main.tf <- AWS Config, GuardDuty, CloudTrail
๐ Key Takeaways
AFT extends Control Tower with Terraform + GitOps.
Account creation and configuration are fully automated.
You get repeatable, compliant, and scalable AWS accounts.
Each AFT module plays a specific role โ plug-and-play style.
Subscribe to my newsletter
Read articles from Chinnayya Chintha directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Chinnayya Chintha
Chinnayya Chintha
I am ๐๐ต๐ถ๐ป๐ป๐ฎ๐๐๐ฎ ๐๐ต๐ถ๐ป๐๐ต๐ฎ, ๐ฎ ๐ฟ๐ฒ๐๐๐น๐๐-๐ฑ๐ฟ๐ถ๐๐ฒ๐ป ๐ฆ๐ถ๐๐ฒ ๐ฅ๐ฒ๐น๐ถ๐ฎ๐ฏ๐ถ๐น๐ถ๐๐ ๐๐ป๐ด๐ถ๐ป๐ฒ๐ฒ๐ฟ (๐ฆ๐ฅ๐) with proven expertise in ๐ฎ๐๐๐ผ๐บ๐ฎ๐๐ถ๐ป๐ด, ๐ฎ๐ป๐ฑ ๐บ๐ฎ๐ป๐ฎ๐ด๐ถ๐ป๐ด ๐๐ฒ๐ฐ๐๐ฟ๐ฒ, ๐๐ฐ๐ฎ๐น๐ฎ๐ฏ๐น๐ฒ, ๐ฎ๐ป๐ฑ ๐ฟ๐ฒ๐น๐ถ๐ฎ๐ฏ๐น๐ฒ ๐ถ๐ป๐ณ๐ฟ๐ฎ๐๐๐ฟ๐๐ฐ๐๐๐ฟ๐ฒ ๐๐ผ๐น๐๐๐ถ๐ผ๐ป๐. My experience spans ๐ฐ๐น๐ผ๐๐ฑ-๐ป๐ฎ๐๐ถ๐๐ฒ ๐๐ฒ๐ฐ๐ต๐ป๐ผ๐น๐ผ๐ด๐ถ๐ฒ๐, ๐๐/๐๐ ๐ฎ๐๐๐ผ๐บ๐ฎ๐๐ถ๐ผ๐ป, ๐ฎ๐ป๐ฑ ๐๐ป๐ณ๐ฟ๐ฎ๐๐๐ฟ๐๐ฐ๐๐๐ฟ๐ฒ ๐ฎ๐ ๐๐ผ๐ฑ๐ฒ (๐๐ฎ๐), enabling me to deliver ๐ต๐ถ๐ด๐ต-๐ฝ๐ฒ๐ฟ๐ณ๐ผ๐ฟ๐บ๐ถ๐ป๐ด ๐๐๐๐๐ฒ๐บ๐ that enhance operational efficiency and drive innovation. As a ๐๐ฟ๐ฒ๐ฒ๐น๐ฎ๐ป๐ฐ๐ฒ ๐ฆ๐ถ๐๐ฒ ๐ฅ๐ฒ๐น๐ถ๐ฎ๐ฏ๐ถ๐น๐ถ๐๐ ๐๐ป๐ด๐ถ๐ป๐ฒ๐ฒ๐ฟ, I specialize in: โ ๐๐บ๐ฝ๐น๐ฒ๐บ๐ฒ๐ป๐๐ถ๐ป๐ด ๐๐ฒ๐ฐ๐๐ฟ๐ฒ ๐ฎ๐ป๐ฑ ๐๐ฐ๐ฎ๐น๐ฎ๐ฏ๐น๐ฒ ๐ฝ๐ฎ๐๐บ๐ฒ๐ป๐ ๐ด๐ฎ๐๐ฒ๐๐ฎ๐ ๐๐ผ๐น๐๐๐ถ๐ผ๐ป๐ ๐๐๐ถ๐ป๐ด ๐๐ช๐ฆ ๐๐ฒ๐ฟ๐๐ถ๐ฐ๐ฒ๐ ๐น๐ถ๐ธ๐ฒ ๐๐ฃ๐ ๐๐ฎ๐๐ฒ๐๐ฎ๐, ๐๐ฎ๐บ๐ฏ๐ฑ๐ฎ, ๐ฎ๐ป๐ฑ ๐๐๐ป๐ฎ๐บ๐ผ๐๐.. โ ๐๐๐๐ผ๐บ๐ฎ๐๐ถ๐ป๐ด ๐ถ๐ป๐ณ๐ฟ๐ฎ๐๐๐ฟ๐๐ฐ๐๐๐ฟ๐ฒ ๐ฝ๐ฟ๐ผ๐๐ถ๐๐ถ๐ผ๐ป๐ถ๐ป๐ด with ๐ง๐ฒ๐ฟ๐ฟ๐ฎ๐ณ๐ผ๐ฟ๐บ. โ ๐ข๐ฝ๐๐ถ๐บ๐ถ๐๐ถ๐ป๐ด ๐บ๐ผ๐ป๐ถ๐๐ผ๐ฟ๐ถ๐ป๐ด using ๐๐น๐ผ๐๐ฑ๐ช๐ฎ๐๐ฐ๐ต. โ Ensuring compliance with ๐ฃ๐๐-๐๐ฆ๐ฆ ๐๐๐ฎ๐ป๐ฑ๐ฎ๐ฟ๐ฑ๐ through ๐ฒ๐ป๐ฐ๐ฟ๐๐ฝ๐๐ถ๐ผ๐ป ๐บ๐ฒ๐ฐ๐ต๐ฎ๐ป๐ถ๐๐บ๐ โ implemented with ๐๐ช๐ฆ ๐๐ ๐ฆ and ๐ฆ๐ฒ๐ฐ๐ฟ๐ฒ๐๐ ๐ ๐ฎ๐ป๐ฎ๐ด๐ฒ๐ฟ. These efforts have resulted in ๐ฒ๐ป๐ต๐ฎ๐ป๐ฐ๐ฒ๐ฑ ๐๐ฟ๐ฎ๐ป๐๐ฎ๐ฐ๐๐ถ๐ผ๐ป ๐ฟ๐ฒ๐น๐ถ๐ฎ๐ฏ๐ถ๐น๐ถ๐๐ and ๐๐๐ฟ๐ฒ๐ฎ๐บ๐น๐ถ๐ป๐ฒ๐ฑ ๐ผ๐ฝ๐ฒ๐ฟ๐ฎ๐๐ถ๐ผ๐ป๐ฎ๐น ๐๐ผ๐ฟ๐ธ๐ณ๐น๐ผ๐๐ for payment processing systems. I am passionate about ๐บ๐ฒ๐ป๐๐ผ๐ฟ๐ถ๐ป๐ด ๐ฎ๐ป๐ฑ ๐ธ๐ป๐ผ๐๐น๐ฒ๐ฑ๐ด๐ฒ ๐๐ต๐ฎ๐ฟ๐ถ๐ป๐ด, having delivered ๐ต๐ฎ๐ป๐ฑ๐-๐ผ๐ป ๐๐ฟ๐ฎ๐ถ๐ป๐ถ๐ป๐ด in ๐ฐ๐น๐ผ๐๐ฑ ๐๐ฒ๐ฐ๐ต๐ป๐ผ๐น๐ผ๐ด๐ถ๐ฒ๐, ๐๐๐ฏ๐ฒ๐ฟ๐ป๐ฒ๐๐ฒ๐, ๐ฎ๐ป๐ฑ ๐ฎ๐๐๐ผ๐บ๐ฎ๐๐ถ๐ผ๐ป. My proactive approach helps me anticipate system challenges and create ๐ฟ๐ผ๐ฏ๐๐๐, ๐๐ฐ๐ฎ๐น๐ฎ๐ฏ๐น๐ฒ ๐๐ผ๐น๐๐๐ถ๐ผ๐ป๐ ๐๐ต๐ฎ๐ ๐ฒ๐ป๐ต๐ฎ๐ป๐ฐ๐ฒ ๐๐ฒ๐ฐ๐๐ฟ๐ถ๐๐, ๐ฐ๐ผ๐บ๐ฝ๐น๐ถ๐ฎ๐ป๐ฐ๐ฒ, ๐ฎ๐ป๐ฑ ๐ผ๐ฝ๐ฒ๐ฟ๐ฎ๐๐ถ๐ผ๐ป๐ฎ๐น ๐ฒ๐ณ๐ณ๐ถ๐ฐ๐ถ๐ฒ๐ป๐ฐ๐. Dedicated to ๐ฐ๐ผ๐ป๐๐ถ๐ป๐๐ผ๐๐ ๐น๐ฒ๐ฎ๐ฟ๐ป๐ถ๐ป๐ด, I stay updated with ๐ฒ๐บ๐ฒ๐ฟ๐ด๐ถ๐ป๐ด ๐๐ฒ๐ฐ๐ต๐ป๐ผ๐น๐ผ๐ด๐ถ๐ฒ๐ and thrive on contributing to ๐๐ฟ๐ฎ๐ป๐๐ณ๐ผ๐ฟ๐บ๐ฎ๐๐ถ๐๐ฒ ๐ฝ๐ฟ๐ผ๐ท๐ฒ๐ฐ๐๐ that push boundaries in technology.