Skip to content

Instantly share code, notes, and snippets.

@thomashartm
Last active June 7, 2021 10:08
Show Gist options
  • Save thomashartm/62d486041183a08f40c334c8644280e3 to your computer and use it in GitHub Desktop.
Save thomashartm/62d486041183a08f40c334c8644280e3 to your computer and use it in GitHub Desktop.
Switch between different AWS credentials which are isolated in separate folders e.g. to support isolated credentials files for different customers or projects.
#!/bin/bash
####################################
# Prepares dev environment settings
# call:
# set-dev-env <environment>
# or for help:
# set-dev-env
#
# How to use and expected file system structure:
# Install gsed
# brew install gsed
#
# Make sure the following folder structure is in place
# - ~/.aws/
# |_ config
# |_ credentials (this file is replaced and symlinked)
# |_ custom-vars (autogenerated for sourcing env variables)
#
# - ~/.aws-accounts/
# |_ /customer1/
# |_ credentials (contains ID and access key and maybe multiple profiles)
# |_ /customer2/
# |_ credentials (contains ID and access key and maybe multiple profiles)
#
# What do you need to do:
#
# 1. Make sure to have the accounts directory created
# mkdir ~/.aws-accounts
# 2. create a subfolder for each aws profile/credentials pair e.g.
# mkdir ~/.aws-accounts/poc
# 3. add a credentials file and put AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY in
# use the [default] profile name e.g.
#
# [default]
# AWS_ACCESS_KEY_ID=sadsadasdasd
# AWS_SECRET_ACCESS_KEY=dadasdadas
#
####################################
ACCOUNTS_DIR=$HOME/.aws-accounts
list_envs()
{
echo -e "Prepare AWS environment credentials settings."
echo -e "Usage\t\t: set-aws-env <environment>"
echo -e "Available environments:"
ls -1 "$ACCOUNTS_DIR"
exit 1
}
export_credentials()
{
CREDENTIALS_FILE=$1
AWS_ID=$(gsed -nr "/^\[default\]/ { :l /^aws_access_key_id[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" $CREDENTIALS_FILE)
AWS_SECRET=$(gsed -nr "/^\[default\]/ { :l /^aws_secret_access_key[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" $CREDENTIALS_FILE)
# cleanup work first. unset env variables and remove old bash source file first
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
rm -f $HOME/.aws/custom-vars
# add new source file and source the env variables
cat > $HOME/.aws/custom-vars <<EOF
AWS_ACCESS_KEY_ID=$AWS_ID
AWS_SECRET_ACCESS_KEY=$AWS_SECRET
EOF
source $HOME/.aws/custom-vars
echo -e "---------"
echo -e "Updated Environment Variables: "
echo -e "AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID"
echo -e "AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY"
}
LOCATION="$1"
set +x
if [ -n "$LOCATION" ]; then
LINKABLE_CREDENTIALS="$ACCOUNTS_DIR/$LOCATION/credentials"
if [ -f $LINKABLE_CREDENTIALS ]; then
CREDENTIALS_FILE="$HOME/.aws/credentials"
echo -e "---------"
echo -e "Linked: $CREDENTIALS_FILE"
echo -e "to: $LINKABLE_CREDENTIALS"
if [ -f $CREDENTIALS_FILE ]; then
rm $CREDENTIALS_FILE
fi
# link the profile credentials
ln -sf $LINKABLE_CREDENTIALS $CREDENTIALS_FILE
# now export the variables
export_credentials $LINKABLE_CREDENTIALS
else
echo -e "$LINKABLE_CREDENTIALS can not be found."
fi
else
list_envs
exit 1
fi
set -x
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment