In a situation where you're deploying nodes (e.g. amazon ec2), what are the recommended best practices for securing things like credentials to other resources? Without solving for scale, we might manually type passwords into configuration files, put ssh keys in place, etc.
When we attempt to solve for scale by introducing automation via build scripts and/or tools to spin up new ec2 nodes, etc, we run into all sorts of headaches (admittedly, some perhaps unnecessary).
Here are our priorities
- automated deployment of new nodes (which need ssh keys)
- automated deployment of application code (which utilize things like database credentials)
- not storing any credentials in revision control (I don't trust revision control security)
- as few people have access to production credentials as possible, even developers (they have their own credentials for accessing resources)
I specifically mention database credentials, but credentials to anything from revision control to ssh keys are relevant.
We've come up with a handful of solutions, each with their own pros and cons, but figure this problem must have already been solved by several people. Are we overthinking the problem?
If it's relevant, here is some information about our environment and tools
- java, ruby, php
- atlassian's bamboo
- ssh keys
- mysql, postgres, activemq