InfrastructureAll levels

Azure

Azure is Microsoft's cloud, and the first thing to know about it is that it has two control systems people meet as one and are not. A directory holds identities and predates the cloud entirely — it is the same directory behind corporate email and sign-in. A separate resource plane holds subscriptions, resource groups and everything you deploy. Being an administrator of the first grants nothing in the second. This page covers that split and why it causes the first day of confusion, the scope chain that permissions inherit down, where Azure is genuinely the right answer, and what the platform costs you in naming churn.

Two planes
Directory and resources
Permissions
Inherit down the scope
Resource group
Also a deletion unit

The directory is a different product from the cloud

Microsoft Entra ID — the directory formerly called Azure Active Directory — is where users, groups and application identities live. It is not part of Azure in the way a virtual machine is: the same directory authenticates corporate email, document sharing and every other Microsoft service the organisation uses, and it exists perfectly well for companies that run nothing in Azure at all. What Azure adds is a separate permission system, role-based access control, that binds a directory identity to a scope in the resource tree.

Azure has two control systems that are easy to mistake for one. Microsoft Entra ID is a directory that predates the cloud and authenticates far more than it — the same directory behind corporate email and sign-in. The Azure resource plane is a separate chain of scopes: management group, subscription, resource group, resource. The only thing joining them is a role assignment, which binds a directory identity to one scope, and permissions inherit downward from wherever the assignment is made. The two sets of roles have similar names and grant nothing in each other's territory, which is why a Global Administrator can legitimately see no resources at all. The resource group is also a lifecycle unit: deleting it deletes everything inside.

This is the source of the first confusion nearly everyone has. There are two separate sets of roles with similar names, and holding one says nothing about the other. A directory role — Global Administrator, User Administrator — governs the directory: creating users, managing groups, consenting to applications. A resource role — Owner, Contributor, Reader — governs things in Azure: reading a database, restarting a virtual machine, deleting a resource group. A Global Administrator can, by design, see no resources at all. There is a deliberate elevation step that lets one grant themselves access across the resource tree, and the fact that it is a step rather than an implication is the point.

A directory role

  • Governs users, groups, applications and how they sign in.
  • Applies across the tenant, including services that are not Azure at all.
  • Grants nothing over virtual machines, databases or storage.
  • Held by the smallest possible number of people, and ideally only when needed.

A resource role

  • Governs what can be done to resources, at one scope in the tree.
  • Assigned to a directory identity — usually a group, never a person directly.
  • Inherits downward: assigned at a subscription, it reaches every group inside.
  • Grants nothing in the directory, no matter how powerful it looks.

The mechanism that makes this workable for applications is the managed identity: an identity in the directory that Azure creates and rotates for a specific resource, so a virtual machine or a function has something to be without any secret existing. It is the direct equivalent of the short-lived credential story on the other clouds, and it should be the default for anything running inside Azure that needs to call anything else inside Azure. Registering an application and storing its secret is the fallback for things outside — and a secret in a configuration file is a secret in a repository within a year.

Four scopes, and one that deletes

The resource plane is a chain of four levels and a role assignment can be made at any of them. A management group holds subscriptions and other management groups, and exists so a rule can be applied across many subscriptions at once. A subscription is the billing and quota boundary — limits are per subscription, so it is also a scaling boundary whether you meant it to be or not. A resource group holds resources. A resource is the thing itself. An assignment made high in that chain reaches everything below it, which makes the scope you choose the most consequential part of granting access.

The resource group deserves a paragraph of its own, because it behaves differently from anything on the other clouds. Every resource belongs to exactly one, it is chosen at creation, and moving a resource between groups is possible but not universally supported. More importantly, the group is a lifecycle unit: deleting it deletes everything inside it, in one action. That makes it an excellent container for a thing with a beginning and an end — a review environment, an experiment, one application's complete footprint — and a poor container for a mixture of things that merely happened to be created in the same week.

