Skip to main content

Modular AWS Account Components: A More Granular Approach to Organization Management

Ben Smith
Cloud Posse

We've replaced the monolithic account and account-settings components with six modular, single-responsibility components that give you a more granular approach to managing your AWS Organization.

What's Changing​

The old account component handled everything: the AWS Organization, organizational units, individual accounts, and service control policies — all in one. Similarly, account-settings bundled account configuration with budget management. We've broken these apart into focused components that each do one thing well.

Old ComponentOld VersionNew ComponentsNew Version
accountv1.538.0aws-accountV2
aws-organizationv0
aws-organizational-unitv0
aws-scpv0/v1
account-settingsv1.535.5aws-account-settingsV2
aws-budgetV1

Why Modular Components​

  1. Single responsibility — Each component manages one concern. Update an SCP without touching your accounts. Adjust a budget without redeploying account settings.
  2. Independent versioning — Components evolve on their own release cadence. Upgrade aws-scp to a new version without waiting for or affecting aws-account.
  3. Smaller blast radius — A change to organizational units doesn't risk impacting account creation or service control policies.
  4. Easier brownfield adoption — Need just budget management? Vendor aws-budget alone. You don't have to adopt the entire suite.
  5. Instance-based deployment — Components like aws-account and aws-organizational-unit are deployed as instances (e.g., aws-account/plat-dev, aws-organizational-unit/core), making configuration explicit and auditable.

The New Components​

ComponentPurpose
aws-organizationManages the AWS Organization itself
aws-organizational-unitManages individual OUs (deployed as instances like aws-organizational-unit/core, aws-organizational-unit/plat)
aws-accountCreates and manages individual AWS accounts (deployed as instances like aws-account/plat-dev, aws-account/core-artifacts)
aws-scpManages Service Control Policies (deployed as instances per policy, e.g., aws-scp/deny-leaving-organization)
aws-account-settingsAccount-level settings: IAM password policy, AWS Account Alias, EBS encryption, Service Quotas
aws-budgetAWS budgets for cost management and alerting

Part of Reference Architecture V2​

These new components are part of the broader Reference Architecture V2 changes, which also include the deprecation of account-map in favor of static configuration and Atmos Auth profiles. Together, these changes reduce Terraform dependencies, simplify cold starts, and better support brownfield deployments.

Adopting with Legacy Infrastructure​

Important for Existing Deployments

The new components ship with a next-gen providers.tf that contains only a simple AWS provider declaration:

provider "aws" {
region = var.region
}

This assumes Atmos Auth is in place — role assumption happens before Terraform begins, so the provider doesn't need to handle it. If you're adopting these components into an existing infrastructure that still uses account-map for provider configuration, you'll need to vendor in an overriding providers.tf.

Exclude the upstream providers.tf and use the legacy mixin instead:

components/terraform/<component-name>/component.yaml
apiVersion: atmos/v1
kind: ComponentVendorConfig
spec:
source:
uri: github.com/cloudposse-terraform-components/aws-<component>.git//src?ref={{ .Version }}
version: vX.x.x # The new version with next-gen providers
included_paths:
- "**/**"
excluded_paths:
- "providers.tf" # Exclude the next-gen providers.tf
mixins:
# Vendor in the legacy providers.tf that works with account-map
- uri: https://raw.githubusercontent.com/cloudposse-terraform-components/mixins/{{ .Version }}/src/mixins/provider-with-account-map.tf
version: v0.3.2
filename: providers.tf

This gives you the new modular component logic while keeping your existing provider configuration intact.

Questions?​

If you have questions about adopting the new account components:

  1. Join the SweetOps Slack community
  2. Open a GitHub Discussion
  3. Contact Cloud Posse support