blogs-image

IAM Roles vs Policies in AWS: What’s the Difference?

Introduction

Amazon Web Services (AWS) Identity and Access Management (IAM) is the backbone of AWS security, enabling you to control access to AWS resources. Two core components—IAM Roles and IAM Policies—are often confused. Understanding their differences is crucial for building secure, scalable, and maintainable AWS environments.

Purpose: Roles vs Policies

IAM Roles

  • Act as an AWS identity with specific permissions.
  • Can be assumed by users, applications, or AWS services.
  • Temporary credentials (no long-term credentials).
  • Enable cross-account and service-to-service access.

IAM Policies

  • Define permissions as JSON documents.
  • Attach to users, groups, or roles.
  • Specify Allow or Deny for actions on resources.
  • Control fine-grained access to AWS resources.

Prerequisites

  • AWS account with administrative access
  • Familiarity with AWS Management Console or AWS CLI
  • Basic understanding of JSON syntax

IAM Roles vs Policies: Feature Comparison

Feature IAM Role IAM Policy
Purpose Identity to assume with permissions Defines permissions
Attachable To Users, AWS services, applications Users, groups, roles
Credential Type Temporary (via STS) None (defines access)
Format Resource with trust and permission policies JSON document
Use Case Cross-account/service access, EC2 instance profiles Allow/Deny specific actions on resources

Step-by-Step Guide: Creating IAM Roles and Policies

Create an IAM Policy
  1. Sign in to the AWS Management Console.
  2. Navigate to IAM > Policies.
  3. Click Create policy.
  4. Choose JSON and enter your policy document. Example:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "s3:ListBucket",
          "Resource": "arn:aws:s3:::example-bucket"
        }
      ]
    }
  5. Click Review policy, name your policy, and create it.
Create an IAM Role
  1. Go to IAM > Roles in the AWS Console.
  2. Click Create role.
  3. Select the trusted entity (e.g., AWS service, another AWS account).
  4. Attach the policy you created earlier.
  5. Complete the role creation with a name and description.

Usage Examples

  • 1. GitHub Actions Deploying to AWS: Assign an IAM role to GitHub Actions via OIDC, attach a policy allowing deployment to S3 or Lambda.
  • 2. REST API Lambda Execution: API Gateway assumes an IAM role with a policy to invoke Lambda functions.
  • 3. EC2 Instance Accessing S3: Attach an IAM role to an EC2 instance with a policy to read/write S3 buckets.
  • 4. Cross-Account Access: Allow a role in Account A to assume a role in Account B using a trust policy and attach necessary permissions.
  • 5. Automated CI/CD Pipeline: CodeBuild assumes a role with policies to pull from CodeCommit and push Docker images to ECR.

Security Best Practices

  • Apply the principle of least privilege to all roles and policies.
  • Use managed policies for common use cases, but prefer customer managed policies for custom needs.
  • Regularly review and audit IAM roles and policies.
  • Enable MFA for sensitive roles.
  • Monitor usage with IAM Access Advisor and AWS CloudTrail.

Frequently Asked Questions

An IAM role is an identity you can assume to gain permissions, while a policy is a document that defines those permissions. Roles are assumed by users or services; policies are attached to roles (or users/groups) to specify what actions are allowed or denied.

No, policies are attached to IAM identities (users, groups, roles). AWS services assume roles, and those roles have policies attached to them.

A trust policy is a special policy attached to an IAM role that defines who can assume the role. It is different from a permissions policy, which defines what actions can be performed.

Use IAM Access Advisor and AWS CloudTrail to monitor and review usage of roles and policies.

Use AWS managed policies for common scenarios, but prefer customer managed policies for custom or sensitive requirements to maintain control and visibility.

Conclusion

IAM roles and policies are foundational to AWS security. Roles provide identities for users or services to assume, while policies define the permissions granted. By understanding their differences and following best practices, you can secure your AWS environment and enable flexible, scalable access control.

For more details, visit the AWS IAM documentation.