Ir al contenido

Azure

Esta guía configura una VM Linux de Azure con la CLI de Azure, aplica el endurecimiento del Grupo de Seguridad de Red (NSG), configura Azure Bastion para el acceso SSH e instala OpenClaw.

  • Crear recursos de red (VNet, subredes, NSG) y proceso de Azure con la CLI de Azure
  • Aplicar reglas del Grupo de Seguridad de Red para que el SSH de la VM solo se permita desde Azure Bastion
  • Usar Azure Bastion para el acceso SSH (sin IP pública en la VM)
  • Instalar OpenClaw con el script de instalador
  • Verificar la puerta de enlace
  • Una suscripción de Azure con permiso para crear recursos de proceso y red
  • CLI de Azure instalada (consulte los pasos de instalación de la CLI de Azure si es necesario)
  • Un par de claves SSH (la guía cubre cómo generar una si es necesario)
  • ~20-30 minutos
  1. Iniciar sesión en la CLI de Azure

    Ventana de terminal
    az login
    az extension add -n ssh

    La extensión ssh es necesaria para el túnel SSH nativo de Azure Bastion.

  2. Registrar proveedores de recursos necesarios (una vez)

    Ventana de terminal
    az provider register --namespace Microsoft.Compute
    az provider register --namespace Microsoft.Network

    Verifique el registro. Espere hasta que ambos muestren Registered.

    Ventana de terminal
    az provider show --namespace Microsoft.Compute --query registrationState -o tsv
    az provider show --namespace Microsoft.Network --query registrationState -o tsv
  3. Establecer variables de implementación

    Ventana de terminal
    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"

    Ajuste los nombres y los rangos CIDR para que se adapten a su entorno. La subred de Bastion debe tener al menos /26.

  4. Seleccionar clave SSH

    Use su clave pública existente si tiene una:

    Ventana de terminal
    SSH_PUB_KEY="$(cat ~/.ssh/id_ed25519.pub)"

    Si aún no tiene una clave SSH, genere una:

    Ventana de terminal
    ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C "[email protected]"
    SSH_PUB_KEY="$(cat ~/.ssh/id_ed25519.pub)"
  5. Seleccionar el tamaño de la máquina virtual y el tamaño del disco del SO

    Ventana de terminal
    VM_SIZE="Standard_B2as_v2"
    OS_DISK_SIZE_GB=64

    Elija un tamaño de máquina virtual y un tamaño de disco del sistema operativo disponibles en su suscripción y región:

    • Comience con un tamaño más pequeño para un uso ligero y escale más tarde
    • Use más vCPU/RAM/disco para una automatización más pesada, más canales o cargas de trabajo de modelo/herramienta más grandes
    • Si un tamaño de máquina virtual no está disponible en su región o cuota de suscripción, elija la SKU disponible más cercana

    Enumere los tamaños de máquina virtual disponibles en su región de destino:

    Ventana de terminal
    az vm list-skus --location "${LOCATION}" --resource-type virtualMachines -o table

    Compruebe su uso y cuota actuales de vCPU y disco:

    Ventana de terminal
    az vm list-usage --location "${LOCATION}" -o table
  1. Create the resource group

    Ventana de terminal
    az group create -n "${RG}" -l "${LOCATION}"
  2. Crear el grupo de seguridad de red

    Cree el NSG y agregue reglas para que solo la subred de Bastion pueda acceder mediante SSH a la máquina virtual.

    Ventana de terminal
    az network nsg create \
    -g "${RG}" -n "${NSG_NAME}" -l "${LOCATION}"
    # Allow SSH from the Bastion subnet only
    az 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
    # Deny SSH from the public internet
    az 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
    # Deny SSH from other VNet sources
    az 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 22

    Las reglas se evalúan por prioridad (primero el número más bajo): el tráfico de Bastion se permite en 100, luego todo el otro SSH se bloquea en 110 y 120.

  3. Crear la red virtual y las subredes

    Cree la red virtual con la subred de la máquina virtual (NSG adjunto) y luego agregue la subred de Bastion.

    Ventana de terminal
    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}"
    # Attach the NSG to the VM subnet
    az network vnet subnet update \
    -g "${RG}" --vnet-name "${VNET_NAME}" \
    -n "${VM_SUBNET_NAME}" --nsg "${NSG_NAME}"
    # AzureBastionSubnet — name is required by Azure
    az network vnet subnet create \
    -g "${RG}" --vnet-name "${VNET_NAME}" \
    -n AzureBastionSubnet \
    --address-prefixes "${BASTION_SUBNET_PREFIX}"
  4. Crear la máquina virtual

    La máquina virtual no tiene una IP pública. El acceso SSH es exclusivamente a través de Azure Bastion.

    Ventana de terminal
    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 "" evita que se asigne una IP pública. --nsg "" omite la creación de un NSG por NIC (el NSG de nivel de subred maneja la seguridad).

    Reproducibilidad: El comando anterior usa latest para la imagen de Ubuntu. Para fijar una versión específica, enumere las versiones disponibles y reemplace latest:

    Ventana de terminal
    az vm image list \
    --publisher Canonical --offer ubuntu-24_04-lts \
    --sku server --all -o table
  5. Crear Azure Bastion

    Azure Bastion proporciona acceso SSH administrado a la máquina virtual sin exponer una IP pública. Se requiere la SKU Estándar con túnel para az network bastion ssh basado en CLI.

    Ventana de terminal
    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 true

    El aprovisionamiento de Bastion generalmente toma de 5 a 10 minutos, pero puede tomar hasta 15-30 minutos en algunas regiones.

  1. SSH into the VM through Azure Bastion

    Ventana de terminal
    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_ed25519
  2. Instalar OpenClaw (en el shell de la VM)

    Ventana de terminal
    curl -fsSL https://openclaw.ai/install.sh -o /tmp/install.sh
    bash /tmp/install.sh
    rm -f /tmp/install.sh

    El instalador instala Node LTS y las dependencias si aún no están presentes, instala OpenClaw e inicia el asistente de incorporación. Consulte Install para obtener más detalles.

  3. Verificar la puerta de enlace

    Una vez que se complete la incorporación:

    Ventana de terminal
    openclaw gateway status

    La mayoría de los equipos de Azure empresariales ya tienen licencias de GitHub Copilot. Si ese es su caso, recomendamos elegir el proveedor de GitHub Copilot en el asistente de incorporación de OpenClaw. Consulte Proveedor de GitHub Copilot.

Azure Bastion SKU Estándar cuesta aproximadamente 140 $ / mes y la VM (Standard_B2as_v2) cuesta aproximadamente 55 $ / mes.

Para reducir los costos:

  • Desasigne la VM cuando no esté en uso (detiene la facturación de cómputo; los cargos de disco permanecen). OpenClaw Gateway no será accesible mientras la VM está desasignada: reiníciela cuando necesite que vuelva a estar activa:

    Ventana de terminal
    az vm deallocate -g "${RG}" -n "${VM_NAME}"
    az vm start -g "${RG}" -n "${VM_NAME}" # restart later
  • Elimine Bastion cuando no sea necesario y vuelva a crearlo cuando necesite acceso SSH. Bastion es el componente de costo más alto y tarda solo unos minutos en aprovisionarse.

  • Use la SKU Básica de Bastion (~38 $ / mes) si solo necesita SSH basado en portal y no requiere túnel CLI (az network bastion ssh).

Para eliminar todos los recursos creados por esta guía:

Ventana de terminal
az group delete -n "${RG}" --yes --no-wait

Esto elimina el grupo de recursos y todo lo que contiene (VM, VNet, NSG, Bastion, IP pública).