IAM Policies Deep Dive

Policy Types, Evaluation Logic & Best Practices

Policy Types

AWS IAM supports multiple policy types that work together to control access to resources.

Identity-Based Policies

  • • Attached to users, groups, or roles
  • • Define what actions the identity can perform
  • • Managed or inline policies
  • • Most common policy type

Resource-Based Policies

  • • Attached directly to resources
  • • Define who can access the resource
  • • S3 bucket policies, KMS key policies
  • • Support cross-account access

Permission Boundaries

  • • Maximum permissions for an entity
  • • Used with identity-based policies
  • • Delegated administration use case
  • • Advanced feature for large organizations

Policy Evaluation Logic

AWS evaluates policies in a specific order to determine if a request is allowed or denied.

Policy Evaluation Flow
1
Explicit Deny
Check for explicit deny in any policy
DENY
2
Service Control Policies
Check SCPs for account/OU restrictions
FILTER
3
Identity-Based Policies
Check identity permissions
ALLOW

Default Behavior

By default, all requests are denied. An explicit allow is required from an applicable policy.

Policy Structure

IAM policies are JSON documents with specific elements that define permissions.

// Basic policy structure
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::bucket/*"
    }
  ]
}
Version Policy language version (Required)
Statement Array of permission statements (Required)
Effect Allow or Deny (Required)
Action API actions to allow/deny (Required)

Best Practices

Principle of Least Privilege

  • • Grant minimum permissions required
  • • Start with deny all, add permissions as needed
  • • Regular access reviews and cleanup
  • • Use IAM Access Analyzer

Policy Organization

  • • Use groups for common permissions
  • • Consistent naming conventions
  • • Document policy purposes
  • • Version control for custom policies

Security Considerations

  • • Avoid wildcards in production
  • • Use conditions to restrict access
  • • Implement MFA for sensitive operations
  • • Regular policy validation and testing
Previous: IAM Fundamentals Next: Roles & Cross-Account