Above role assignments sits a separate guardrail layer that answers a different question. Roles say who may act; policy says what may exist. A policy can require a tag on every resource, forbid a region, forbid a virtual machine size, or force a storage account to reject unencrypted connections — and it applies regardless of who is asking, including owners. Some policies simply refuse the deployment; others fix the resource as it is created. Assigned at a management group, that is the mechanism for rules that must hold across an organisation, and it is the closest equivalent to the organisation-level ceilings on the other clouds.

Where Azure is genuinely the right answer

The honest case for Azure is rarely a specific service, and pretending otherwise wastes everyone's time. It is that a large number of organisations already run their identity, their email and their desktops on Microsoft, and their people already exist in the directory Azure authenticates against. In that situation, single sign-on, conditional access rules, device compliance and group membership are not integration work — they are already true. Choosing another cloud means either federating that identity across or maintaining a second set of accounts, and both are real ongoing costs that no architecture diagram shows.

Two more things follow from that position rather than from technology. Licensing economics are frequently decisive: an organisation with existing server or database licences can often apply them to cloud instances, and the resulting difference is large enough to settle a procurement argument on its own. And hybrid is treated as a permanent state rather than a migration phase — the tooling assumes some servers stay in a building, which suits regulated industries and manufacturing far better than a story that begins "first, move everything".

The fair critique is about coherence rather than capability. Services and portal sections have been renamed often enough that documentation, blog posts and your own runbooks disagree about what a thing is called, and the same task frequently has three supported paths that behave slightly differently. Budget for that: prefer the command line and infrastructure code over portal walkthroughs, because a documented command survives a rename better than a documented click path, and write down which of the three ways your team uses so the next person is not choosing again.

How this shows up in real delivery

Every deployment goes through one control plane, and knowing that explains several behaviours at once. A template describes the desired resources and is submitted as a deployment; the plane works out what to create, update or leave alone. The practical consequence people meet is that a deployment is not atomic in the way a database transaction is — a failure part way through leaves what already succeeded in place, so templates need to be safe to submit again. That is straightforward if you write them declaratively and avoid steps that are only correct the first time.

Subscription limits are the constraint that catches growing systems, because they are quiet until they are not. Quotas are per subscription and per region, several defaults are lower than teams assume, and increases need a request and an approval rather than a click. Two habits follow: check the limits for whatever you intend to scale before the launch that scales it, and treat the subscription as a design boundary — separating production from everything else is as much about not sharing a quota as it is about not sharing a permission.

On cost, the specifically Azure habit worth forming is to make the resource group and the tag tell the same story, because reporting groups by both and a resource that sits in the wrong group is misattributed forever. Beyond that the pattern is familiar: reserved capacity and savings commitments cut the rate substantially for anything running continuously, the applicable licence benefits are frequently forgotten by the people who already own the licences, and the largest single line on many invoices is something nobody uses — an orphaned disk, an idle gateway, a development environment left running since a demo.

Where it degrades

  • Confusing a directory role with a resource role, and wondering why an administrator sees nothing.
  • Role assignments made to individual people, which no access review can untangle later.
  • An assignment made at the subscription because it was easier than finding the right scope.
  • A resource group used as a folder for unrelated things, so it can never safely be deleted.
  • Application secrets in configuration, where a managed identity would need no secret at all.
  • Runbooks written as portal click paths, which the next rename quietly invalidates.
  • Growth planned without reading the per-subscription quota, which needs an approval to raise.
  • Existing licence benefits left unapplied by the organisation that already paid for them.

When to use it

Use it when

  • Organisations already running identity, email and devices on Microsoft, where single sign-on is already true.
  • Hybrid estates that will keep servers in a building indefinitely, rather than as a migration phase.
  • Enterprises with existing licences that can be applied to cloud instances, which often settles the cost question.
  • Regulated environments needing conditional access, device compliance and directory-level controls as one story.

Avoid it when

  • Teams with no Microsoft estate, where the directory is a system to learn rather than one you already have.
  • Data-platform-led products, where another cloud's warehouse and analytics stack is the reason to be there.
  • Small teams that would rather not learn two role systems before deploying one application.
  • Projects that need documentation to stay accurate for years without anyone maintaining it.

Found this useful?

Share it with someone who is working on the same problem.