<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Managed Identity on Brewed in the Cloud by Chris Hailes</title><link>https://blog.brewedinthecloud.com/tags/managed-identity/</link><description>Recent content in Managed Identity on Brewed in the Cloud by Chris Hailes</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 11 Aug 2026 00:00:00 +1000</lastBuildDate><atom:link href="https://blog.brewedinthecloud.com/tags/managed-identity/rss.xml" rel="self" type="application/rss+xml"/><item><title>Workload Identity Is a Trust Graph, Not a Credential Problem</title><link>https://blog.brewedinthecloud.com/p/workload-identity-trust-graph/</link><pubDate>Tue, 11 Aug 2026 00:00:00 +1000</pubDate><guid>https://blog.brewedinthecloud.com/p/workload-identity-trust-graph/</guid><description>&lt;p&gt;Most teams celebrate when they remove secrets from workloads.&lt;/p&gt;
&lt;p&gt;They should. It is a real security improvement.&lt;/p&gt;
&lt;p&gt;It is also where many identity architectures become dangerously self-congratulatory.&lt;/p&gt;
&lt;p&gt;If your design review ends at &amp;ldquo;we use managed identity now,&amp;rdquo; you did credential hygiene, not identity architecture.&lt;/p&gt;
&lt;h2 id="the-mental-model"&gt;The Mental Model
&lt;/h2&gt;&lt;p&gt;Workload identity security is usually discussed as an authentication problem. That framing is too narrow for serious environments.&lt;/p&gt;
&lt;p&gt;Authentication answers whether a principal is valid. Architecture answers what that principal can reach once valid.&lt;/p&gt;
&lt;p&gt;That distinction is the whole argument.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Secret removal reduces credential theft risk. Trust graph design determines compromise consequence.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A workload identity model should be read as a graph:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nodes&lt;/strong&gt;: managed identities, service principals, federated subjects, automation identities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edges&lt;/strong&gt;: role assignments, delegated permissions, cross-service access grants, trust to external token issuers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consequence&lt;/strong&gt;: blast radius produced by transitive reachability, not by credential format.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If a compromised identity can still traverse high-value services through legitimate permissions, the architecture is weak even when secret hygiene is excellent.&lt;/p&gt;
&lt;h2 id="how-it-actually-works"&gt;How It Actually Works
&lt;/h2&gt;&lt;p&gt;In practice, identity exposure grows through three repeatable patterns.&lt;/p&gt;
&lt;h3 id="inherited-scope-drift"&gt;Inherited scope drift
&lt;/h3&gt;&lt;p&gt;Assignments at management group, subscription, or broad resource group scope create reachability that local teams do not always notice. The identity keeps becoming more useful operationally and more dangerous architecturally.&lt;/p&gt;
&lt;h3 id="shared-identity-surfaces"&gt;Shared identity surfaces
&lt;/h3&gt;&lt;p&gt;When multiple workloads share one identity for convenience, one compromise becomes multi-workload access. That is not an incident surprise. It is a design outcome.&lt;/p&gt;
&lt;h3 id="transitive-access-chains"&gt;Transitive access chains
&lt;/h3&gt;&lt;p&gt;A workload identity often cannot reach crown-jewel data directly, but it can reach a service that can. These second-order edges are where many threat models stay shallow.&lt;/p&gt;
&lt;div class="mermaid"&gt;flowchart TD
A[Compromised workload identity] --&gt; B{Effective scope boundary}
B --&gt;|Narrow, workload-local| C[Local containment]
B --&gt;|Broad RG/Subscription| D[Cross-resource reachability]
D --&gt; E{Transitive service edges present?}
E --&gt;|No| F[Elevated but bounded impact]
E --&gt;|Yes| G[Pivot path across trust zones]
G --&gt; H[Systemic exposure event]
C --&gt; I[Periodic boundary review]
F --&gt; I
H --&gt; J[Architecture redesign required]
&lt;/div&gt;
&lt;p&gt;The practical point is blunt: compromise impact is mostly pre-decided by scope topology before any attacker arrives.&lt;/p&gt;
&lt;h2 id="where-teams-misjudge-managed-identity-and-federation"&gt;Where Teams Misjudge Managed Identity and Federation
&lt;/h2&gt;&lt;p&gt;Managed identity and federation are both useful. Neither is a substitute for trust boundary design.&lt;/p&gt;
&lt;h3 id="managed-identity-what-it-solves-and-what-it-does-not"&gt;Managed identity: what it solves and what it does not
&lt;/h3&gt;&lt;p&gt;Managed identity materially improves:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Secret handling and storage risk&lt;/li&gt;
&lt;li&gt;Rotation burden and stale credential drift&lt;/li&gt;
&lt;li&gt;Human exposure to credential material&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Managed identity does &lt;strong&gt;not&lt;/strong&gt; materially improve by itself:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Permission scope quality&lt;/li&gt;
&lt;li&gt;Transitive privilege chains&lt;/li&gt;
&lt;li&gt;Blast radius of inherited role assignments&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Treating managed identity rollout as completion criteria is architectural shallowness.&lt;/p&gt;
&lt;h3 id="federation-delegated-trust-boundaries-must-be-explicit"&gt;Federation: delegated trust boundaries must be explicit
&lt;/h3&gt;&lt;p&gt;Federation needs tighter language than &amp;ldquo;it depends on the external issuer.&amp;rdquo; That is directionally true but incomplete.&lt;/p&gt;
&lt;p&gt;When a workload identity trusts an external issuer, security responsibility splits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Delegated to external issuer&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Subject integrity (who the token claims to represent)&lt;/li&gt;
&lt;li&gt;Claim issuance controls&lt;/li&gt;
&lt;li&gt;Upstream identity assurance process&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Retained in Azure/control plane design&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Which issuer/audience combinations are accepted&lt;/li&gt;
&lt;li&gt;Which resources and roles the federated identity can reach&lt;/li&gt;
&lt;li&gt;How far privilege propagates after successful token exchange&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the architecture question is not &amp;ldquo;is federation secure?&amp;rdquo; It is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Have we constrained federated trust so a valid external claim cannot become broad internal reachability?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Without that boundary precision, federation discussions become hand-waving and reviewers rightly push back.&lt;/p&gt;
&lt;h2 id="when-this-pattern-reduces-risk-and-when-it-increases-it"&gt;When This Pattern Reduces Risk and When It Increases It
&lt;/h2&gt;&lt;h3 id="reduces-risk-when"&gt;Reduces risk when
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Identity scope is intentionally narrow and regularly revalidated.&lt;/li&gt;
&lt;li&gt;Shared identities are exceptional rather than default.&lt;/li&gt;
&lt;li&gt;Cross-service grants are explicit, justified, and reviewed as architectural exceptions.&lt;/li&gt;
&lt;li&gt;Federated trust accepts only tightly bounded issuer/audience/subject combinations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="increases-risk-when"&gt;Increases risk when
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Broad scope is justified with &amp;ldquo;delivery speed&amp;rdquo; and never revisited.&lt;/li&gt;
&lt;li&gt;Automation identities accumulate permissions release by release.&lt;/li&gt;
&lt;li&gt;External federation is introduced without a clear internal blast-radius boundary.&lt;/li&gt;
&lt;li&gt;Design reviews discuss identity mechanism but not effective reachability.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The anti-pattern is common and predictable: teams modernize credentials while preserving legacy trust sprawl.&lt;/p&gt;
&lt;h2 id="a-decision-filter-for-design-reviews"&gt;A Decision Filter for Design Reviews
&lt;/h2&gt;&lt;p&gt;If this article is useful, it should change review behavior immediately.&lt;/p&gt;
&lt;p&gt;Use this filter in architecture reviews:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What is the &lt;strong&gt;maximum effective reach&lt;/strong&gt; of this identity today, including inherited assignments?&lt;/li&gt;
&lt;li&gt;Which &lt;strong&gt;transitive edges&lt;/strong&gt; can this identity exploit indirectly through other services?&lt;/li&gt;
&lt;li&gt;For federated identities, which controls are &lt;strong&gt;external dependencies&lt;/strong&gt; versus &lt;strong&gt;internal design controls&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;If this identity is compromised now, where does containment actually stop?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If these questions cannot be answered quickly from current evidence, the design is operating on assumed trust, not controlled trust.&lt;/p&gt;
&lt;h2 id="real-world-impact"&gt;Real-World Impact
&lt;/h2&gt;&lt;p&gt;This only matters if it changes decisions in live environments, not just language in architecture decks.&lt;/p&gt;
&lt;h3 id="design-quality"&gt;Design quality
&lt;/h3&gt;&lt;p&gt;Strong teams stop treating workload identity as a provisioning task and start treating it as a boundary design discipline. The review standard shifts from &amp;ldquo;did we remove secrets&amp;rdquo; to &amp;ldquo;can we prove where compromise stops.&amp;rdquo; That change makes architecture reviews harder, but materially better.&lt;/p&gt;
&lt;h3 id="reliability-under-pressure"&gt;Reliability under pressure
&lt;/h3&gt;&lt;p&gt;Containment speed in incidents is mostly determined before the incident starts. When identity boundaries and transitive edges are explicit, responders can isolate quickly without reconstructing trust logic from scratch. When they are implicit, outage and containment timelines both expand.&lt;/p&gt;
&lt;h3 id="security-governance"&gt;Security governance
&lt;/h3&gt;&lt;p&gt;Governance quality improves when drift review is tied to reachability change rather than policy inventory. Counting identities tells you very little; understanding effective scope and inheritance tells you where risk is accumulating. That is the difference between administrative control and architectural control.&lt;/p&gt;
&lt;h3 id="scalability"&gt;Scalability
&lt;/h3&gt;&lt;p&gt;Scale is not &amp;ldquo;how many identities we can create.&amp;rdquo; Scale is whether teams can reason about compromise consequence without escalation to a few platform specialists. If only a small group can explain trust boundaries, the architecture has not scaled, even if automation has.&lt;/p&gt;
&lt;h2 id="gotchas-and-edge-cases"&gt;Gotchas and Edge Cases
&lt;/h2&gt;&lt;p&gt;These are the conditions that repeatedly make otherwise good identity designs fail in production.&lt;/p&gt;
&lt;h3 id="least-privilege-intent-can-still-produce-broad-effective-reach"&gt;Least-privilege intent can still produce broad effective reach
&lt;/h3&gt;&lt;p&gt;Teams often document narrowly scoped intent while inherited role assignments quietly widen the operational boundary. The design looks controlled in documentation but behaves broadly in practice. Always validate effective scope, not intended scope.&lt;/p&gt;
&lt;h3 id="shared-platform-identities-hide-concentrated-failure-domains"&gt;Shared platform identities hide concentrated failure domains
&lt;/h3&gt;&lt;p&gt;One identity serving multiple workloads reduces operational overhead and increases correlated risk at the same time. During compromise, those workloads collapse into a single incident boundary whether teams planned for that or not. Shared identity should be an explicit exception with ownership.&lt;/p&gt;
&lt;h3 id="federation-reliability-can-mask-federation-over-trust"&gt;Federation reliability can mask federation over-trust
&lt;/h3&gt;&lt;p&gt;A stable external issuer does not guarantee a safe internal trust boundary. External claim integrity and internal authorization scope are separate control planes and must be reviewed separately. Good issuer hygiene cannot compensate for over-broad internal role design.&lt;/p&gt;
&lt;h3 id="drift-accumulates-through-reasonable-exceptions"&gt;Drift accumulates through reasonable exceptions
&lt;/h3&gt;&lt;p&gt;Most exposure growth is gradual and justified one change at a time. No single change looks dangerous, but the aggregate trust graph becomes harder to contain. This is why periodic architecture-level identity review must be mandatory rather than optional.&lt;/p&gt;
&lt;h2 id="best-practices"&gt;Best Practices
&lt;/h2&gt;&lt;h3 id="review-identity-as-a-graph-not-a-setting"&gt;Review identity as a graph, not a setting
&lt;/h3&gt;&lt;p&gt;Evaluate nodes, edges, and transitive reachability together. Single-control reviews miss system behavior.&lt;/p&gt;
&lt;h3 id="separate-external-assurance-from-internal-authorization"&gt;Separate external assurance from internal authorization
&lt;/h3&gt;&lt;p&gt;For federated identities, document what is trusted externally and what is constrained internally. Do not blend the two in one vague control statement.&lt;/p&gt;
&lt;h3 id="treat-broad-scope-as-debt-with-an-owner-and-expiry"&gt;Treat broad scope as debt with an owner and expiry
&lt;/h3&gt;&lt;p&gt;If broad grants are temporarily necessary, assign ownership and expiry criteria. Scope without expiry is silent risk growth.&lt;/p&gt;
&lt;h3 id="make-one-question-mandatory-in-every-identity-review"&gt;Make one question mandatory in every identity review
&lt;/h3&gt;&lt;p&gt;Before approval, require this answer in writing:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is the smallest boundary where compromise of this identity is guaranteed to stop, and what evidence proves it?&lt;/strong&gt;&lt;/p&gt;
&lt;div class="insight"&gt;
&lt;div class="insight-icon"&gt;🍺&lt;/div&gt;
&lt;div class="insight-content"&gt;
&lt;strong&gt;Brewed Insight:&lt;/strong&gt; If your workload identity review can prove who can authenticate but can&amp;rsquo;t prove where a compromise stops, the design is still immature - no matter how modern the credential mechanism looks on paper.
&lt;/div&gt;
&lt;/div&gt;
&lt;style&gt;
.insight {
display: flex;
align-items: center;
background-color: #0089e41c;
border-left: 10px solid #D69A2D;
padding: 10px;
margin: 20px 0;
border-radius: 4px;
}
.insight-icon {
font-size: 24px;
margin-right: 10px;
}
.insight-content {
flex: 1;
}
&lt;/style&gt;&lt;h2 id="learn-more"&gt;Learn More
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/en-us/entra/workload-id/workload-identities-overview" target="_blank" rel="noopener"
&gt;Workload identities in Microsoft Entra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/overview" target="_blank" rel="noopener"
&gt;Managed identities for Azure resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation" target="_blank" rel="noopener"
&gt;Workload identity federation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles" target="_blank" rel="noopener"
&gt;Azure RBAC built-in roles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/en-us/azure/role-based-access-control/best-practices" target="_blank" rel="noopener"
&gt;Best practices for Azure RBAC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>