AWS IAM roles are used to delegate access without needing to share long-term security credentials, while IAM users have permanent credentials associated with them. I would use roles for services that need temporary access to resources, such as EC2 instances accessing S3 buckets, which enhances security and simplifies credential management.
In depth
IAM roles provide a way to grant permissions to AWS services or users without needing long-term credentials. This is particularly useful for applications or services running on EC2, Lambda, or ECS, where roles can be assigned at runtime to allow them temporary permissions to access certain resources. In contrast, IAM users are individuals who are assigned long-term credentials, which can lead to security risks if not managed properly. Roles automatically handle credential expiration, reducing the chances of credentials being compromised or misused. Additionally, roles can be assumed by different accounts or services, providing flexibility in multi-account architectures.
Example scenario
In a production scenario, we had an application running on EC2 that needed to access S3 for file storage. Instead of embedding S3 credentials in the application code, we created an IAM role with the necessary S3 permissions and attached it to the EC2 instance. This way, the EC2 instance assumed the role at runtime. If the role was compromised, it would only last for a short period, minimizing risk. Furthermore, rotating credentials became unnecessary, simplifying our security posture.
Common mistakes
One common mistake is using IAM users instead of roles for applications that run on AWS services. This leads to hardcoding credentials, which is a bad security practice. Additionally, developers often forget to specify the permissions required for roles, resulting in access denied errors that can delay development. Finally, some assume that roles can only be used within a single account, overlooking their ability to facilitate cross-account access, which is essential in multi-account architectures.
Follow-up questions
- Can you describe a situation where you had to troubleshoot an IAM role issue?
- What strategies would you use to manage roles across multiple AWS accounts?
- How would you ensure least privilege access with IAM roles?
- Can you explain the process of creating and attaching a policy to a role?

Preparing for a system design interview?
- A 7-step method for answering any system design question, plus estimation numbers
- 5 worked designs: URL shortener, rate limiter, chat, news feed and file storage
- Guides to caching, databases, queues, consistency and reliability, with a 4-week study plan
- 306 practice questions with answers on caching, databases, queues, microservices, APIs and more
5 worked designs, a 4-week plan and 306 practice questions with answers.
The material stays free to read online. This is the organised, offline, print-ready PDF edition. Secure payment by PayPal; your personal download link is emailed after payment is confirmed. Digital product, no shipping.