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

ComponenteFunción
Auth ServiceAutoridad de certificados. Emite certs TLS/SSH de corta duración, almacena logs de auditoría.
Proxy ServiceProxy HTTPS/SSH de cara pública. Maneja logins tsh, UI web y multiplexación ALPN en puerto 443.
SSH Node AgentDaemon teleport en cada servidor, registra sesiones con el Auth Service.
Access AgentsDaemons 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ísticaTeleportHashiCorp BoundaryStrongDMBastion HostTailscale SSHOpenSSH
AutenticaciónCerts de corta duraciónCredenciales dinámicasInyección de credencialesClaves estáticasWireGuard + certsClaves estáticas
SSO/IdPSí (SAML/OIDC/GitHub)ManualOIDCNo
Grabación sesionesCompleta (SSH+DB+K8s)NoNoNoNo
Acceso DBSí (protocolo nativo)Solo túnelNoNo
KubernetesSí (RBAC)ParcialNoNoNo
Access RequestsSí (integrado)NoNoNoNoNo
Open sourceSí (Apache 2.0)Sí (MPL 2.0)No (SaaS)N/AParcial

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

ProblemaSolución
Bucle de redirección en tsh loginVerificar que redirect_url del conector SSO coincida exactamente con la dirección pública del proxy
Nodos no aparecen en tsh lsVerificar que el agente alcance el Auth en puerto 443; revisar expiración del token de unión
Conexión a base de datos rechazadaConfirmar que db_service esté corriendo; revisar firewall entre agente y host de DB
kubectl exec prohibidoAgregar verbo exec al bloque kubernetes_resources del rol
Sesión no grabadaRevisar 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