2.1.5 Assume an IAM Role

STS AssumeRole

Cách hoạt động

1. Principal (User/Role) → STS AssumeRole
2. STS → Verify trust policy + permissions
3. STS → Return temporary credentials
   - AccessKeyId
   - SecretAccessKey
   - SessionToken
   - Expiration

Trust Policy (Role phải trust principal)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "my-external-id"
        }
      }
    }
  ]
}

Cross-Account Access

Account A (111111111111):
  - User/Role cần access resources ở Account B
  - IAM Policy: Allow sts:AssumeRole on Account B role

Account B (222222222222):
  - Role với Trust Policy cho Account A
  - Permission Policy cho phép access resources

Duration

ScenarioMinMaxDefault
AssumeRole15 min12 hours1 hour
AssumeRoleWithSAML15 min12 hours1 hour
AssumeRoleWithWebIdentity15 min12 hours1 hour

ExternalId — Confused Deputy Problem

  • Third-party service assume role trong account của bạn
  • Không có ExternalId → attacker có thể dùng cùng role ARN
  • ExternalId = shared secret giữa bạn và third-party
  • Condition trong trust policy verify ExternalId

Exam Tip: Cross-account access = AssumeRole. ExternalId chống confused deputy. Trust policy + permission policy đều phải allow.