Skip to main content

How to Install Azure CLI: A Practical Guide for Installation, Authentication, and Usage

Learn how to install Azure CLI on any platform, authenticate securely, and manage Azure resources efficiently. Discover commands, tips, and automation techniques to boost your productivity.
Sep 14, 2025  · 11 min read

Managing cloud infrastructure used to mean countless hours clicking through web portals and navigating endless menus. After months of frustration with manual processes, discovering the Azure CLI completely transformed how I approach cloud resource management. This isn't just another installation guide; it's your roadmap to mastering Microsoft's most powerful cross-platform tool for Azure administration.

> Start with Azure Cloud Shell for immediate access without installation complexity.

Hero image showing the Azure CLI running in terminal windows on Windows, macOS, and Linux, demonstrating its cross-platform capability.

The Azure CLI provides a consistent, powerful experience for managing Azure resources across all major operating systems.

What is Azure CLI?

The Azure CLI is the most direct way to control your cloud resources. It replaces the limitations of a web browser with a powerful, scriptable interface that speaks directly to the core Azure APIs. This gives you the power to automate at scale, with commands that are consistent and reliable across any operating system.

What I love about the CLI is how it lets me explore services when learning, then capture those exact steps into a script when I'm ready to build for real. The secret isn't memorizing commands—it's getting good at asking for help with az find or --help flags.

The Azure CLI leverages the Azure Resource Manager model, providing consistent access to all Azure services through a unified command structure. This architectural decision means that whether you're managing virtual machines, storage accounts, or complex networking configurations, you're working with the same underlying API that powers the Azure Portal itself.

Architecture diagram showing how Azure CLI commands are sent to the Azure Resource Manager (ARM) API, which then orchestrates actions across Azure services like Virtual Machines, Storage, and Networking.

All Azure CLI commands are unified through the Azure Resource Manager (ARM), the same engine that powers the Azure Portal.

Azure CLI vs Azure Portal

Having managed hundreds of Azure deployments through both interfaces, the CLI becomes indispensable for:

  • Automation and scalability: Scripts can manage dozens of resources simultaneously, something impossible through manual Portal interactions
  • Version control integration: Your infrastructure commands become code, tracked and reviewed like any other software artifact  
  • Cross-platform consistency: The same commands work identically across Windows, Linux, and macOS environments
  • Speed and efficiency: Experienced administrators can execute complex operations in seconds rather than minutes

How to Install Azure CLI

Your first step is getting the Azure CLI installed, but this is where I've seen a lot of people get tripped up. The right method for a personal Mac is totally different from what a big company needs for its locked-down Windows machines. Let's walk through the options so you can get it right the first time and avoid fighting with incompatible versions or frustrated IT admins. 

Installation on different platforms

Windows Installation Methods

Windows users have multiple installation paths, each suited to different organizational requirements:

WinGet Package Manager (Recommended for individual developers):

winget install -e --id Microsoft.AzureCLI

The command above uses Windows' modern package manager for automatic updates and clean installations.

MSI Installer (Best for enterprise deployments):

Download the latest MSI from the official Azure CLI download page and follow the installation wizard. This method provides the most control over installation directories and system integration.

PowerShell MSI Installation (Ideal for automated setup scripts):

$ProgressPreference = 'SilentlyContinue'; Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'; rm .\AzureCLI.msi

This PowerShell script downloads, installs, and cleans up the MSI package automatically.

> Use WinGet for development machines and MSI installers for production deployments

Linux and WSL Installation

Linux distributions require different package managers, and understanding your specific distribution prevents common installation failures:

Ubuntu/Debian (apt):

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

This installation script automatically configures Microsoft's package repository and installs Azure CLI.

Red Hat Enterprise Linux/CentOS Stream (dnf):

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo dnf install -y https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm
sudo dnf install azure-cli

These commands import Microsoft's signing key and configure the package repository before installation.

Universal Installation Script:

curl -L https://aka.ms/InstallAzureCli | bash

This script detects your distribution and uses the appropriate package manager automatically.

macOS Installation

macOS users benefit from Homebrew's package management:

brew update && brew install azure-cli

This command updates Homebrew package listings and installs the latest Azure CLI version.

For systems without Homebrew:

curl -L https://aka.ms/InstallAzureCli | bash

Docker Container Approach

Running Azure CLI in Docker containers provides complete isolation:

docker run -it mcr.microsoft.com/azure-cli:latest

