๐Ÿ—๏ธ 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.

0
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.