TL;DR — Resumen Rápido

Guía completa de Gravitational Teleport para SSH seguro, Kubernetes, bases de datos y apps. Certificados, SSO, RBAC, auditoría y Access Requests explicados.

Teleport de Gravitational es una plataforma open-source de acceso a infraestructura que reemplaza claves SSH estáticas, VPNs y jump hosts con certificados de corta duración, SSO y un registro de auditoría completo. Esta guía cubre cada capa: arquitectura, instalación, inscripción de nodos, RBAC, SSH, bases de datos, Kubernetes y acceso a aplicaciones.

Requisitos Previos

  • Servidor Linux (Ubuntu 22.04+ o RHEL 8+) con FQDN público para el Proxy Service.
  • Registro DNS A apuntando teleport.ejemplo.com a la IP del proxy.
  • Puerto 443 (HTTPS/ALPN) abierto entrante al proxy.
  • CLI tsh y tctl instaladas en la estación de trabajo.
  • Proveedor de identidad (GitHub, Okta, Azure AD o Google Workspace) para SSO — opcional en laboratorio.

Arquitectura de Teleport

Componente Función
Auth Service Autoridad de certificados. Emite certs TLS/SSH de corta duración, almacena logs de auditoría.
Proxy Service Proxy HTTPS/SSH de cara pública. Maneja logins tsh, UI web y multiplexación ALPN en puerto 443.
SSH Node Agent Daemon teleport en cada servidor, registra sesiones con el Auth Service.
Access Agents Daemons especializados: db_service, kube_service, app_service, windows_desktop_service.

La autenticación por certificados reemplaza las claves SSH. Cuando un usuario inicia sesión con tsh, el Auth Service emite un certificado SSH válido por max_session_ttl (típicamente 8–12 horas). No se distribuyen ni rotan claves privadas de larga duración.


Instalación

Autoalojado: apt/yum

# Ubuntu/Debian
curl https://goteleport.com/static/install.sh | bash -s 15.0.0
apt-get install teleport

# RHEL/Rocky Linux
yum install teleport

Kubernetes (Helm)

helm repo add teleport https://charts.releases.teleport.dev
helm install teleport-cluster teleport/teleport-cluster \
  --namespace teleport --create-namespace \
  --set clusterName=teleport.ejemplo.com \
  --set acme=true \
  --set acmeEmail=admin@ejemplo.com

Teleport Cloud

Servicio gestionado de Proxy+Auth. Solo se despliegan agentes (SSH, DB, Kube) en la infraestructura propia y se conectan al tenant cloud en tuempresa.teleport.sh.


Configuración Inicial y TLS con ACME

teleport configure \
  --cluster-name=teleport.ejemplo.com \
  --public-addr=teleport.ejemplo.com:443 \
  --acme \
  --acme-email=admin@ejemplo.com \
  -o /etc/teleport/teleport.yaml

systemctl enable --now teleport

# Crear primer usuario administrador
tctl users add admin --roles=editor,access --logins=root,ubuntu

Agregar Nodos

Unión por Token

# Crear token de corta duración en el auth server
tctl tokens add --type=node --ttl=5m

# En el nuevo servidor
teleport start \
  --roles=node \
  --token=<token> \
  --auth-server=teleport.ejemplo.com:443

Unión EC2/IAM (AWS — Sin Token)

Teleport verifica el documento de identidad de instancia AWS. No se necesitan tokens estáticos. El mismo mecanismo existe para Azure Managed Identity y GCP Instance Identity.


Autenticación: SSO y MFA

Conector GitHub

kind: github
version: v3
metadata:
  name: github
spec:
  client_id: "ID_APP_OAUTH_GITHUB"
  client_secret: "SECRET_APP_OAUTH_GITHUB"
  redirect_url: "https://teleport.ejemplo.com/v1/webapi/github/callback"
  teams_to_roles:
    - organization: mi-org
      team: devops
      roles: ["devops"]

Forzar MFA

kind: cluster_auth_preference
version: v2
metadata:
  name: cluster-auth-preference
spec:
  type: github
  second_factor: "on"
  webauthn:
    rp_id: "teleport.ejemplo.com"

second_factor: "on" acepta TOTP (Google Authenticator), WebAuthn (YubiKey, Touch ID) o passkeys.


RBAC: Roles y Etiquetas

kind: role
version: v7
metadata:
  name: devops
spec:
  options:
    max_session_ttl: "12h"
    record_session:
      default: "best_effort"
  allow:
    logins: ["ubuntu", "ec2-user"]
    node_labels:
      env: ["production", "staging"]
      team: ["devops"]
  deny:
    node_labels:
      restricted: ["true"]

Aplicar con tctl create rol.yaml. El bloque request habilita Access Requests — los desarrolladores pueden solicitar acceso temporal a producción con una aprobación.


Acceso SSH con tsh

# Login (abre navegador para SSO + MFA)
tsh login --proxy=teleport.ejemplo.com

# Listar nodos accesibles
tsh ls

# Conectarse a un nodo
tsh ssh ubuntu@servidor-web-01

