|
| 1 | +--- |
| 2 | +title: "Modular AWS Account Components: A More Granular Approach to Organization Management" |
| 3 | +slug: new-account-components |
| 4 | +authors: [Benbentwo] |
| 5 | +tags: [reference-architecture, aws, components, accounts] |
| 6 | +date: 2026-03-04 |
| 7 | +--- |
| 8 | +import Intro from '@site/src/components/Intro'; |
| 9 | +import Steps from '@site/src/components/Steps'; |
| 10 | + |
| 11 | +<Intro> |
| 12 | +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. |
| 13 | +</Intro> |
| 14 | + |
| 15 | +<!--truncate--> |
| 16 | + |
| 17 | +## What's Changing |
| 18 | + |
| 19 | +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. |
| 20 | + |
| 21 | +| Old Component | Old Version | New Components | New Version | |
| 22 | +|---------------|-------------|----------------|-------------| |
| 23 | +| `account` | v1.538.0 | `aws-account` | V2 | |
| 24 | +| | | `aws-organization` | v0 | |
| 25 | +| | | `aws-organizational-unit` | v0 | |
| 26 | +| | | `aws-scp` | v0/v1 | |
| 27 | +| `account-settings` | v1.535.5 | `aws-account-settings` | V2 | |
| 28 | +| | | `aws-budget` | V1 | |
| 29 | + |
| 30 | +## Why Modular Components |
| 31 | + |
| 32 | +<Steps> |
| 33 | + 1. **Single responsibility** — Each component manages one concern. Update an SCP without touching your accounts. Adjust a budget without redeploying account settings. |
| 34 | + 1. **Independent versioning** — Components evolve on their own release cadence. Upgrade `aws-scp` to a new version without waiting for or affecting `aws-account`. |
| 35 | + 1. **Smaller blast radius** — A change to organizational units doesn't risk impacting account creation or service control policies. |
| 36 | + 1. **Easier brownfield adoption** — Need just budget management? Vendor `aws-budget` alone. You don't have to adopt the entire suite. |
| 37 | + 1. **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. |
| 38 | +</Steps> |
| 39 | + |
| 40 | +## The New Components |
| 41 | + |
| 42 | +| Component | Purpose | |
| 43 | +|-----------|---------| |
| 44 | +| [`aws-organization`](https://github.com/cloudposse-terraform-components/aws-organization) | Manages the AWS Organization itself | |
| 45 | +| [`aws-organizational-unit`](https://github.com/cloudposse-terraform-components/aws-organizational-unit) | Manages individual OUs (deployed as instances like `aws-organizational-unit/core`, `aws-organizational-unit/plat`) | |
| 46 | +| [`aws-account`](https://github.com/cloudposse-terraform-components/aws-account) | Creates and manages individual AWS accounts (deployed as instances like `aws-account/plat-dev`, `aws-account/core-artifacts`) | |
| 47 | +| [`aws-scp`](https://github.com/cloudposse-terraform-components/aws-scp) | Manages Service Control Policies (deployed as instances per policy, e.g., `aws-scp/deny-leaving-organization`) | |
| 48 | +| [`aws-account-settings`](https://github.com/cloudposse-terraform-components/aws-account-settings) | Account-level settings: IAM password policy, AWS Account Alias, EBS encryption, Service Quotas | |
| 49 | +| [`aws-budget`](https://github.com/cloudposse-terraform-components/aws-budget) | AWS budgets for cost management and alerting | |
| 50 | + |
| 51 | +## Part of Reference Architecture V2 |
| 52 | + |
| 53 | +These new components are part of the broader Reference Architecture V2 changes, which also include the [deprecation of `account-map`](/blog/deprecate-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. |
| 54 | + |
| 55 | +## Adopting with Legacy Infrastructure |
| 56 | + |
| 57 | +:::warning Important for Existing Deployments |
| 58 | +The new components ship with a **next-gen `providers.tf`** that contains only a simple AWS provider declaration: |
| 59 | + |
| 60 | +```hcl |
| 61 | +provider "aws" { |
| 62 | + region = var.region |
| 63 | +} |
| 64 | +``` |
| 65 | + |
| 66 | +This assumes [Atmos Auth](https://atmos.tools/core-concepts/components/authentication/) 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`. |
| 67 | +::: |
| 68 | + |
| 69 | +Exclude the upstream `providers.tf` and use the legacy mixin instead: |
| 70 | + |
| 71 | +```yaml title="components/terraform/<component-name>/component.yaml" |
| 72 | +apiVersion: atmos/v1 |
| 73 | +kind: ComponentVendorConfig |
| 74 | +spec: |
| 75 | + source: |
| 76 | + uri: github.com/cloudposse-terraform-components/aws-<component>.git//src?ref={{ .Version }} |
| 77 | + version: vX.x.x # The new version with next-gen providers |
| 78 | + included_paths: |
| 79 | + - "**/**" |
| 80 | + excluded_paths: |
| 81 | + - "providers.tf" # Exclude the next-gen providers.tf |
| 82 | + mixins: |
| 83 | + # Vendor in the legacy providers.tf that works with account-map |
| 84 | + - uri: https://raw.githubusercontent.com/cloudposse-terraform-components/mixins/{{ .Version }}/src/mixins/provider-with-account-map.tf |
| 85 | + version: v0.3.2 |
| 86 | + filename: providers.tf |
| 87 | +``` |
| 88 | + |
| 89 | +This gives you the new modular component logic while keeping your existing provider configuration intact. |
| 90 | + |
| 91 | +## Questions? |
| 92 | + |
| 93 | +If you have questions about adopting the new account components: |
| 94 | + |
| 95 | +<Steps> |
| 96 | + 1. Join the [SweetOps Slack](https://cloudposse.com/slack) community |
| 97 | + 1. Open a [GitHub Discussion](https://github.com/orgs/cloudposse/discussions) |
| 98 | + 1. Contact Cloud Posse [support](/support/) |
| 99 | +</Steps> |
0 commit comments