โœ… Getting Started with AWS Control Tower and Account Factory for Terraform (AFT)

AWS Control Tower makes it easier to set up and govern a secure, multi-account AWS environment based on AWS best practices. When combined with Account Factory for Terraform (AFT), it becomes even more powerfulโ€”enabling automated, Git-driven, scalable AWS account provisioning and customization.

In this article, weโ€™ll walk through all the prerequisites you need to prepare before deploying AFT successfully.


๐Ÿš€ What is AFT?

Account Factory for Terraform (AFT) is an AWS solution that uses Terraform and DevOps principles to automate account creation, configuration, and governance in an AWS Control Tower environment. It enables you to define account templates and customizations via Git repositories.


โœ… Prerequisites for AFT Deployment

Before deploying AFT, ensure you meet all of the following requirements


1๏ธโƒฃ AWS Control Tower Landing Zone

You must have a fully deployed AWS Control Tower landing zone, which includes:

  • A Management Account (payer account in your AWS Organization).

  • One or more Organizational Units (OUs).

  • Governance guardrails (mandatory or optional) applied.

  • AWS IAM Identity Center (formerly AWS SSO) configured and enabled.


2๏ธโƒฃ AFT Management Account

You need a dedicated AWS account just for running the AFT infrastructure. This is called the AFT Management Account.

  • Must be created using Control Tower's Account Factory.

  • Assign it to an appropriate OU (e.g., Infrastructure).

  • This account will host:

    • Terraform modules

    • CodePipeline and CodeBuild

    • Lambda functions used by AFT


3๏ธโƒฃ Email Addresses

You need two unique email addresses:

  • One for the AFT Management Account (e.g., user+aft@yourdomain.com)

  • One for the test (vending) account that youโ€™ll create using AFT (e.g., user+vending1@yourdomain.com)

๐Ÿ’ก Tip: Many email providers (like Gmail) support the +alias trick to create email variations.


4๏ธโƒฃ Git Repositories (VCS)

AFT requires four separate Git repositories hosted in a supported Version Control System (VCS) like GitHub, GitLab, or Bitbucket.

Import the following repositories from the AWS samples into your personal or organization Git account:

PurposeSample RepoRename To
Account Requestsaft-sample-account-requestaft-account-request
Global Customizationsaft-sample-global-customizationsaft-global-customizations
Account Customizationsaft-sample-account-customizationsaft-account-customizations
Provisioning Customizationsaft-sample-account-provisioning-customizationsaft-account-provisioning-customizations

โœ… Set the repositories to private and ensure you have credentials (token or OAuth) for pipeline access.


5๏ธโƒฃ Developer Tools & CLI Setup

If you are using a local development environment (instead of AWS CloudShell), install:


6๏ธโƒฃ AWS CLI SSO Profile

Configure AWS CLI with your Control Tower Management Account using SSO:

aws configure sso

Follow the prompts to authenticate and store your profile locally.

๐Ÿ”‘ You must have AdministratorAccess to deploy AFT resources.


7๏ธโƒฃ Permissions & Access

Ensure the following:

  • You have Admin access on the Control Tower Management Account.

  • Your GitHub (or VCS) token or OAuth app has access to the 4 repositories.

  • IAM Identity Center (SSO) is configured to allow account access and provisioning.

  • You can assume the necessary IAM roles (used by AFT Lambda and CodePipeline).


  • Use an S3 bucket for remote state storage.

  • Enable DynamoDB table for state locking.

  • Define this backend in backend.tf.

This improves team collaboration and safeguards Terraform state.


๐Ÿ“Œ Summary Checklist

Hereโ€™s a quick overview of all prerequisites:

โœ… ComponentRequirement
Control TowerFully deployed landing zone
AFT AccountCreated using Account Factory
Emails2 unique root emails
Git Repos4 private Git repos from AWS samples
ToolsTerraform, jq, git, AWS CLI
PermissionsAdmin access to Control Tower Management
Git AuthPersonal token or OAuth app
SSOIAM Identity Center enabled
(Optional) BackendS3 & DynamoDB for Terraform state

๐ŸŽฏ Next Step

Once these prerequisites are met, youโ€™re ready to deploy the AFT Terraform module and start managing AWS accounts with DevOps efficiency.

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.