@davidpellerin/accountfactory v0.0.22
š accountfactory
A command-line tool for managing AWS Organizations, creating accounts, and setting up IAM users across multiple accounts.
Features
- Create and manage AWS Organizations accounts (eg: shared, staging, and production environments)
- Set up IAM users across multiple accounts
- Configure AWS CLI profiles automatically
- Store credentials securely in AWS Secrets Manager
Installation
npm install -g @davidpellerin/accountfactoryPrerequisites
- Node.js 18 or higher
- AWS CLI installed and configured with appropriate credentials
- AWS Organizations access in your root/management account
Usage
accountfactory - AWS Infrastructure deployment tool
Options:
-V, --version output the version number
-h, --help display help for command
Commands:
list-accounts š List accounts in your AWS Organization
generate-skeleton š Generate a skeleton accountfactory.json file
create-accounts [options] š Deploy accounts in your AWS Organization
setup-aws-profiles [options] š§ Configure AWS profiles using creds from Secrets Manager
help [command] display help for commandList AWS Organization Accounts
$ AWS_PROFILE=organizations accountfactory list-accounts
āāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāā
ā (index) ā Email ā Id ā Status ā
āāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāā¤
ā 0 ā 'sharedservices@example.com' ā '012345678901' ā 'ACTIVE' ā
ā 1 ā 'staging@example.com' ā '012345678902' ā 'ACTIVE' ā
ā 2 ā 'production@example.com' ā '012345678903' ā 'ACTIVE' ā
ā 3 ā 'oldaccount@example.com' ā '012345678904' ā 'SUSPENDED' ā
āāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāā^ In this example I ran this command with AWS_PROFILE=organizations (which is a profile I specifically setup with permissions to manage my organization. (see: IAM permissions)
Generate Skeleton
$ accountfactory generate-skeletonCreates an accountfactory.json file in your current directory. It is a json file that you can modify with the list of accounts you want accountfactory to create. It will look like this:
{
"accounts": [
{
"accountName": "Shared Services",
"profileName": "myappname-shared",
"email": "sharedservices@example.com"
},
{
"accountName": "Staging",
"profileName": "myappname-staging",
"email": "staging@example.com"
},
{
"accountName": "Production",
"profileName": "myappname-production",
"email": "production@example.com"
}
]
}Create New Accounts
$ accountfactory create-accounts --username <iam-username>Iterates through the accounts in accountfactory.json and creates those accounts in your AWS Organization.
Setup AWS Profiles
$ accountfactory setup-aws-profiles --username <iam-username> --prefix <profile-prefix>This command creates profiles in (~/.aws/credentials) for each account. This command uses the aws cli tool under the hood.
Security
This tool requires high-privilege AWS credentials and should be used with caution. It's recommended to:
- Use MFA-protected credentials
- Review all actions before confirming
- Follow the principle of least privilege
- Regularly rotate credentials
IAM Permissions
Although you could theoretically just give your account AdministratorAccess that's really not a good practice.
One good way of limiting the blast radius is to use a dediacted organizations "management account" that you will use to create and manage the child accounts.
Here are the permissions that I use:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"organizations:CreateAccount",
"organizations:DescribeCreateAccountStatus",
"organizations:DescribeAccount",
"organizations:ListAccounts",
"organizations:ListAWSServiceAccessForOrganization",
"organizations:EnableAWSServiceAccess",
"organizations:DescribeOrganization",
"organizations:ListChildren",
"organizations:ListRoots"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"iam:CreateRole",
"iam:AttachRolePolicy",
"iam:PutRolePolicy",
"iam:CreatePolicy",
"iam:ListRoles",
"iam:GetRole"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": ["sts:AssumeRole"],
"Resource": "arn:aws:iam::*:role/OrganizationAccountAccessRole"
}
]
}Environment Variables
| Variable | Value | Purpose |
|---|---|---|
| ACCOUNTFACTORY_ENABLE_LOGGING | true | Enables logging to disk (~/.local/state/accountfactory) |
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT License - see LICENSE file for details
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago