OpenClaw on Azure
A Linux VM with no public IP, Bastion for SSH, network security group rules, and the installer
The Azure page in the docs is the most deliberately locked-down of the hosting recipes: the VM has no public IP at all, SSH arrives only through Azure Bastion, and a network security group encodes that rule. It is also the one written entirely as CLI variables, so the same commands work in any region and resource group. Here is what the page builds, the variables and sizing it asks you to decide, why Bastion instead of a public address, and the install and verification at the end.
What it builds
- Networking: a virtual network with a VM subnet and a Bastion subnet of at least a slash-26, and a network security group whose rules allow VM SSH only from Bastion.
- Compute: a Linux VM with an SSH key and no public IP, sized with a burstable two-core SKU and a 64-gigabyte OS disk as the starting point, with the advice to start small for light use and scale up for more channels or heavier tool workloads.
- Bastion with its own public IP, the Azure CLI with the SSH extension for native tunnelling, and the two resource providers, compute and network, registered once.
Use Azure Bastion for SSH access (no public IP on the VM)
The variables
Sign in to the CLI and add the SSH extension; register the compute and network providers and wait until both report registered; then set the deployment variables, resource group, location, network and subnet names and prefixes, the security group, VM and admin names, and the Bastion names, adjusting names and address ranges to your environment. Pick an SSH public key, generating one if needed, and choose the VM size after listing the SKUs available in the region and checking your vCPU and disk quota, because an unavailable size means picking the closest SKU rather than waiting.
Why Bastion
- No public IP on the VM means no port 22 on the internet, no fail2ban and no brute-force surface; the Bastion subnet is the only path in, and the security group says so.
- Native SSH tunnelling through the CLI extension means the usual tunnel to the Gateway port still works, through Bastion rather than a public address.
- The install is the ordinary installer script, run on the VM, followed by the Gateway verification the other platform pages use.
OpenClaw on Google Cloud is the Google Cloud counterpart with Docker and a firewall review, and OpenClaw on Oracle Cloud the free ARM tier that reaches the same posture with Tailscale.
Where it fits
Azure is also where Teams lives, and a Gateway on an Azure VM is the natural host for a Teams bot with managed-identity authentication instead of a client secret; OpenClaw on Microsoft Teams explains that channel.
On Diali
Diali is the same posture without the resource group: no public IP on the instance, no port 22, a dashboard on HTTPS, and the operating done for you. Hosted OpenClaw on Diali is the assistant and What OpenClaw costs puts a VM beside a plan.
- No public IP; Bastion is the only way in.
- Everything is a variable, so the recipe moves between regions.
- Start small, list the SKUs, check the quota.
Stop reading about it, build one
Set up an agent, pick a channel, and have it working inside the app you already keep open.
