From Signiant Operations comes LOCK. Lock allows you to change user credentials for AWS using a Python script.
LOCK has 4 main modes that accept an IAM user as an argument or from a YAML configuration file using -c
.
list
: Show user keys with: Access Key ID, Status, Create Date, Last Used.rotate
: Rotates the AWS IAM key and update the key at set locations by running functions sequentially under plugins provided by the config file.validate
: Checks to see if the new key is being used, if it is delete the old keygetnewkey
: Rotate the AWS IAM Key
- Install Python 3.6 or higher
- Clone this repository
- Run
python3 -m venv .env
to create a virtual environment - Run
source .env/bin/activate
to activate the virtual environment - Run
python3 -m pip install -r project/config/requirements.txt
to install the dependencies - Run from LOCK's root folder
To rotate keys from the command line, use python3
to run the main script.
the config.yaml could be retrived from another signiant devops engineer.
The config.yaml file need to be modified before used.
$ python3 -m main.py -c "/path/to/config.yaml" -a rotate -u all
Pull the docker container:
docker pull signiant/lock
Run LOCK using a configuration file:
docker run \
-v /config/config.yaml:/config.yaml \
signiant/lock \
-c /config.yaml \
In this example, we use -v
to mount config.yaml
from a local folder to the root directory of the container, then pass the -c
to read and use credentials from the configuration file.
Use the -d
flag to the tool which will turn on more debug output:
docker run -ti \
-v /config/myconfigfile.yaml:/config.yaml \
signiant/lock \
-c /config.yaml \
-d
The tool runs functions sequentially in the order they appear for each different IAM user in the config file.
A typical key rotation scenario consists of deleting an old key and generating a new one (get_new_key), storing the key in the parameter store (store_key_parameter_store) then updating the key where the service uses the credential (ssh_server_command)
In the get_new_key
and store_key_parameter_store
run from the IAM module, then the ssh_server_command
is run from the SSH module.
- iam_user1:
plugins:
- iam:
- get_new_key:
- store_key_parameter_store
- ssh:
- ssh_server_command:
hostname: 'your_ssh_server'
user: 'user_name'
password: 'super_secure_password'
port: 22
commands:
- "sed -i '1s/.*/aws_access_key_id = <new_key_name>/' /credentials-folder/credentials"
- "sed -i '2s/.*/aws_secret_access_key = <new_key_secret>/' /credentials-folder/credentials"