# Transferencia de archivos
tsh scp ./deploy.sh ubuntu@servidor-web-01:/tmp/

# Reenvío de puertos
tsh ssh -L 5432:localhost:5432 ubuntu@servidor-db

# Comando en múltiples nodos
tsh ssh --labels env=staging "systemctl restart nginx"

La grabación de sesiones es automática. Reproducir desde la UI web o CLI:

tsh play <id-sesion>

Acceso a Bases de Datos

tsh db login prod-postgres --db-user=appuser --db-name=midb
tsh db connect prod-postgres   # abre psql
tsh db connect prod-mysql      # abre mysql CLI
tsh db connect mongo-atlas --db-user=lector
tsh db connect redis-cache

Teleport actúa como proxy con reconocimiento de protocolo — entiende el protocolo de red nativo de la base de datos sin exponer sus puertos.


Acceso a Kubernetes

tsh kube ls
tsh kube login produccion
kubectl get pods -n default

El rol YAML define recursos Kubernetes permitidos con verbos específicos (get, list, exec). La impersonación aplica los permisos del usuario Teleport al contexto de Kubernetes.


Acceso a Aplicaciones

app_service:
  enabled: true
  apps:
    - name: grafana
      uri: http://grafana.interno:3000
      labels:
        env: production

Los usuarios acceden a https://grafana.teleport.ejemplo.com. Teleport agrega un encabezado JWT con la identidad del usuario. SSO protege cada app interna sin modificarla.


Registro de Auditoría

# Consultar log de auditoría
tctl audit events --event-type=session.start --format=json

# Rango de fechas
tctl audit events \
  --from="2026-03-01" \
  --to="2026-03-23" \
  --event-type=db.session.query

Backends de almacenamiento: S3 (con Athena), GCS (con BigQuery) o DynamoDB.


Access Requests: Escalada de Privilegios Justo a Tiempo

# Solicitar rol de producción
tsh request create --roles=production-access \
  --reason="Investigando incidente P1 #4821"

# Aprobar
tsh request review --approve <id-solicitud>

# Denegar
tsh request review --deny <id-solicitud>

Teleport incluye plugins para Slack, PagerDuty, ServiceNow y Jira. Las aprobaciones se pueden hacer directamente desde Slack.


Teleport vs Alternativas

Característica Teleport HashiCorp Boundary StrongDM Bastion Host Tailscale SSH OpenSSH
Autenticación Certs de corta duración Credenciales dinámicas Inyección de credenciales Claves estáticas WireGuard + certs Claves estáticas
SSO/IdP Sí (SAML/OIDC/GitHub) Manual OIDC No
Grabación sesiones Completa (SSH+DB+K8s) No No No No
Acceso DB Sí (protocolo nativo) Solo túnel No No
Kubernetes Sí (RBAC) Parcial No No No
Access Requests Sí (integrado) No No No No No
Open source Sí (Apache 2.0) Sí (MPL 2.0) No (SaaS) N/A Parcial

Gotchas y Casos Límite

  • La deriva de reloj mata los certificados. Auth, Proxy y todos los nodos necesitan sincronización NTP dentro de ±30 segundos.
  • La multiplexación ALPN requiere el puerto 443. Dividir puertos rompe algunas características de proxy a proxy.
  • Wildcard TLS para acceso a apps. Los subdominios de aplicaciones requieren certificado wildcard o desafío ACME por app.
  • EC2 IAM join necesita IMDSv2. Verificar que el endpoint de metadata de instancia sea accesible.
  • Impersonación de Kubernetes. El agente kube_service necesita permisos ClusterRole de impersonate.

Solución de Problemas

Problema Solución
Bucle de redirección en tsh login Verificar que redirect_url del conector SSO coincida exactamente con la dirección pública del proxy
Nodos no aparecen en tsh ls Verificar que el agente alcance el Auth en puerto 443; revisar expiración del token de unión
Conexión a base de datos rechazada Confirmar que db_service esté corriendo; revisar firewall entre agente y host de DB
kubectl exec prohibido Agregar verbo exec al bloque kubernetes_resources del rol
Sesión no grabada Revisar política record_session; verificar permisos del bucket S3 para el rol IAM del Auth Service

Resumen

  • Autoridad de certificados — reemplaza claves SSH estáticas con certs que expiran automáticamente.
  • SSO + MFA — GitHub, Okta, Azure AD, Google Workspace; TOTP, WebAuthn, llaves de hardware.
  • RBAC con etiquetas de nodo — roles coinciden con servidores por etiquetas de entorno/equipo.
  • Auditoría completa — cada sesión grabada como eventos estructurados + video, almacenados en S3/GCS.
  • Bases de datos y Kubernetes — proxy con protocolo nativo sin exponer puertos ni distribuir credenciales.
  • Access Requests — escalada de privilegios justo a tiempo con flujos de aprobación en Slack/PagerDuty.
  • Open source — Apache 2.0, autoalojable o gestionado via Teleport Cloud.

Artículos Relacionados