Skip to main content
Azure Resource Manager (ARM) is the management layer for provisioning, configuring, and managing Azure cloud resources. ARM provides a consistent management layer that enforces access control, dependency ordering, and idempotent deployments across the Azure platform. Below is a conceptual diagram showing how clients interact with ARM and how it orchestrates resource providers to create and manage managed resources.
A schematic titled "Azure Resource Manager" showing how Azure Portal, PowerShell, CLI and REST clients (via SDKs) connect to the Azure Resource Manager. Below it are icons for managed resources—Data Store, Web App, Virtual Machine, Service Management—and an authentication component.

How ARM works (control/management plane)

When you submit a management operation from the Azure Portal, Azure CLI, Azure PowerShell, REST API, or an SDK, the request follows this path:
  1. The client sends the request to Azure Resource Manager.
  2. ARM authenticates and validates the request, applies Role-Based Access Control (RBAC) checks, and enforces policy.
  3. ARM orchestrates calls to the appropriate resource providers to create, update, or delete resources.
  4. ARM maintains consistency, dependency resolution, and idempotency for deployments.
This flow ensures you have a single, consistent control plane for resource lifecycle management, separate from the data plane used for service-level operations (for example, reading or writing data to a storage account). Key capabilities ARM provides: Previously, Azure used the Azure Service Management (ASM or “classic”) model. ASM lacked many ARM features such as resource groups, RBAC, locks, and tags. ARM is the modern, recommended resource management model.

ARM templates: declarative infrastructure as code

ARM templates are JSON-based, declarative files that describe the resources you want to deploy and their configuration. You define the desired state, and ARM takes care of creating or updating resources to reach that state. Important characteristics of ARM templates:
  • Declarative: Describe what you want, not the steps to create it.
  • Idempotent: Running the same template repeatedly produces the same result.
  • Parameterized: Accept inputs to reuse templates across environments.
  • Composable: Support linked templates and nested deployments for complex scenarios.
  • Deployment scopes: Resource group, subscription, management group, and tenant.
A minimal ARM template contains these top-level sections:
  • $schema: URI that defines the template schema
  • contentVersion: Template version
  • parameters: Inputs to customize the deployment
  • variables: Derived or constant values used within the template
  • resources: The resource definitions to create or update
  • outputs: Values returned after deployment
Example: a simple ARM template that deploys a storage account (trimmed for brevity):

How to deploy ARM templates

You can deploy ARM templates from multiple tools and scopes. Common commands:

Bicep — a concise authoring experience

While ARM templates are JSON-based, Microsoft provides Bicep, a domain-specific language that offers a more concise and readable syntax and compiles to standard ARM JSON templates.
ARM is the control/management plane. Data plane operations (for example, storage data reads/writes) use separate service endpoints and authentication models; ARM controls resource creation, configuration, and permissions.

Summary

Azure Resource Manager is the central management plane for Azure. It validates and authorizes management requests, enforces RBAC and policies, and orchestrates resource provider operations to create, update, or delete resources. ARM templates (or Bicep) let you define those resources declaratively so you can automate, version, and reuse your infrastructure deployments.

Watch Video