A simple tool to manage multiple AWS accounts with SSO support and easy account access.
Kee
creates isolated sub-shells for each AWS account, ensuring no credentials are stored locally while providing seamless account management.
π¦ β In case you are looking for extra speed, check out the Rust implementation.
This is now the primary version β it's faster, has more features, and will receive all future updates.
- π SSO integration: Full support for AWS SSO authentication
- π Easy account access: Use any configured account with a single command
- π Sub-shell isolation: Each account runs in its own sub-shell with proper credential isolation
- π Custom aliases: Use friendly names for your AWS accounts
- π Account management: Easily list, add, and remove accounts
- π« No stored credentials: No AWS credentials are stored anywhere - uses AWS SSO tokens
- π¨ Shell integration: Shows current account in your shell prompt
- β‘ Auto-refresh: Automatically handles SSO token refresh when needed
- No credential storage:
Kee
never stores AWS access keys or secrets - SSO token management: Uses AWS CLI's built-in SSO token caching
- Sub-shell isolation: Each profile's session is isolated in its own shell
- Automatic cleanup: Environment variables are cleared when exiting sub-shells
- Python 3.7 or higher
- AWS CLI v2 installed and configured
- Access to AWS SSO
git clone https://github.com/keecli/kee.py.git ~/.kee
cd ~/.kee
chmod u+x kee.py
# Create a symlink in your PATH (adjust path as needed)
sudo ln -s $(pwd)/kee.py /usr/local/bin/kee
cd ~/.kee
pip3 install -e .
kee add mycompany.dev
This will:
- Run
aws configure sso --profile company.dev
- Prompt you for your SSO configuration (start URL, region, etc.)
- Open your browser for SSO authentication
- Let you select your AWS account and role interactively
- Automatically save the configuration to
Kee
Tip: A session can be liked to multiple profiles. When prompted for a 'session name', use something generic, like your company name.
kee use mycompany.dev
This will:
- Check if SSO credentials are valid
- Automatically run
aws sso login
if needed - Start a sub-shell with AWS credentials configured
- Update your shell prompt to show the active account
Inside the sub-shell, all AWS CLI commands will use the selected account:
aws:mycompany.dev $ aws s3 ls
aws:mycompany.dev $ aws ec2 describe-instances
aws:mycompany.dev $ exit # Terminate the session and return to your main shell
kee add <account_name>
Interactively configure a new AWS account with SSO settings.
kee use <account_name>
Use an account and start a sub-shell with AWS credentials.
kee list
Show all configured accounts and their details.
kee current
Display which account is currently active (if any).
kee remove <account_name>
Removes an account configuration from Kee
and the AWS config file.
Kee
stores its configuration in~/.aws/kee.json
- AWS profiles are created in
~/.aws/config
with the naming pattern using<account_name>
- No AWS credentials are stored - only SSO configuration
When you use an account, Kee
:
- Validates SSO credentials (refreshes if needed)
- Updates shell prompt to show current account
- Starts a new shell session
- Cleans up when you exit
Kee
prevents you from starting a sub-shell while already in one:
aws:mycompany.dev $ kee use mycompany.prod
You are using a Kee profile: mycompany.dev
Exit the current session first by typing 'exit'
Your shell prompt will show the active account:
(mycompany.dev) user@hostname:
When you're using a Kee
profile, the following environment variables are set:
AWS_PROFILE
- The AWS profile name (e.g.,mycompany.dev
)KEE_CURRENT_ACCOUNT
- TheKee
account name (e.g.,mycompany.dev
)KEE_ACTIVE_PROFILE
- Set to1
to indicate an activeKee
profilePS1
- Updated to show the current account in your prompt (Unix-like systems only)
These variables help Kee
manage sessions and prevent nested sub-shells.
{
"accounts": {
"mycompany-prod": {
"profile_name": "mycompany.dev",
"sso_start_url": "https://mycompany.awsapps.com/start",
"sso_region": "ap-southeast-2",
"sso_account_id": "123456789012",
"sso_role_name": "AdministratorAccess",
"session_name": "mycompany"
}
},
"current_account": null
}
[profile mycompany.dev]
sso_role_name = AdministratorAccess
sso_session = mycompany
sso_account_id = 123456789098
output = json
[sso-session mycompany]
sso_region = ap-southeast-2
sso_start_url = https://mycompany.awsapps.com/start
sso_registration_scopes = sso:account:access
Kee
works on:
- macOS: Full support with shell prompt integration
- Linux: Full support with shell prompt integration
- Windows: Full support (prompt integration not available)
If SSO login fails:
# Manual SSO login
aws sso login --profile <account_name>
# Then try using again
kee use <account_name>
If you get "profile not found" errors:
# Check AWS config
cat ~/.aws/config
# Re-add the account if needed
kee remove <account_name>
kee add <account_name>
If you get permission errors:
# Check AWS credentials
aws sts get-caller-identity --profile <account_name>
# Refresh SSO login
aws sso login --profile <account_name>
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests, if applicable
- Test your changes:
make test
- Submit a pull request
MIT License - see LICENSE file for details.
RTFM, then RTFC... If you are still stuck or just need an additional feature, file an issue.