AWS Developer Tools Blog
Rotating Credentials (Credential Management Part 2)
In a previous blog post I wrote about ways to securely configure your AWS access credentials when using the aws-sdk
gem. This week I want to talk about a security best practice, credential rotation.
Did you know that AWS recommends that you rotate your access keys every 90 days?
Even if you are very careful with your AWS access credentials, you may find yourself in a situation where someone has gained access to your secrets. If you build your applications with a regular key rotation solution, then an out-of-bounds replacement of keys can be painless. In the heat of the moment when you are scrambling to replace compromised keys, this can be a life saver.
Rotating Credentials
The process for rotating credentials boils down to the following steps:
- Generate new keys
- Securely distribute keys to your applications
- Ensure the applications refresh their keys
- Disable the old access keys
- Ensure everything still works
- Delete the old access keys
For best effect, you should automate this process. If you have to do it by hand, the process will be much more error prone and you will likely do it less often. You can use the aws-sdk
gem to do much of the work for you.
This simple example demonstrates how to generate a new key pair, disable old keys and then eventually delete the old keys. I inserted placeholders for where you should distribute your new keys and refresh your applications with the new keys.
iam = AWS::IAM.new # create new set of access credentials new_keys = iam.access_keys.create # you should persist the new key pair somewhere secure to start with new_keys.id # access key id new_keys.secret # secret access key ## deploy the new keys to your applications now, make ## sure they pick up the new keys # deactivate the old keys old_keys = iam.access_keys['AKID12346789…'] # old access key id old_keys.deactivate! ## the old keys still exist, they are temporarily disabled, use ## this time to test your applications to ensure they are working # if you are confident your applications are using the new keys # you can then safely delete the old key pair old_keys.delete
How you distribute your keys and refresh your application is going to be very specific to your own needs. Just be certain to test your applications before you delete your disabled keys. You can not restore them once they have been deleted.
For the next post in this series, I will write about credential providers and how the aws-sdk
makes it easy for your applications to pick up new credentials without restarts or downtime. This can be very useful when you are rotating credentials.