Skip to content
Neha Kumari
Go back

IAM: why nothing in AWS works at first

Almost everyone’s first real experience with AWS is the same: you try to do something perfectly reasonable, and you get told access denied. It feels like the system is fighting you.

The name behind that “no” is IAM, Identity and Access Management. It took me a while to stop resenting it and realize the friction is the entire point. Security doesn’t start from “sure.” It starts from “no,” and makes you earn every “yes.”

The one question IAM answers

Strip away the jargon and IAM is answering a single question, over and over:

Who is allowed to do what, to which resource?

Every permission in AWS is some version of that sentence.

Policies — the rulebook, in writing

A policy is that sentence written down, as a small document. It says: this effect (allow or deny), for these actions, on these resources. You attach policies to identities, and those identities can then do exactly what the policies say and nothing else.

Users vs roles — a permanent badge vs a borrowed hat

This is the distinction that confused me longest.

The click: a role isn’t a person, it’s a costume with permissions stitched in.

The rules of the game

Three rules run the whole thing, and once they clicked, the “access denied” messages stopped feeling random:

  1. Deny by default. If nothing explicitly allows an action, it’s denied. Silence means no.
  2. An explicit allow opens the door.
  3. An explicit deny always wins. If anything says no, it’s no, even if something else said yes.

That’s also the spirit of least privilege: start from nothing, and grant only the specific things actually needed. It’s the opposite of how I’d think as a salesperson, where access often signals trust. Here, good systems assume nothing.

The root account — the master key

When you open an AWS account, the root user can do anything. The grown-up move is to lock it away, turn on multi-factor authentication, and never use it for daily work. You create limited identities for that. The most powerful key is the one you use least.

How AWS actually decides

A decision flow: for a request, if there is an explicit deny the result is denied; otherwise if there is an explicit allow the result is allowed; otherwise it is denied by default.
The simplified logic behind every 'allowed or not' decision: deny by default, explicit deny always wins.

Quick reference, for future me

TermWhat it isPlain version
PrincipalWho is making the requestThe “who”
ActionThe operation requestedThe “what”
ResourceThe thing acted onThe “which”
PolicyDocument of allow/deny rulesThe rulebook
UserPermanent identityA badge that’s yours
RoleTemporary assumed identityA borrowed hat
Least privilegeGrant only what’s neededStart from nothing
Root userAll-powerful account ownerThe master key, locked away

I still get tripped up by IAM, the layered policies, the JSON, the times two rules quietly interact. But I stopped reading “access denied” as the system being difficult. It’s the system doing exactly its job, and learning to see the “no” as a feature instead of a bug felt like a genuinely technical shift in how I think.


Share this post:

Previous Post
Thinking like a builder before I can build like one
Next Post
VPC: the part of AWS I kept avoiding