Attribute-based access control (ABAC)
often confused with role-based access control (RBAC)An authorization strategy where a small number of policies compare tags on the principal with tags on the resource (and in the request). Access changes when tags change, not when policies change.
- Tag principals (IAM roles, users, or session tags from your IdP) with attributes such as
projectorteam. - Tag resources with the same keys.
- Write one policy whose condition says
aws:ResourceTag/projectmust equal${aws:PrincipalTag/project}. - New resources become reachable as soon as they carry the right tag.
| ABAC | RBAC | |
|---|---|---|
| Grants by | Matching attributes (tags) | Job function (role, group) |
| New resource | Tag it; no policy change | Update the policy to list it |
| Number of policies | Few | Many (job × project) |
| Risk to manage | Who can change tags | Policy sprawl, over-broad roles |
| Works with IdP attributes | Yes, session tags | Through group → role mapping |
| Supported everywhere? | No; check each service's tag support | Yes |
- Forgetting that ABAC is only as safe as tag control: whoever can change a tag can change access.
- Assuming every service and action supports
aws:ResourceTag. Check the service authorization reference. - Using
aws:ResourceTagwithiam:PassRole; AWS warns this is unreliable. Use paths or names. - Picking RBAC when the question stresses “many new projects, minimal policy updates”.
- Fast-growing environments with many projects or teams.
- Fewer policies to audit.
- Use corporate directory attributes directly (SAML, OIDC, Identity Center).