Migrating AWS System Manager Parameter Store Secrets to a new Namespace
When starting with a new tool it is common to jump in start doing things. Over time you learn how to do things better. Amazon’s AWS System Manager (SSM) Parameter Store was like that for me. I started off polluting the global namespace with all my secrets. Over time I learned to use paths to create namespaces. This helps a lot when it comes to managing access.
Recently I’ve been using Parameter Store a lot. During this time I have been reminded that naming things is hard. This lead to me needing to change some paths in SSM Parameter Store. Unfortunately AWS doesn’t allow you to rename param store keys, you have to create new ones.
There was no way I was going to manually copy and paste all those secrets. Python (3.6) to the rescue! I wrote a script to copy the values to the new namespace. While I was at it I migrated them to use a new KMS key for encryption.
Grab the code from my
gist,
make it executable, pip install boto3
if you need to, then run it like
so:
copy-ssm-ps-path.py source-tree-name target-tree-name new-kms-uuid
The script assumes all parameters are encrypted. The same key is used
for all parameters. boto3
expects your AWS credentials to be in ~/.aws
or environment variables.
Once everything is verified, you can use a modified version of the script that
calls
ssm.delete_parameter()
or do it via the console.
I hope this saves someone some time.