Glossary

    Attribute-Based Access Control (ABAC)

    Identity & Access

    Attribute-Based Access Control (ABAC) is an authorization strategy that defines permissions based on attributes (tags) rather than explicit resource ARNs. In AWS, ABAC uses tags on IAM principals (users, roles) and resources to control access.

    How It Works

    Instead of writing a policy like "Role X can access S3 bucket Y", you write "Any principal tagged Project=Alpha can access any resource tagged Project=Alpha". The permissions scale automatically as new resources are created with matching tags. In the policy JSON, the resource tag condition is compared against a policy variable that references the principal's tag, so a single condition block covers every project without ever naming one.

    IAM Condition Keys for ABAC

    • aws:PrincipalTag/key: tag on the IAM principal making the request
    • aws:ResourceTag/key: tag on the target resource
    • aws:RequestTag/key: tag being applied in a tagging API call
    • aws:TagKeys: list of tag keys in the request

    Benefits over RBAC

    • Fewer Policies: one policy works for any number of projects/teams
    • Self-Scaling: new resources inherit access through tags, no policy updates needed
    • Dynamic: change access by changing tags, not policies
    • Directory Integration: SAML and OIDC identity providers can pass employee attributes as session tags, so corporate directory attributes drive AWS permissions directly

    How It Goes Wrong in Practice

    ABAC moves the security boundary from policies to tags, and teams routinely forget to protect the new boundary. The classic failure looks like this: an organization rolls out a clean ABAC policy where principals tagged Project=Alpha can manage resources tagged Project=Alpha. But the same developers also hold generic permissions like ec2:CreateTags, ec2:DeleteTags, or iam:TagRole with no conditions attached, often left over from a pre-ABAC policy. Anyone in that position can simply retag a production database from Project=Bravo to Project=Alpha and walk through the front door, or tag their own role into a scope it was never meant to have. The permissions model is working exactly as written; the write path to the attributes was never locked down. Under ABAC, tagging APIs are security-critical APIs. The fix is to treat tag mutation like privilege assignment: constrain tagging permissions with aws:RequestTag and aws:TagKeys conditions so principals can only apply the tag values they already carry, deny changes to the access-control tag keys through SCPs, and alert on tag changes for sensitive resources. A second common failure is silent drift: a resource gets created without the project tag (or with a typo like Project=alpha, since tag values are case-sensitive in policy conditions, although condition key names are not), nobody can access it, and someone "fixes" the outage by attaching a broad ARN-based policy that quietly undermines the whole model.

    Practical Check: Inspect Tags and Simulate Access

    Start by confirming what tags a role actually carries, because ABAC decisions hinge on them:

    aws iam list-role-tags --role-name alpha-dev-role

    Then verify the effective result of your ABAC policies with the IAM policy simulator instead of guessing:

    aws iam simulate-principal-policy --policy-source-arn arn:aws:iam::123456789012:role/alpha-dev-role --action-names s3:GetObject ec2:StartInstances

    The output returns an EvalDecision of allowed, explicitDeny, or implicitDeny for each action, plus the matched statements, which makes it the quickest way to prove that a tag change has the access effect you expect before you rely on it in production.

    Frequently Asked Questions

    Do all AWS services support ABAC?
    No. Support for aws:ResourceTag conditions varies by service and by action. Before committing to ABAC for a workload, check the "AWS services that work with IAM" reference for each service you depend on, and design a fallback (ARN-scoped policies) for services that do not support tag-based authorization.

    Can federated users get tags without being IAM users?
    Yes. When employees federate through SAML or OIDC, the identity provider can pass session tags derived from directory attributes such as team or cost center. The resulting session principal carries those tags, so the same ABAC policies apply to federated sessions as to IAM roles.

    Are there limits on tags I should plan around?
    Tag keys are limited to 128 characters and tag values to 256 characters, and these limits apply to both IAM resource tags and session tags. Keep access-control tag keys short, standardized, and documented, and validate them at creation time with aws:RequestTag conditions so malformed tags never enter the environment.

    Is ABAC a replacement for least privilege?
    No, it is an implementation strategy for it. ABAC narrows access dynamically, but only if the tags are trustworthy. Tag governance, restricted tagging permissions, and monitoring of tag changes are what make an ABAC deployment actually least-privilege rather than just elegant.

    Related AWS Services

    Toc Consulting: AWS Security & Cloud Architecture

    Securing your AWS estate?

    Our team helps engineering teams secure and architect AWS the right way: assessment in week one, a prioritized action plan in week two.