👨🏻 Brother Talk — Phase 04, Off the Record

No slides, no compliance-framework jargon. This is me, your brother, telling you the things people only say after the second coffee. Read it once now, and again the week before your interview.


Listen. Of all the phases in this track, this is the one where I've watched the most careers quietly stall — not because RBAC is hard, but because everyone thinks they know it. They can add a role assignment in the portal, so they check the box and move on. And then six months into a real Azure job, a service principal gets a 403 it shouldn't, a deploy fails with an error code they've never read closely, an auditor asks "who can read this customer data," and they realize they never actually understood the machine. They understood the button.

Here's the secret that took me too long to learn: the people who get senior security roles are not the ones who memorized the most built-in roles. They're the ones who can stand at a whiteboard and run the evaluation in their head. When the room is panicking about "can the breached identity reach production," you don't reach for the portal. You say: "It had Contributor on this RG — that's control plane, so it could redeploy, but it had no DataActions, so it couldn't read the secrets, and there's a deny assignment from the stack blocking delete, so the blast radius is this, not the whole subscription." That sentence — running the algorithm out loud, with the scope and the planes and the deny all in their right places — is the entire difference between "knows Azure" and "owns Azure security." That's what this phase is for. That's why you're going to build the evaluator and not just read about it.

So let me give you the mindset shifts, brother to brother.

The control-plane / data-plane split is not trivia. It's the whole game. Everyone hits "Owner can't read a blob" and treats it as an annoying gotcha. It's not a gotcha — it's the entire security model trying to teach you something: managing a thing and reading its data are different trust levels, on purpose. Once that clicks, you stop over-granting. You stop making the platform admin a data owner. You start seeing that the person who can rotate the storage keys does not need to read every customer's file, and you design for that. Internalize this one idea and you're already thinking like a security architect instead of an operator.

Default to deny, and mean it. The whole system is deny-biased — no allow, no access; deny wins over everything. Your designs should be the same. The instinct of a junior is "grant it, then tighten later." Later never comes. The over-grant sits there until it's the hole in the breach report. The principal instinct is the reverse: grant the minimum at the tightest scope, then widen only when something actually breaks and you can see exactly what it needed. It feels slower. It is the thing that saves your name from the post-mortem.

Narrow the scope before you narrow the role. This is the practical trick nobody tells you. Everyone agonizes over which role to pick. But the bigger lever is almost always scope: Contributor on one resource group is a footnote; Contributor on the subscription is a liability — same role. When someone asks for access, your first question isn't "what role" — it's "at what scope, and can it be smaller?" Tighten the scope and most "I need a custom role" requests evaporate.

Deny assignments are your nuclear option — know they exist. Most engineers go their whole career not knowing you can't protect a resource from an Owner with a role or even a lock. When you casually mention "we'll put a deny assignment via the deployment stack's denySettings so even break-glass Owner can't delete it," people look at you differently. It signals you understand the model at the level where the guardrails that survive privileged users live. That's a level above "I assign roles."

Policy is where you stop being a babysitter. Here's the career unlock in Azure Policy: every rule you write is a 3 a.m. conversation you'll never have to have. "No public storage accounts" as a deny policy means you never again review a PR for it, never again get paged for it, never again explain it to a new hire. You encode the judgment once and the platform enforces it forever, for hundreds of engineers. That's leverage. That's the difference between a senior who reviews everything and a principal who built the system so it doesn't need reviewing. Start with audit to see what would break, then flip to deny when you're sure — that rollout discipline is itself a senior signal.

Read the error code first. Always. This is the smallest habit with the biggest payoff. AuthorizationFailed and RequestDisallowedByPolicy are completely different investigations — different gate, different team, different fix. Half the wasted hours I've seen in Azure incidents come from someone debugging RBAC when Policy denied them, or re-checking a policy when RBAC was the wall. The error code tells you which gate you're at. Learn to read it before you touch anything.

The honest truth about this phase's difficulty: it's not deep, it's precise. There's no hard algorithm here — the whole evaluator fits in a page. What's hard is holding all the pieces in the right order under pressure: deny first, then allow, default deny; the right plane; the right scope; the subtraction not the deny. The lab forces that precision into your fingers. Build it, break it, and the next time someone asks you a 403 question in an interview you won't reach for a memory — you'll reach for a function you wrote.

One more thing, and it's the most important. Security is the one area where "it works" is not the bar. A pipeline that works might be over-provisioned and you'd never know until the breach. So the question you bring to every access decision is not "does it work" but "what's the least this needs, and what's the blast radius if this identity is compromised?" The engineers who ask that question by reflex are the ones companies trust with the keys. It's learnable. It starts with the evaluator in this phase.

Go build it. Then come find me in Phase 05 — that's where we take everything here and watch it inherit down a management-group tree across a hundred subscriptions, which is where governance stops being a feature and becomes a platform.

— your brother 👨🏻