This command launches an interactive container with Azure CLI pre-installed and configured.

Azure Cloud Shell: Zero-Installation Option

Azure Cloud Shell provides immediate CLI access without any local installation. This browser-based environment comes pre-configured with the latest Azure CLI version and includes additional tools like terraform, kubectl, and various text editors.

Checking Versions and Updates

Once installed, verify your setup with comprehensive version information:

az version

This command returns detailed JSON showing Azure CLI version, core components, and installed extensions.

Understanding this output helps troubleshoot compatibility issues and ensures your scripts target appropriate CLI versions. Microsoft publishes detailed release notes that document breaking changes and new features.

> Always check extension compatibility when upgrading Azure CLI versions.

Authenticating with Azure CLI

Authentication forms the security foundation of your Azure CLI experience, with recent policy changes fundamentally reshaping how organizations approach credential management. Modern authentication strategies must balance security requirements with operational efficiency, particularly as Microsoft enforces stronger authentication standards across all Azure services.

Authentication methods

Azure Cloud Shell auto-login

Cloud Shell automatically authenticates using your current Azure Portal session. This seamless integration eliminates authentication complexity for interactive use cases, making it perfect for learning and ad-hoc administrative tasks.

Interactive login

The standard authentication approach uses device code flow:

az login

This command opens your default browser for Microsoft Entra ID authentication with automatic MFA handling.

For headless environments:

az login --use-device-code

This command displays a device code for authentication at https://microsoft.com/devicelogin from any internet-connected device.

Managed identity authentication

Azure resources authenticate using managed identities:

az login --identity

This authentication method eliminates credential management overhead for applications running within Azure.

Service principal authentication

Legacy Credential-Based Approach (Now non-compliant without workload identity federation):

This password-based authentication method is the primary system impacted by the September 2025 MFA enforcement. Scripts using this method are likely to fail and must be updated.

az login --service-principal --username <app-id> --password <password> --tenant <tenant-id>

This command authenticates using application credentials for automated scenarios.

Starting October 1st, 2025, Microsoft's mandatory multi-factor authentication (MFA) enforcement will be active. If you use service principals with password-based authentication, your automation scripts will fail after this date. This is the most critical change to Azure CLI automation in years.

This security update fundamentally changes how organizations approach Azure CLI automation. It impacts service principal authentication patterns and requires a transition to workload identities for many automated scenarios.

> Your automation is at risk. Prioritize migrating to workload identity federation now to avoid service disruption on October 1st.

Infographic showing a 4-step MFA action plan for fixing Azure CLI authentication failures after Microsoft’s October 2025 MFA enforcement: 1. Audit failures and identify gaps, 2. Implement workload identity, 3. Test and validate, 4. Remediate fallbacks.

Your four-step action plan to fix failing automation and comply with the new MFA requirements.

Managing subscriptions

Production environments often require explicit subscription management:

az account list --output table
az account set --subscription "Your Subscription Name"

These commands list available subscriptions and set the default for subsequent commands.

Access tokens

Advanced scenarios require direct access token manipulation:

az account get-access-token

This command returns access tokens with expiration details for programmatic use.

Getting Started with Azure CLI Commands

Command mastery begins with understanding the CLI's organizational philosophy and discovery mechanisms. Rather than memorizing hundreds of commands, the key is learning to navigate Azure's vast service ecosystem efficiently through the CLI's intelligent help system.

Finding commands

The Azure CLI's discoverability features significantly reduce the learning curve:

az find "virtual machine"

AI-powered search locates relevant commands with usage examples.

For specific command details:

az vm create --help

This help command displays parameters, subgroups, and practical examples for immediate reference.

A terminal screenshot showing the helpful output of the 'az find' command, which provides relevant command suggestions and examples for creating a VM.

Use "az find" to get AI-powered suggestions and discover the exact command you need.

Command structure

Azure CLI follows a consistent hierarchical structure: az <group> <subgroup> <command> [parameters]

Example virtual machine creation:

az vm create --resource-group myResourceGroup --name myVM --image UbuntuLTS --admin-username azureuser --generate-ssh-keys

This command creates a virtual machine with specified configuration parameters.

Global arguments

Several arguments work across all commands:

- --output or -o: Controls output format (json, table, yaml, jsonc, tsv)

- --query: Filters results using JMESPath syntax

- --verbose: Provides detailed execution information

- --debug: Shows complete HTTP request/response details

