Skip to content
In this article
View as Markdown

Azure, AWS and Google Cloud Compared

Resource hierarchy, IAM evaluation, policy engines and networking

Last reviewed 13 October 2026 · 6 min read

Same shapes, different rules

Azure, AWS and Google Cloud are built from the same primitives, and from a distance their constructs line up neatly: each has an identity root, a way of grouping things, a hard boundary for security and billing, and somewhere to attach policy. Up close, the rules differ in ways that change designs. This page covers the four places where the differences matter most: the resource hierarchy, how a permission is evaluated, which policy engine does what, and networking.

The resource hierarchy

Resource hierarchy in Azure, AWS and Google Cloud

AzureAWSGoogle Cloud
Identity root

Microsoft Entra tenant

IAM in each account

Identity Center for the organisation

Cloud Identity organisation

Grouping

Management groups

Organizational units

In AWS Organizations

Folders

Under the organisation node

Hard boundary

Subscription

Account

Project

Soft grouping

Resource group

Not a security boundary

Tags

Metadata, not a boundary

Labels

Metadata, not a boundary

The marked row is the one that matters most: the unit that isolates security, billing and quota. An Azure resource group looks as if it belongs in that row, and doesn't.
ConceptAzureAWSGoogle Cloud
Identity rootEntra tenantIAM in each account; IAM Identity Center for the organisationCloud Identity organisation
GroupingManagement groupsOrganizational units (OUs)Folders
Hard security and billing boundarySubscriptionAccountProject
Soft groupingResource group, which is not a hard security boundaryTagsLabels
Where policy attachesManagement group, subscription, resource group, resourceRoot, OU, accountOrganisation, folder, project, resource

The row to get right is the third. An AWS account and a Google Cloud project are genuine walls: separate quotas, separate billing, and permissions that don't cross unless you say so. An Azure subscription plays the same role. An Azure resource group looks as if it might, because it is the thing you put resources in, but it's a soft grouping, and treating it as a security boundary is one of the more common Azure design mistakes.

On-premises estates have their own version of the same ladder: an Active Directory forest or a cluster as the hard boundary, OUs and sites for grouping. Kubernetes has the cluster as its hard boundary and namespaces as a soft one.

How a permission is evaluated

This is the most important structural difference between the three clouds, and it can't be papered over with a common abstraction. Each provider runs a different algorithm.

How each provider decides whether a request is allowed

AWS

  1. 1.Any explicit deny?If so, the request is denied.
  2. 2.Does every resource control policy allow it?
  3. 3.Does every service control policy allow it?
  4. 4.Does an identity or resource policy allow it?
  5. 5.Do the permission boundary and session policy allow it?If all of these do, it's allowed.

Google Cloud

  1. 1.Is the principal eligible under its principal access boundary?A condition that can't be evaluated counts as no.
  2. 2.Does a deny policy match?If so, the request is denied.
  3. 3.Is there an allow, inherited down the hierarchy?If so, it's allowed.

Azure

  1. 1.Does a deny assignment apply?All of them are created by Azure itself.
  2. 2.Do the role assignments, added up from management group to resource, grant it?If so, it's allowed.
Three different algorithms, not three dialects of one. Azure Policy isn't part of the Azure sequence at all: it is a separate engine that judges the configuration of a resource, not the permission of the caller.

AWS

An explicit deny always wins. After that, a request has to be allowed by every layer that applies to it[1], and the effective permission is the intersection of them all.

Resource control policies (RCPs) are evaluated before service control policies (SCPs). An RCP caps what can be done to resources in member accounts, whoever the caller is[2], and RCPs don't affect the management account. An SCP caps what principals in the organisation can do. Neither ever grants anything; they only set ceilings. Inside those ceilings, an identity-based or resource-based policy has to allow the action, and permission boundaries and session policies can narrow it further. Role trust policies and KMS key policies must allow explicitly as well.

Google Cloud

