Saltar a contenido

Seguridad de agentes remotos

Buenas prácticas y configuraciones de seguridad para proteger tus agentes remotos.

Modelo de seguridad

graph LR
    A[Nexus Cloud] -->|TLS 1.3| B[Agente Remoto]
    B -->|Autenticación| C[Token]
    B -->|Autorización| D[Capacidades]
    B -->|Aislamiento| E[Sandboxing]

Comunicación segura

TLS/SSL

Toda comunicación entre Nexus y el agente usa TLS 1.3:

  • Certificados validados
  • Perfect Forward Secrecy
  • Sin protocolos obsoletos

Verificar configuración

# Ver estado de conexión
docker logs nexus-agent | grep "TLS"

# Output esperado:
# [INFO] TLS connection established (TLS 1.3)
# [INFO] Certificate verified: *.nexus.app

Gestión de tokens

Rotación de tokens

Rota tokens periódicamente:

  1. En Nexus, ve a Agentes remotos
  2. Selecciona el agente
  3. Haz clic en Rotar token
  4. Actualiza el token en tu configuración
  5. Reinicia el agente

Tokens con alcance limitado

Crea tokens con permisos específicos:

┌─────────────────────────────────────────────────────────────────┐
│ Permisos del token                                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│ ☑️ Ejecutar tareas                                              │
│ ☑️ Reportar estado                                              │
│ ☐ Acceso a secrets                                              │
│ ☐ Modificar configuración                                       │
│                                                                 │
│ Proyectos permitidos:                                           │
│ ☑️ Proyecto A                                                   │
│ ☑️ Proyecto B                                                   │
│ ☐ Proyecto C                                                    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Aislamiento de ejecución

Sandboxing con contenedores

Cada trabajo se ejecuta en un contenedor aislado:

# config.yaml
execution:
  isolation: container
  container:
    image: nexusai/sandbox:latest
    network: none  # Sin acceso a red por defecto
    readonly_rootfs: true
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE  # Solo si necesario

Límites de recursos

execution:
  limits:
    memory: "512Mi"
    cpu: "0.5"
    time: "5m"
    processes: 100
    file_descriptors: 1024

Restricciones de red

Firewall

Configura reglas de firewall:

# Solo permite conexión saliente a Nexus
iptables -A OUTPUT -d api.nexus.app -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -j DROP

# O con UFW
ufw allow out to api.nexus.app port 443
ufw default deny outgoing

Redes internas permitidas

security:
  allowed_networks:
    - "10.0.0.0/8"      # Red interna
    - "172.16.0.0/12"   # Docker

  blocked_ips:
    - "0.0.0.0/8"       # Invalid
    - "169.254.0.0/16"  # Link-local

Comandos restringidos

Lista negra de comandos

security:
  blocked_commands:
    # Comandos peligrosos
    - "rm -rf /"
    - "rm -rf /*"
    - "dd if=/dev/zero"
    - ":(){ :|:& };:"  # Fork bomb

    # Comandos de sistema
    - "shutdown"
    - "reboot"
    - "init"

    # Modificación de red
    - "iptables"
    - "route"

Lista blanca (más seguro)

security:
  allowed_commands:
    - "psql"       # PostgreSQL
    - "mysql"      # MySQL
    - "curl"       # HTTP requests
    - "jq"         # JSON processing
    - "python"     # Scripts

Secrets

Nunca en variables de entorno

# ❌ MAL
environment:
  DB_PASSWORD: "secreto123"

# ✅ BIEN - usar secrets manager
secrets:
  - name: DB_PASSWORD
    source: vault
    path: database/prod/password

Integración con Vault

secrets:
  provider: hashicorp-vault
  config:
    address: https://vault.internal:8200
    auth_method: kubernetes
    role: nexus-agent

Auditoría

Logs de seguridad

logging:
  security_events:
    level: info
    destination:
      - syslog
      - /var/log/nexus-agent/security.log
    events:
      - authentication
      - authorization
      - command_execution
      - network_access

Eventos registrados

Evento Descripción
auth.success Conexión autenticada
auth.failure Fallo de autenticación
exec.start Inicio de ejecución
exec.command Comando ejecutado
exec.blocked Comando bloqueado
network.request Petición de red

Alertas de seguridad

Configura alertas para eventos sospechosos:

┌─────────────────────────────────────────────────────────────────┐
│ Alertas de seguridad                                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│ ☑️ Múltiples fallos de autenticación                            │
│ ☑️ Comandos bloqueados ejecutados                               │
│ ☑️ Acceso a redes no permitidas                                 │
│ ☑️ Uso excesivo de recursos                                     │
│ ☑️ Desconexión prolongada                                       │
│                                                                 │
│ Notificar a:                                                    │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ security@empresa.com, #seguridad (Slack)                    │ │
│ └─────────────────────────────────────────────────────────────┘ │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Checklist de seguridad

Antes de poner en producción:

  • [ ] TLS habilitado y verificado
  • [ ] Token con permisos mínimos necesarios
  • [ ] Sandboxing configurado
  • [ ] Límites de recursos establecidos
  • [ ] Comandos peligrosos bloqueados
  • [ ] Redes restringidas
  • [ ] Logs de auditoría activos
  • [ ] Alertas configuradas
  • [ ] Plan de rotación de tokens

Siguiente: Estadísticas - Monitoreo y métricas.