> Use --output table for readable results and --output json for script processing

Interactive Mode and Productivity Features

Interactive mode transforms the command-line experience through intelligent assistance and contextual guidance. This approach bridges the gap between learning new commands and executing them confidently, providing real-time validation and suggestions that accelerate both the discovery and execution phases of CLI mastery.

Azure CLI interactive mode

Interactive mode provides an enhanced command-line experience:

az interactive

This command launches interactive mode with command completion, parameter hints, and contextual help.

An animated GIF demonstrating the Azure CLI's interactive mode, showing real-time command auto-completion and parameter suggestions.

Azure CLI's interactive mode provides intelligent suggestions, turning complex commands into a guided experience.

Tab completion

Enhanced productivity through shell integration:

Bash:

echo 'source /etc/bash_completion.d/azure-cli' >> ~/.bashrc

This command enables tab completion for Azure CLI commands in Bash.

PowerShell:

Register-ArgumentCompleter -Native -CommandName az -ScriptBlock { ... }

This PowerShell configuration enables tab completion for Azure CLI commands.

VS code integration

The Azure CLI extension for Visual Studio Code provides syntax highlighting, IntelliSense, and integrated terminal support.

Using Azure CLI for Resource Management

Now that you have the CLI installed and configured, it's time to put it to work. This section is where we move from theory to practice and start managing actual Azure resources. We'll go beyond single commands and look at the patterns you'll use every day to build, connect, and manage your cloud infrastructure.

Resource Group Operations

Resource groups serve as logical containers for Azure resources:

az group create --name myResourceGroup --location eastus
az group list --output table
az group delete --name myResourceGroup --yes --no-wait

These commands create, list, and delete resource groups with asynchronous processing.

Common resource creation

Virtual Machine Creation:

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image UbuntuLTS \
  --size Standard_B2s \
  --admin-username azureuser \
  --generate-ssh-keys

This command creates a Linux virtual machine with SSH key authentication.

Storage Account Creation:

az storage account create \
  --name mystorageaccount \
  --resource-group myResourceGroup \
  --location eastus \
  --sku Standard_LRS \
  --kind StorageV2

This command creates a general-purpose v2 storage account with locally redundant storage.

Query and Output Formatting

JMESPath queries filter and transform command outputs:

az vm list --query "[].{Name:name, PowerState:powerState}" --output table
az vm list --query "[?location=='eastus'].name" --output tsv

These JMESPath queries extract specific fields and filter results based on criteria.

> Master JMESPath queries to extract exactly the data you need from complex JSON responses.

Automating with Azure CLI

Automation transforms individual commands into repeatable, reliable workflows that scale beyond manual operations. The real magic happens when you stop thinking of CLI commands as one-off tasks and start building them into systems that handle everything from resource provisioning to disaster recovery.

I remember the first time I automated our weekly development environment refresh. What used to take three hours of manual clicking and waiting became a 15-minute script that I could run while grabbing coffee. That automation script saved our team dozens of hours each month and eliminated the inevitable human errors that crept into manual processes.

> Start automation small—automate your most repetitive daily tasks first, then expand into full infrastructure workflows

Scripting best practices

Robust script template with error handling and logging:

#!/bin/bash
set -euo pipefail  # Exit on errors, undefined variables, pipe failures

RESOURCE_GROUP="automation-rg"
LOCATION="eastus"
VM_NAME="automated-vm"

log() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
}

cleanup() {
    log "Cleaning up resources due to script failure"
    az group delete --name "$RESOURCE_GROUP" --yes --no-wait 2>/dev/null || true
}

trap cleanup ERR

log "Starting Azure resource provisioning"

if ! az group show --name "$RESOURCE_GROUP" &>/dev/null; then
    log "Creating resource group: $RESOURCE_GROUP"
    az group create --name "$RESOURCE_GROUP" --location "$LOCATION"
fi

VM_RESULT=$(az vm create \
    --resource-group "$RESOURCE_GROUP" \
    --name "$VM_NAME" \
    --image UbuntuLTS \
    --generate-ssh-keys \
    --output json)

PUBLIC_IP=$(echo "$VM_RESULT" | jq -r '.publicIpAddress')
log "VM created successfully. Public IP: $PUBLIC_IP"

This script template implements comprehensive error handling, logging, and cleanup mechanisms.

Security for automation

Never hardcode credentials in scripts. Use certificate-based authentication when possible:

# Certificate-based authentication (recommended)
export ARM_CLIENT_ID="your-client-id"
export ARM_CERTIFICATE_PATH="/path/to/certificate.pem"
export ARM_TENANT_ID="your-tenant-id"

az login --service-principal -u "$ARM_CLIENT_ID" --certificate-path "$ARM_CERTIFICATE_PATH" --tenant "$ARM_TENANT_ID"

# Secret-based authentication (use only when certificates aren't feasible)
export ARM_CLIENT_ID="your-client-id"
export ARM_CLIENT_SECRET="your-client-secret"
export ARM_TENANT_ID="your-tenant-id"

az login --service-principal -u "$ARM_CLIENT_ID" -p "$ARM_CLIENT_SECRET" --tenant "$ARM_TENANT_ID"

> Store sensitive values in Azure Key Vault and retrieve them programmatically. Prefer certificates over secrets for enhanced security.

CI/CD pipeline integration

Azure DevOps YAML pipeline example:

steps:
- task: AzureCLI@2
  displayName: 'Deploy Infrastructure'
  inputs:
    azureSubscription: 'Your-Service-Connection'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      set -euo pipefail
      echo "Creating resource group"
      az group create --name $(resourceGroup) --location $(location)

This pipeline configuration integrates Azure CLI commands into automated deployment pipelines.

A screenshot of an Azure DevOps pipeline log showing the Azure CLI task successfully completing with a green checkmark, demonstrating CI/CD integration.

A successful pipeline run in Azure DevOps executing Azure CLI commands to automate infrastructure deployment.

Azure CLI Common Issues and Troubleshooting

Even experienced practitioners encounter authentication failures, version mismatches, and configuration conflicts that can derail productivity. Understanding common failure patterns and their resolution strategies transforms these obstacles from workflow stoppers into minor inconveniences that you can resolve quickly and confidently.

Authentication failures

Problem: My automation scripts using az login --service-principal suddenly stopped working in September 2025 with authentication errors.

Solution: This is the direct result of the mandatory MFA enforcement. Password-based service principals are now considered a legacy and less secure authentication method. You must migrate your automation to a compliant pattern. Refer to our Navigating the September 2025 MFA Enforcement section above for the four-step action plan, focusing on implementing Workload Identity Federation or Certificate-Based Authentication.

Problem:  "Please run 'az login' to setup account" errors persist after successful login.

Solution: Clear authentication cache and re-authenticate:

One debugging session taught me the value of Azure CLI's --debug flag when facing authentication mysteries. What seemed like random login failures turned out to be corporate proxy issues interfering with token exchanges. The debug output revealed the exact HTTP endpoints being blocked, leading to a swift resolution that saved hours of speculation.

az account clear
az login --debug
az account list --output table

These commands clear cached credentials and provide verbose authentication debugging that reveals network, certificate, or policy issues.

Command not found issues

Problem: "az: command not found" after installation.

Solution: This classic error still catches seasoned developers off guard. I once lost a full hour to a 'command not found' error on a new Linux VM, only to realize I'd forgotten to run source ~/.bashrc after installation. It's a simple mistake that even veterans make.

which az
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc
source ~/.bashrc

These commands locate the Azure CLI installation and update shell PATH configuration.

Version compatibility

Problem: Scripts fail with "argument not recognized" errors.

Solution: Check CLI version compatibility and update as detailed in our version checking section:

az version

This command displays the current version. Refer to the installation section for platform-specific update commands.

Remember to keep Azure CLI updated to access new features and security patches.

Advanced Productivity Tips

Mastery extends beyond basic command execution to encompass sophisticated query techniques, configuration optimization, and performance enhancements that distinguish expert practitioners. These advanced patterns become essential when managing large-scale Azure environments where efficiency and precision directly impact operational success.

JMESPath query mastery

Advanced querying transforms data extraction:

az vm list --query "[?tags.Environment=='production' && tags.Team=='backend'].{Name:name, Location:location, Size:hardwareProfile.vmSize}"

This advanced query filters VMs by multiple tag conditions and extracts specific properties.

A side-by-side comparison showing the output of an Azure CLI command before and after using a JMESPath query. The 'before' is messy JSON, and the 'after' is a clean, readable table.

Transform overwhelming JSON output into clean, actionable data with a single JMESPath query.

Configuration management

Customize CLI behavior through persistent settings that save time on repetitive operations:

az configure --defaults output=table location=eastus group=myDefaultRG
az configure --list-defaults

These commands set default values for common parameters and display current configuration. These settings are stored in ~/.azure/config and apply only to your user profile, making them perfect for personalizing your Azure CLI experience without affecting other users on the same system.

Performance optimization

Large-scale operation enhancements:

az vm list --query "[].name" --output tsv | xargs -I {} -P 10 az vm show --name {} --resource-group myRG
az vm start --name myVM --resource-group myRG --no-wait

These commands execute operations in parallel and use asynchronous processing for improved performance.

Conclusion

Mastering Azure CLI streamlines cloud management, letting you control resources efficiently and automate workflows with confidence. Start with interactive mode or Azure Cloud Shell, then gradually use scripting for repeatable deployments.

To build your skills, check out Understanding Microsoft Azure or the Microsoft Azure Fundamentals (AZ-900) Track

Happy automating, and here’s to smarter, faster Azure workflows!

Install Azure CLI FAQs

How do I resolve SSL certificate errors during Azure CLI installation on corporate networks?

Corporate firewalls often intercept SSL connections. Configure your package manager to use corporate certificates or install via offline methods using downloaded packages.

Can I install Azure CLI without administrator privileges on Windows?

Yes, use the ZIP package distribution which extracts to a user directory. Add the extracted path to your user PATH environment variable.

What should I do if Azure CLI installation corrupts my existing Python environment?

Azure CLI includes its own Python runtime. If conflicts arise, uninstall and reinstall using the MSI installer on Windows or use package managers that handle dependencies properly on other platforms.

Do Azure CLI scripts work identically across Windows PowerShell and Linux bash?

Azure CLI commands are identical, but shell-specific features like variable syntax, path separators, and line continuation characters differ. Use cross-platform scripting languages like Python for maximum portability.

How do I handle path differences when sharing scripts between Windows and Unix systems?

Use forward slashes in Azure CLI parameters (Azure accepts them universally) and store system-specific paths in environment variables or configuration files.


Khalid Abdelaty's photo
Author
Khalid Abdelaty
LinkedIn

Data Engineer with Python and Azure cloud technologies expertise, specializing in building scalable data pipelines and ETL processes. Currently pursuing a B.S. in Computer Science at Tanta University. Certified DataCamp Data Engineer with demonstrated experience in data management and programming. Former Microsoft Data Engineer Intern at Digital Egypt Pioneers Initiative and Microsoft Beta Student Ambassador leading technical workshops and organizing hackathons.

Topics

Top DataCamp Courses

Track

Microsoft Azure Fundamentals (AZ-900)

0 min
Prepare for Microsoft’s Azure Fundamentals certification (AZ-900) by learning the fundamentals of Azure: computing, storage, and networking.
See DetailsRight Arrow
Start Course
See MoreRight Arrow
Related

blog

How to Learn Azure: A Beginner’s Guide to Microsoft’s Cloud Platform

Discover how to learn Azure, develop essential cloud computing skills, and apply them to real-world challenges. Explore beginner-friendly resources that make mastering Azure straightforward and achievable.
Josep Ferrer's photo

Josep Ferrer

14 min

cheat-sheet

Azure CLI Cheat sheet

With this Azure CLI cheat sheet, you'll have a handy reference guide to executing commands to create, manage, and deploy resources like virtual machines, databases, and storage accounts.
Richie Cotton's photo

Richie Cotton

Tutorial

How to Use the AWS CLI: Installation, Setup, and Commands

Learn to set up the AWS CLI on your system, configure it to work with your AWS account, and execute commands to interact with various AWS services!
Kenny Ang's photo

Kenny Ang

Tutorial

Azure App Service: A Complete Guide for Data Practitioners

This guide shows you how to deploy, manage, and optimize applications using Azure App Service—with practical tips for security, scaling, and cost-saving.
Kofi Glover's photo

Kofi Glover

Tutorial

Terraform on Azure: A Practical Beginner's Guide to IaC

This tutorial shows you how to use Terraform with Azure to automate infrastructure, improve consistency, and implement best practices for secure, scalable deployments.
Karen Zhang's photo

Karen Zhang

Tutorial

How to Set Up and Configure Azure: Beginner's Guide

Learn how to set up and configure Azure with this beginner's guide. Follow easy steps to navigate the Azure portal, create resources, and manage your cloud services.
Florin Angelescu's photo

Florin Angelescu

See MoreSee More