Where the principal may act is checked first. Principal access boundary (PAB) policies define the set of resources a principal is eligible to touch at all, and they fail closed[3]. Deny policies are checked before allow policies, and a deny condition that cannot be evaluated is treated as applying. Up to ten PAB policies can be bound to a principal set, and which permissions they block depends on the enforcement version.

Azure

Role assignments add up. Azure RBAC is an additive model: assignments made at a management group, subscription, resource group or resource are inherited downwards, and a caller has the union of everything assigned to them[4]. If a deny assignment applies, access is blocked. But all deny assignments are currently system-protected, created by Azure itself for features such as deployment stacks and managed applications[5]. You can't write your own to say "nobody may do this".

The token Azure Resource Manager receives carries the caller's transitive group memberships. Role definitions and assignments are stored globally.

Two separate engines sit beside this. Azure Policy judges the configuration of a resource (deny, audit, modify, deploy if not exists), not the permission of the person making the change. Entra directory roles are a different plane from Azure RBAC entirely.

What "nobody may do X" turns into

Because the algorithms differ, the same requirement is built differently on each cloud.

RequirementAWSGoogle CloudAzure
Organisation-wide "nobody may do X"SCP denyOrganisation deny policy, or PABComposed: Azure Policy deny on the configuration, plus RBAC scoping on who can act
Data must stay inside the organisationRCP plus SCP plus endpoint policiesPAB plus VPC Service ControlsPrivate endpoints plus Azure Policy plus Conditional Access
Guardrail on configurationAWS Config rules, or SCP conditionsOrganisation Policy constraintsAzure Policy

The Azure column is the one people get wrong. There is no customer-authored, organisation-wide deny on permissions equivalent to an SCP. Azure Policy can stop a resource being created or configured in a particular way; RBAC can limit who holds a role. The two together approximate an SCP, and the gap between them is where surprises live.

Networking deltas

ConcernAzureAWSGoogle Cloud
Scope of the networkRegional VNetRegional VPCGlobal VPC
Transit between networksVirtual WAN, hub and spokeTransit Gateway, Cloud WANNetwork Connectivity Center, Shared VPC
Private access to platform servicesPrivate Endpoint plus a private DNS zonePrivateLink interface endpointsPrivate Service Connect
Perimeter against data exfiltrationComposed from partsComposed: endpoint policies, RCPs, SCPsVPC Service Controls
Global edgeFront DoorCloudFront, Global AcceleratorGlobal external Application Load Balancer

Two rows matter more than the rest. Google's VPC is global, so one network spans regions; AWS and Azure networks are regional, and connecting regions is something you build. And only Google has a first-class data perimeter, VPC Service Controls, which stops data leaving a defined set of projects even through a valid API call with valid credentials. On the other two clouds you assemble an equivalent from endpoint policies and organisation policy, and you test it. The networking page goes deeper.

Tokens and revocation

Microsoft EntraAWSGoogle CloudKubernetes
Machine credentialManaged identity, or a federated identity credential; agent identities through a blueprintSTS role sessionService account, or Workload Identity FederationProjected ServiceAccount token, with an audience and an expiry
Revocation by eventContinuous access evaluation: tokens up to 28 hours, revoked on critical events at participating resourcesSession revocation through a policy conditionNot verified for this editionBound tokens invalidated when the pod is deleted

Equivalence classes

When a design says "use object storage" or "use managed Kubernetes", it is quietly claiming that the provider's version is equivalent to everyone else's. The atlas makes that claim explicit with five classes.

ClassMeaningExample
E1Functionally equivalent; swap with small changesObject storage, queues
E2Equivalent capability, different operating modelManaged Kubernetes identity and networking, serverless concurrency and cold starts, the Azure storage account as a namespace and security unit
E3Structurally different; cannot be normalisedPermission evaluation, policy engines, global databases
E4Unique to one provider; a lock-in flagTPUs, Copilot over Microsoft Graph, VPC Service Controls
E5The same word for different things"Agent", "project", "zone", "policy"

