Preparing Your AWS Organization
The Cold Start involves more manual steps than other layers. Read through the following steps carefully.
The set up process for the "baseline" or "account" layer is commonly referred to as the Cold Start.
The reference architecture includes placeholder values that you'll need to replace with your actual configuration. Common placeholders include:
- Account IDs like
111111111111,123456789012, or000000000000— Replace with your actual AWS account IDs after creating accounts - Underscored values like
_example_or__REPLACE_ME__— These indicate values that require your input. Search for_ACCOUNT_NUMBER__to find items to replace like__DEV_ACCOUNT_NUMBER__ - Example domains like
example.comoracme.com— Replace with your actual domain names - Sample ARNs — Update with ARNs from your environment
You'll update these values at different points during setup. Each guide will call out when specific replacements are needed.
Before Running Terraform (ClickOps)
First, you'll need to perform some ClickOps to ensure things are set up before we use Terraform to manage AWS accounts.
From the root account:
-
Get Business Class Support
Enable business support in the
rootaccount (in order to expedite requests to raise the AWS member account limits) -
Set up MFA on Root Account
Set up the Virtual MFA device on the root account following the AWS documentation.
- Navigate to the root account's security credentials
- Set up a Virtual MFA device
- Save the MFA TOTP key in 1Password using 1Password's TOTP field and built-in screen scanner to scan the QR code
-
Create the
SuperAdminIAM UserCreate a
SuperAdminIAM User. This break-glass user is used during cold start bootstrapping before IAM Identity Center is provisioned. After cold start, it should only be used if your IdP is completely unavailable—otherwise, use Permission Sets.- Create the IAM user (do not enable "console login")
- Set up MFA for the user
- Create a single Access Key
- Store credentials in 1Password: Access Key ID, Secret Access Key, Assigned MFA device ARN, and TOTP key
-
Configure Atmos Auth for SuperAdmin
Configure the
superadminprofile to authenticate via Atmos during cold start. This allows you to run Atmos commands to deploy the foundation.- Set the
ATMOS_PROFILEenvironment variable to select the superadmin profile:export ATMOS_PROFILE=superadmin - Configure your user credentials by running the following command. You'll be prompted to enter your Access Key ID, Secret Access Key, and MFA ARN from 1Password:
atmos auth user configure - Start an authenticated session. You'll be prompted to enter a one-time MFA token:
atmos auth login - Verify you can access the root account:
atmos auth exec -- aws sts get-caller-identity
Daily UsageOnce the profile is set and user credentials are configured, you only need to run
atmos auth logineach day to start a new authenticated session.Atmos Profile PersistenceAdd
export ATMOS_PROFILE=superadminto your shell configuration (~/.zshrcor~/.bashrc) to persist the setting across terminal sessions during cold start.After cold start is complete and Identity Center is configured, you'll switch to a different profile (e.g.,
devopsormanagers) as described in Configure Atmos Auth. - Set the
-
Enable IAM Access for Billing
For billing users, you need to enable IAM access to billing information.
- As the root user, open AWS Billing Account Settings
- Scroll to "IAM user and role access to Billing information"
- Enable IAM access
-
Enable Centralized Root Access
Enable centralized root access management to eliminate the need for per-account root credentials. This allows the management account to perform privileged root operations on member accounts without maintaining separate root passwords or MFA devices.
- Navigate to IAM → Root access management
- Enable Root credentials management
- Enable Privileged root actions
For more details, see Centralized Root Access.
-
Enable Regions (Optional)
The 17 original AWS regions are enabled by default. If you are using a region that is not enabled by default (such as Middle East/Bahrain), you need to enable it in your AWS account settings.
-
Create the AWS Organization
Create the AWS Organization from the existing root account. This will convert your standalone account into an organization management account.
- Navigate to AWS Organizations
- Click Create an organization
- Select Create an organization with all features enabled (this enables AWS RAM for Organizations)
- Confirm the organization creation
Verify Organization CreationAfter creating the organization, verify it was created successfully:
aws organizations describe-organizationThe
FeatureSetshould returnALLif all features are enabled. -
Confirm Root Account Name
Verify the root account name matches your expected naming convention (typically
core-rootor similar). This is important for consistency across your infrastructure.- Navigate to AWS Organizations → AWS accounts
- Locate the management account (marked with a star)
- Verify the account name matches your expected root account name
- If needed, rename the account by clicking the account and selecting Edit
-
Enable AWS RAM Sharing with AWS Organization
Enable AWS Resource Access Manager (RAM) sharing for your organization. This is required for sharing resources like Transit Gateway, VPC subnets, and other resources across accounts.
- Navigate to AWS RAM Settings
- Enable Enable sharing with AWS Organizations
- Confirm the setting is enabled
Alternative: Use AWS CLI
aws ram enable-sharing-with-aws-organizationVerify the setting:
aws organizations describe-organization --query 'Organization.FeatureSet'This should return
ALL. -
Raise Account Limits
Request an increase of the Account Quota from AWS support. This request can take a few days to process, so it's important to submit it early to avoid blockers during account deployment.
From the
rootaccount (notSuperAdmin), increase the account quota to 20+ for the Cloud Posse reference architecture, or more depending on your business use-case.Alternative: Use AWS CLI
aws service-quotas request-service-quota-increase \
--service-code organizations \
--quota-code L-E619E033 \
--desired-value 20Where
L-E619E033is the quota code for "Default maximum number of accounts" under "AWS Organizations" in "us-east-1".Processing TimeAccount quota increases can take several days to be approved. Plan accordingly and submit this request as early as possible.
Next Steps
Now that your AWS Organization is prepared with MFA, SuperAdmin credentials, billing access configured, and the organization created with proper account limits, you're ready to initialize the Terraform state backend that will store all infrastructure state. Initialize Terraform Backend