TL;DR — Resumo Rápido
Guia completo do Gravitational Teleport para SSH seguro, Kubernetes, bancos de dados e apps. Certificados, SSO, RBAC, logs de auditoria e Access Requests.
O Teleport da Gravitational é uma plataforma open-source de acesso à infraestrutura que substitui chaves SSH estáticas, VPNs e jump hosts por certificados de curta duração, SSO e uma trilha de auditoria completa. Este guia cobre cada camada: arquitetura, instalação, inscrição de nós, RBAC, SSH, bancos de dados, Kubernetes e acesso a aplicações.
Pré-requisitos
- Servidor Linux (Ubuntu 22.04+ ou RHEL 8+) com FQDN público para o Proxy Service.
- Registro DNS A apontando
teleport.exemplo.compara o IP do proxy. - Porta 443 (HTTPS/ALPN) aberta para entrada no proxy.
- CLIs
tshetctlinstaladas na estação de trabalho. - Provedor de identidade (GitHub, Okta, Azure AD ou Google Workspace) para SSO — opcional em laboratório.
Arquitetura do Teleport
| Componente | Função |
|---|---|
| Auth Service | Autoridade de certificados. Emite certs TLS/SSH de curta duração, armazena logs de auditoria. |
| Proxy Service | Proxy HTTPS/SSH público. Gerencia logins tsh, UI web e multiplexação ALPN na porta 443. |
| SSH Node Agent | Daemon teleport em cada servidor, registra sessões com o Auth Service. |
| Access Agents | Daemons especializados: db_service, kube_service, app_service, windows_desktop_service. |
A autenticação por certificados substitui as chaves SSH. Quando um usuário faz login com tsh, o Auth Service emite um certificado SSH válido por max_session_ttl (tipicamente 8–12 horas). Nenhuma chave privada de longa duração é distribuída ou rotacionada.
Instalação
Auto-hospedado: 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.exemplo.com \
--set acme=true \
--set acmeEmail=admin@exemplo.com
Teleport Cloud
Serviço gerenciado de Proxy+Auth. Apenas agentes (SSH, DB, Kube) são implantados na infraestrutura própria e conectados ao tenant cloud em suaempresa.teleport.sh.
Configuração Inicial e TLS com ACME
teleport configure \
--cluster-name=teleport.exemplo.com \
--public-addr=teleport.exemplo.com:443 \
--acme \
--acme-email=admin@exemplo.com \
-o /etc/teleport/teleport.yaml
systemctl enable --now teleport
# Criar primeiro usuário administrador
tctl users add admin --roles=editor,access --logins=root,ubuntu
Adicionando Nós
Ingresso por Token
# Criar token de curta duração no auth server
tctl tokens add --type=node --ttl=5m
# No novo servidor
teleport start \
--roles=node \
--token=<token> \
--auth-server=teleport.exemplo.com:443
Ingresso EC2/IAM (AWS — Sem Token)
O Teleport verifica o documento de identidade de instância AWS. Não são necessários tokens estáticos. O mesmo mecanismo existe para Azure Managed Identity e GCP Instance Identity.
Autenticação: SSO e 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.exemplo.com/v1/webapi/github/callback"
teams_to_roles:
- organization: minha-org
team: devops
roles: ["devops"]
Forçar MFA
kind: cluster_auth_preference
version: v2
metadata:
name: cluster-auth-preference
spec:
type: github
second_factor: "on"
webauthn:
rp_id: "teleport.exemplo.com"
second_factor: "on" aceita TOTP (Google Authenticator), WebAuthn (YubiKey, Touch ID) ou passkeys.
RBAC: Papéis e Rótulos
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 com tctl create papel.yaml. O bloco request habilita Access Requests — desenvolvedores podem solicitar acesso temporário à produção com uma aprovação.
Acesso SSH com tsh
# Login (abre navegador para SSO + MFA)
tsh login --proxy=teleport.exemplo.com
# Listar nós acessíveis
tsh ls
# Conectar a um nó
tsh ssh ubuntu@servidor-web-01
# Transferência de arquivos
tsh scp ./deploy.sh ubuntu@servidor-web-01:/tmp/
# Encaminhamento de porta
tsh ssh -L 5432:localhost:5432 ubuntu@servidor-db
# Comando em múltiplos nós
tsh ssh --labels env=staging "systemctl restart nginx"
A gravação de sessão é automática. Reproduzir pela UI web ou CLI:
tsh play <id-sessao>
Acesso a Bancos de Dados
tsh db login prod-postgres --db-user=appuser --db-name=meudb
tsh db connect prod-postgres # abre psql
tsh db connect prod-mysql # abre mysql CLI
tsh db connect mongo-atlas --db-user=leitor
tsh db connect redis-cache
O Teleport atua como proxy com reconhecimento de protocolo — entende o protocolo de rede nativo do banco de dados sem expor suas portas.
Acesso ao Kubernetes
tsh kube ls
tsh kube login producao
kubectl get pods -n default
O YAML de papel define recursos Kubernetes permitidos com verbos específicos (get, list, exec). A impersonação aplica as permissões do usuário Teleport ao contexto Kubernetes.
Acesso a Aplicações
app_service:
enabled: true
apps:
- name: grafana
uri: http://grafana.interno:3000
labels:
env: production
Usuários acessam https://grafana.teleport.exemplo.com. O Teleport adiciona um cabeçalho JWT com a identidade do usuário. SSO protege cada app interna sem modificá-la.
Log de Auditoria
# Consultar log de auditoria
tctl audit events --event-type=session.start --format=json
# Intervalo de datas
tctl audit events \
--from="2026-03-01" \
--to="2026-03-23" \
--event-type=db.session.query
Backends de armazenamento: S3 (com Athena), GCS (com BigQuery) ou DynamoDB.
Access Requests: Escalada de Privilégios Just-in-Time
# Solicitar papel de produção
tsh request create --roles=production-access \
--reason="Investigando incidente P1 #4821"
# Aprovar
tsh request review --approve <id-solicitacao>
# Negar
tsh request review --deny <id-solicitacao>
Teleport inclui plugins para Slack, PagerDuty, ServiceNow e Jira. Aprovações podem ser feitas diretamente do Slack.
Teleport vs Alternativas
| Recurso | Teleport | HashiCorp Boundary | StrongDM | Bastion Host | Tailscale SSH | OpenSSH |
|---|---|---|---|---|---|---|
| Autenticação | Certs curta duração | Credenciais dinâmicas | Injeção de credenciais | Chaves estáticas | WireGuard + certs | Chaves estáticas |
| SSO/IdP | Sim (SAML/OIDC/GitHub) | Sim | Sim | Manual | OIDC | Não |
| Gravação sessões | Completa (SSH+DB+K8s) | Não | Sim | Não | Não | Não |
| Acesso DB | Sim (protocolo nativo) | Sim | Sim | Só túnel | Não | Não |
| Kubernetes | Sim (RBAC) | Parcial | Sim | Não | Não | Não |
| Access Requests | Sim (integrado) | Não | Não | Não | Não | Não |
| Open source | Sim (Apache 2.0) | Sim (MPL 2.0) | Não (SaaS) | N/A | Parcial | Sim |
Casos Especiais e Armadilhas
- Desvio de relógio destrói certificados. Auth, Proxy e todos os nós precisam de sincronização NTP dentro de ±30 segundos.
- Multiplexação ALPN requer porta 443. Dividir portas quebra algumas funcionalidades de proxy para proxy.
- Wildcard TLS para acesso a apps. Subdomínios de aplicações requerem certificado wildcard ou desafio ACME por app.
- EC2 IAM join precisa de IMDSv2. Verificar que o endpoint de metadados da instância seja acessível.
- Impersonação do Kubernetes. O agente kube_service precisa de permissões ClusterRole de impersonate.
Solução de Problemas
| Problema | Solução |
|---|---|
Loop de redirecionamento em tsh login | Verificar que redirect_url do conector SSO corresponda exatamente ao endereço público do proxy |
Nós não aparecem em tsh ls | Verificar que o agente alcança o Auth na porta 443; revisar expiração do token de ingresso |
| Conexão ao banco de dados recusada | Confirmar que db_service está rodando; verificar firewall entre agente e host do DB |
| kubectl exec proibido | Adicionar verbo exec ao bloco kubernetes_resources do papel |
| Sessão não gravada | Revisar política record_session; verificar permissões do bucket S3 para o papel IAM do Auth Service |
Resumo
- Autoridade de certificados — substitui chaves SSH estáticas por certs que expiram automaticamente.
- SSO + MFA — GitHub, Okta, Azure AD, Google Workspace; TOTP, WebAuthn, chaves de hardware.
- RBAC com rótulos de nó — papéis correspondem a servidores por rótulos de ambiente/equipe.
- Auditoria completa — cada sessão gravada como eventos estruturados + vídeo, armazenados em S3/GCS.
- Bancos de dados e Kubernetes — proxy com protocolo nativo sem expor portas ou distribuir credenciais.
- Access Requests — escalada de privilégios just-in-time com fluxos de aprovação no Slack/PagerDuty.
- Open source — Apache 2.0, auto-hospedável ou gerenciado via Teleport Cloud.