The classes are relative to a purpose. Object storage is E1 if all you care about is the API shape and durability, and it isn't if you care about authorization, because S3 bucket policies, Azure account keys and SAS tokens, and Google's uniform bucket-level IAM are three different models. So the atlas writes E1 with facet deltas: E1, but different on authorization and namespace. The five facets worth declaring are consistency, authorization, failure domain, lifecycle and versioning, and namespace. If a platform abstraction hides a facet that differs, it either leaks the difference or silently changes the behaviour.

CapabilityClassWhat differs
Object storage, queuesE1 with facetsAccess model: account keys and SAS, bucket policy, or uniform IAM
Managed KubernetesE1 for the workload API, E2 for identity and networkingWorkload identity binding, CNI modes, upgrade mechanics
ServerlessE2Concurrency, cold starts, networking
Globally consistent databaseE3Spanner, DynamoDB global tables and Cosmos DB consistency levels are different models
Policy enginesE3Azure Policy judges configuration; SCPs and RCPs cap permission; Google has Organisation Policy plus deny

AI platforms

Each cloud now has an AI platform that bundles model access, agents and tooling:

  • Microsoft Foundry, including Foundry Models, which is where Azure OpenAI now sits.
  • Amazon Bedrock, with Bedrock AgentCore for running agents, generally available since 13 October 2025.
  • Gemini Enterprise Agent Platform, announced at Google Cloud Next on 22 April 2026, which Google describes as the evolution of Vertex AI. Google says Vertex AI services and roadmap updates now ship through the Agent Platform.

Treat a rename like the last one as an alias, not a migration. Workloads are reported to run unchanged, but endpoint and API names after the rename were not verified for this edition, so check yours.

Verified claims

The security and provider-specific statements on this page, each tied to the page that says it, the date it was last checked against that page, and the conditions it depends on. The method is set out in the verification standard.

  1. [1]In AWS policy evaluation an explicit deny in any applicable policy overrides every allow, and a request must be allowed by every policy type that applies.

    Source
    Amazon Web Services: Policy evaluation logic, AWS IAM User Guide
    Checked
    13 October 2026, evidence tier T1
    Holds when
    All AWS commercial Regions. Cross-account requests add the resource account's policies to the evaluation.
  2. [2]Resource control policies cap what can be done to resources in member accounts, whoever the caller is; they don't apply to the management account.

    Source
    Amazon Web Services: Resource control policies (RCPs), AWS Organizations User Guide
    Checked
    13 October 2026, evidence tier T1
    Holds when
    AWS Organizations with all features enabled. RCPs support a subset of services; check the supported list before relying on one.
  3. [3]Google Cloud principal access boundary policies define the resources a principal is eligible to access, and they fail closed.

    Source
    Google Cloud: Principal access boundary policies
    Checked
    13 October 2026, evidence tier T1
    Holds when
    Google Cloud IAM. Enforcement depends on the principal type and the service; check the supported-services list.
  4. [4]Azure RBAC is additive: a caller's effective permissions are the union of their role assignments, inherited down the scope hierarchy.

    Source
    Microsoft: What is Azure role-based access control (Azure RBAC)?
    Checked
    13 October 2026, evidence tier T1
    Holds when
    Azure control-plane and data-plane actions granted through Azure RBAC role assignments.
  5. [5]Azure deny assignments can't be created directly by customers; they are created and managed by Azure, for example by deployment stacks and managed applications.

    Source
    Microsoft: Understand Azure deny assignments
    Checked
    13 October 2026, evidence tier T1
    Holds when
    Azure RBAC as documented at the time of checking. Azure Policy deny effects on resource configuration are a separate engine and are customer-authored.

Should you have any questions regarding this page, please contact us at solutions@alesanalytics.com.

Sources

Every link goes to the publisher: the provider's own documentation, the specification, or the official incident report. Where they change, they are the authority, not this page.

Next steps

Diagrams use the official Microsoft Azure, Microsoft Entra, AWS and Google Cloud architecture icons, as each vendor permits for documentation, and the Kubernetes icon set by the Kubernetes Authors under CC-BY-4.0. Product names are trademarks of their owners.