Hosting
Azure
Configura una máquina virtual Linux de Azure con la CLI de Azure, aplica medidas de protección mediante un grupo de seguridad de red (NSG), configura Azure Bastion para el acceso por SSH e instala OpenClaw.
Lo que harás
- Crear recursos de red de Azure (VNet, subredes y NSG) y recursos de proceso con la CLI de Azure
- Aplicar reglas de NSG para permitir el acceso SSH a la máquina virtual únicamente desde Azure Bastion
- Usar Azure Bastion para el acceso por SSH (sin una dirección IP pública en la máquina virtual)
- Instalar OpenClaw con el script de instalación
- Verificar el Gateway
Lo que necesitas
- Una suscripción de Azure con permisos para crear recursos de proceso y de red
- La CLI de Azure instalada (consulta los pasos para instalar la CLI de Azure)
- Un par de claves SSH (esta guía explica cómo generar uno si es necesario)
- Entre 20 y 30 minutos aproximadamente
Configurar la implementación
Iniciar sesión en la CLI de Azure
az loginaz extension add -n sshLa extensión ssh es necesaria para la tunelización SSH nativa de Azure Bastion.
Registrar los proveedores de recursos necesarios (una sola vez)
az provider register --namespace Microsoft.Computeaz provider register --namespace Microsoft.NetworkVerifica el registro; espera hasta que ambos muestren Registered.
az provider show --namespace Microsoft.Compute --query registrationState -o tsvaz provider show --namespace Microsoft.Network --query registrationState -o tsvDefinir las variables de implementación
RG="rg-openclaw"LOCATION="westus2"VNET_NAME="vnet-openclaw"VNET_PREFIX="10.40.0.0/16"VM_SUBNET_NAME="snet-openclaw-vm"VM_SUBNET_PREFIX="10.40.2.0/24"BASTION_SUBNET_PREFIX="10.40.1.0/26"NSG_NAME="nsg-openclaw-vm"VM_NAME="vm-openclaw"ADMIN_USERNAME="openclaw"BASTION_NAME="bas-openclaw"BASTION_PIP_NAME="pip-openclaw-bastion"Ajusta los nombres y los intervalos CIDR a tu entorno. La subred de Bastion debe ser al menos /26.
Seleccionar una clave SSH
Usa tu clave pública existente si tienes una:
SSH_PUB_KEY="$(cat ~/.ssh/id_ed25519.pub)"De lo contrario, genera una:
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C "you@example.com"SSH_PUB_KEY="$(cat ~/.ssh/id_ed25519.pub)"Seleccionar el tamaño de la máquina virtual y del disco del sistema operativo
VM_SIZE="Standard_B2as_v2"OS_DISK_SIZE_GB=64- Comienza con un tamaño menor para un uso ligero y amplíalo más adelante.
- Usa más vCPU, RAM y espacio en disco para automatizaciones más exigentes, más canales o cargas de trabajo mayores de modelos o herramientas.
- Si un tamaño no está disponible en tu región o para la cuota de tu suscripción, elige la SKU disponible más parecida.
Enumera los tamaños de máquina virtual disponibles en la región de destino:
az vm list-skus --location "${LOCATION}" --resource-type virtualMachines -o tableComprueba el uso y la cuota actuales de vCPU y disco:
az vm list-usage --location "${LOCATION}" -o tableImplementar los recursos de Azure
Crear el grupo de recursos
az group create -n "${RG}" -l "${LOCATION}"Crear el grupo de seguridad de red
Crea el NSG y añade reglas para que únicamente la subred de Bastion pueda conectarse mediante SSH a la máquina virtual.
az network nsg create \ -g "${RG}" -n "${NSG_NAME}" -l "${LOCATION}" # Permitir SSH únicamente desde la subred de Bastionaz network nsg rule create \ -g "${RG}" --nsg-name "${NSG_NAME}" \ -n AllowSshFromBastionSubnet --priority 100 \ --access Allow --direction Inbound --protocol Tcp \ --source-address-prefixes "${BASTION_SUBNET_PREFIX}" \ --destination-port-ranges 22 # Denegar SSH desde la red pública de Internetaz network nsg rule create \ -g "${RG}" --nsg-name "${NSG_NAME}" \ -n DenyInternetSsh --priority 110 \ --access Deny --direction Inbound --protocol Tcp \ --source-address-prefixes Internet \ --destination-port-ranges 22 # Denegar SSH desde otros orígenes de la VNetaz network nsg rule create \ -g "${RG}" --nsg-name "${NSG_NAME}" \ -n DenyVnetSsh --priority 120 \ --access Deny --direction Inbound --protocol Tcp \ --source-address-prefixes VirtualNetwork \ --destination-port-ranges 22Las reglas se evalúan por prioridad, empezando por el número más bajo: el tráfico de Bastion se permite con la prioridad 100 y, después, el resto del tráfico SSH se bloquea con las prioridades 110 y 120.
Crear la red virtual y las subredes
Crea la VNet con la subred de la máquina virtual (con el NSG asociado) y, a continuación, añade la subred de Bastion.
az network vnet create \ -g "${RG}" -n "${VNET_NAME}" -l "${LOCATION}" \ --address-prefixes "${VNET_PREFIX}" \ --subnet-name "${VM_SUBNET_NAME}" \ --subnet-prefixes "${VM_SUBNET_PREFIX}" # Asociar el NSG a la subred de la máquina virtualaz network vnet subnet update \ -g "${RG}" --vnet-name "${VNET_NAME}" \ -n "${VM_SUBNET_NAME}" --nsg "${NSG_NAME}" # AzureBastionSubnet: Azure exige este nombre exactoaz network vnet subnet create \ -g "${RG}" --vnet-name "${VNET_NAME}" \ -n AzureBastionSubnet \ --address-prefixes "${BASTION_SUBNET_PREFIX}"Crear la máquina virtual
La máquina virtual no recibe ninguna dirección IP pública. El acceso por SSH se realiza exclusivamente mediante Azure Bastion.
az vm create \ -g "${RG}" -n "${VM_NAME}" -l "${LOCATION}" \ --image "Canonical:ubuntu-24_04-lts:server:latest" \ --size "${VM_SIZE}" \ --os-disk-size-gb "${OS_DISK_SIZE_GB}" \ --storage-sku StandardSSD_LRS \ --admin-username "${ADMIN_USERNAME}" \ --ssh-key-values "${SSH_PUB_KEY}" \ --vnet-name "${VNET_NAME}" \ --subnet "${VM_SUBNET_NAME}" \ --public-ip-address "" \ --nsg ""--public-ip-address "" impide que se asigne una dirección IP pública. --nsg "" omite un NSG por NIC, ya que el NSG de la subred se encarga de la seguridad.
Para fijar una versión específica de la imagen de Ubuntu en lugar de latest, enumera primero las versiones disponibles:
az vm image list \ --publisher Canonical --offer ubuntu-24_04-lts \ --sku server --all -o tableCrear Azure Bastion
Azure Bastion proporciona acceso SSH administrado sin exponer una dirección IP pública en la máquina virtual. Para usar az network bastion ssh desde la CLI, se requiere la SKU Standard con la tunelización habilitada.
az network public-ip create \ -g "${RG}" -n "${BASTION_PIP_NAME}" -l "${LOCATION}" \ --sku Standard --allocation-method Static az network bastion create \ -g "${RG}" -n "${BASTION_NAME}" -l "${LOCATION}" \ --vnet-name "${VNET_NAME}" \ --public-ip-address "${BASTION_PIP_NAME}" \ --sku Standard --enable-tunneling trueEl aprovisionamiento de Bastion suele tardar entre 5 y 10 minutos, pero puede tardar entre 15 y 30 minutos en algunas regiones.
Instalar OpenClaw
Conectarse por SSH a la máquina virtual mediante Azure Bastion
VM_ID="$(az vm show -g "${RG}" -n "${VM_NAME}" --query id -o tsv)" az network bastion ssh \ --name "${BASTION_NAME}" \ --resource-group "${RG}" \ --target-resource-id "${VM_ID}" \ --auth-type ssh-key \ --username "${ADMIN_USERNAME}" \ --ssh-key ~/.ssh/id_ed25519Instalar OpenClaw (en el shell de la máquina virtual)
curl -fsSL https://openclaw.ai/install.sh -o /tmp/install.shbash /tmp/install.shrm -f /tmp/install.shEl instalador instala Node y las dependencias si aún no están presentes, instala OpenClaw e inicia la incorporación. Consulta Instalación para obtener más información.
Verificar el Gateway
Una vez finalizada la incorporación:
openclaw gateway statusSi tu organización ya dispone de licencias de GitHub Copilot, puedes elegir el proveedor GitHub Copilot durante la incorporación en lugar de usar una clave de API de modelo independiente. Consulta Proveedor GitHub Copilot.
Consideraciones sobre los costos
Costos mensuales aproximados (comprueba los precios actuales en la calculadora de precios de Azure, ya que las tarifas varían según la región y cambian con el tiempo):
- SKU Standard de Azure Bastion: aproximadamente 140 USD al mes
- Máquina virtual (
Standard_B2as_v2): aproximadamente 55 USD al mes
Para reducir los costos:
-
Desasigna la máquina virtual cuando no esté en uso. Esto detiene la facturación del proceso (se siguen aplicando los cargos del disco). No se puede acceder al Gateway mientras la máquina virtual está desasignada.
bash az vm deallocate -g "${RG}" -n "${VM_NAME}"az vm start -g "${RG}" -n "${VM_NAME}" # reiniciar más adelante -
Elimina Bastion cuando no sea necesario y vuelve a crearlo cuando necesites acceso SSH de nuevo; es el componente de mayor costo y se aprovisiona en unos minutos.
-
Usa la SKU Basic de Bastion (aproximadamente 38 USD al mes) si solo necesitas acceso SSH desde el portal y no necesitas tunelización mediante la CLI (
az network bastion ssh).
Limpieza
Elimina todos los recursos creados mediante esta guía:
az group delete -n "${RG}" --yes --no-waitEsto elimina el grupo de recursos y todo su contenido (máquina virtual, VNet, NSG, Bastion y dirección IP pública).
Próximos pasos
- Configura canales de mensajería: Canales
- Empareja dispositivos locales como nodos: Nodos
- Configura el Gateway: Configuración del Gateway
- Más información sobre la implementación en Azure con el proveedor de modelos GitHub Copilot: OpenClaw en Azure con GitHub Copilot