AWS credentials are very powerful – in the wrong hands you could lose data or incur large costs – so you need to manage them carefully. I don’t think there’s a one size fits all here and as usual security and convenience tend to pull in opposite directions, but I think there are at least some general guideslines:
- You should very rarely be using the master account, instead use IAM to create users with specific permissions
- Try to attach policies to groups rather than users – this makes them easier to manage
- Make groups task focussed rather than service focussed. For example I’d have a backup group that had relevant access to S3 and glacier rather than having an S3 group and a glacier group
- Only give people access to what they need. Your accountant for example only needs access to the billing data, not the api or console
The downside of this is that you now have multiple sets of credentials to manage for all these IAM users. For me, credentials fall into 3 categories:
- Credentials that the app uses itself
- Credentials for using the web console
- Credentials for management scripts (provisioning new instances etc.)