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.coma la IP del proxy. - Puerto 443 (HTTPS/ALPN) abierto entrante al proxy.
- CLI
tshytctlinstaladas 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) | Sí | Sí | Manual | OIDC | No |
| Grabación sesiones | Completa (SSH+DB+K8s) | No | Sí | No | No | No |
| Acceso DB | Sí (protocolo nativo) | Sí | Sí | Solo túnel | No | No |
| Kubernetes | Sí (RBAC) | Parcial | Sí | 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 | Sí |
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.