TL;DR — Kurzzusammenfassung
Vollständiger Leitfaden zu Gravitational Teleport für sicheres SSH, Kubernetes, Datenbanken und Apps. Zertifikate, SSO, RBAC, Audit-Logs und Access Requests.
Teleport von Gravitational ist eine Open-Source-Infrastrukturzugriffsplattform, die statische SSH-Schlüssel, VPNs und Jump Hosts durch kurzlebige Zertifikate, SSO und einen vollständigen Audit-Trail ersetzt. Dieser Leitfaden deckt jede Schicht ab: Architektur, Installation, Knoten-Einschreibung, RBAC, SSH, Datenbanken, Kubernetes und Anwendungszugriff.
Voraussetzungen
- Linux-Server (Ubuntu 22.04+ oder RHEL 8+) mit öffentlichem FQDN für den Proxy Service.
- DNS-A-Eintrag, der
teleport.beispiel.comauf die Proxy-IP zeigt. - Port 443 (HTTPS/ALPN) eingehend zum Proxy geöffnet.
tsh- undtctl-CLIs auf der Arbeitsstation installiert.- Identitätsanbieter (GitHub, Okta, Azure AD oder Google Workspace) für SSO — optional für Laborzwecke.
Teleport-Architektur
| Komponente | Aufgabe |
|---|---|
| Auth Service | Zertifizierungsstelle. Stellt kurzlebige TLS/SSH-Zertifikate aus, speichert Audit-Logs. |
| Proxy Service | Öffentlicher HTTPS/SSH-Reverse-Proxy. Verwaltet tsh-Logins, Web-UI und ALPN-Multiplexing auf Port 443. |
| SSH Node Agent | teleport-Daemon auf jedem Server, zeichnet Sitzungen mit dem Auth Service auf. |
| Access Agents | Spezialisierte Daemons: db_service, kube_service, app_service, windows_desktop_service. |
Zertifikatsbasierte Authentifizierung ersetzt SSH-Schlüssel. Wenn ein Benutzer sich mit tsh anmeldet, stellt der Auth Service ein SSH-Zertifikat aus, das für max_session_ttl (typischerweise 8–12 Stunden) gültig ist. Keine langlebigen privaten Schlüssel werden verteilt oder rotiert.
Installation
Selbst gehostet: 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.beispiel.com \
--set acme=true \
--set acmeEmail=admin@beispiel.com
Teleport Cloud
Verwalteter Proxy+Auth-Dienst. Nur Agents (SSH, DB, Kube) werden in der eigenen Infrastruktur deployt und mit dem Cloud-Tenant unter ihrUnternehmen.teleport.sh verbunden.
Erstkonfiguration und ACME-TLS
teleport configure \
--cluster-name=teleport.beispiel.com \
--public-addr=teleport.beispiel.com:443 \
--acme \
--acme-email=admin@beispiel.com \
-o /etc/teleport/teleport.yaml
systemctl enable --now teleport
# Ersten Admin-Benutzer erstellen
tctl users add admin --roles=editor,access --logins=root,ubuntu
Knoten hinzufügen
Token-basierter Beitritt
# Kurzlebiges Token auf dem Auth-Server erstellen
tctl tokens add --type=node --ttl=5m
# Auf dem neuen Server
teleport start \
--roles=node \
--token=<token> \
--auth-server=teleport.beispiel.com:443
EC2/IAM-Beitritt (AWS — Kein Token erforderlich)
Teleport verifiziert das AWS-Instanz-Identitätsdokument. Keine statischen Tokens erforderlich. Dasselbe Verfahren existiert für Azure Managed Identity und GCP Instance Identity.
Authentifizierung: SSO und MFA
GitHub-Connector
kind: github
version: v3
metadata:
name: github
spec:
client_id: "GITHUB_OAUTH_APP_ID"
client_secret: "GITHUB_OAUTH_APP_SECRET"
redirect_url: "https://teleport.beispiel.com/v1/webapi/github/callback"
teams_to_roles:
- organization: meine-org
team: devops
roles: ["devops"]
MFA erzwingen
kind: cluster_auth_preference
version: v2
metadata:
name: cluster-auth-preference
spec:
type: github
second_factor: "on"
webauthn:
rp_id: "teleport.beispiel.com"
second_factor: "on" akzeptiert TOTP (Google Authenticator), WebAuthn (YubiKey, Touch ID) oder Passkeys.
RBAC: Rollen und Labels
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"]
Anwenden mit tctl create rolle.yaml. Der request-Block aktiviert Access Requests — Entwickler können temporären Produktionszugriff mit einer Genehmigung anfordern.
SSH-Zugriff mit tsh
# Anmeldung (öffnet Browser für SSO + MFA)
tsh login --proxy=teleport.beispiel.com
# Zugängliche Knoten auflisten
tsh ls
# Mit einem Knoten verbinden
tsh ssh ubuntu@web-server-01
# Dateiübertragung
tsh scp ./deploy.sh ubuntu@web-server-01:/tmp/
# Port-Weiterleitung
tsh ssh -L 5432:localhost:5432 ubuntu@db-server
# Befehl auf mehreren Knoten
tsh ssh --labels env=staging "systemctl restart nginx"
Sitzungsaufzeichnung ist automatisch. Wiedergabe über die Web-UI oder CLI:
tsh play <sitzungs-id>
Datenbankzugriff
tsh db login prod-postgres --db-user=appuser --db-name=meindb
tsh db connect prod-postgres # öffnet psql
tsh db connect prod-mysql # öffnet mysql CLI
tsh db connect mongo-atlas --db-user=leser
tsh db connect redis-cache
Teleport agiert als protokollbewusster Proxy — er versteht das native Datenbankprotokoll ohne dessen Ports zu exponieren.
Kubernetes-Zugriff
tsh kube ls
tsh kube login produktion
kubectl get pods -n default
Das Rollen-YAML definiert erlaubte Kubernetes-Ressourcen mit spezifischen Verben (get, list, exec). Impersonation wendet die Teleport-Benutzerberechtigungen auf den Kubernetes-Kontext an.
Anwendungszugriff
app_service:
enabled: true
apps:
- name: grafana
uri: http://grafana.intern:3000
labels:
env: production
Benutzer greifen auf https://grafana.teleport.beispiel.com zu. Teleport fügt einen JWT-Header mit der Benutzeridentität hinzu. SSO schützt jede interne App ohne Änderung.
Audit-Log
# Audit-Log abfragen
tctl audit events --event-type=session.start --format=json
# Datumsbereich
tctl audit events \
--from="2026-03-01" \
--to="2026-03-23" \
--event-type=db.session.query
Speicher-Backends: S3 (mit Athena), GCS (mit BigQuery) oder DynamoDB.
Access Requests: Just-in-Time-Rechteerweiterung
# Produktionsrolle anfordern
tsh request create --roles=production-access \
--reason="Untersuchung P1-Vorfall #4821"
# Genehmigen
tsh request review --approve <anfrage-id>
# Ablehnen
tsh request review --deny <anfrage-id>
Teleport enthält Plugins für Slack, PagerDuty, ServiceNow und Jira. Genehmigungen können direkt aus Slack vorgenommen werden.
Teleport vs. Alternativen
| Funktion | Teleport | HashiCorp Boundary | StrongDM | Bastion Host | Tailscale SSH | OpenSSH |
|---|---|---|---|---|---|---|
| Authentifizierung | Kurzlebige Zertifikate | Dynamische Credentials | Credential-Injektion | Statische Schlüssel | WireGuard + Zertifikate | Statische Schlüssel |
| SSO/IdP | Ja (SAML/OIDC/GitHub) | Ja | Ja | Manuell | OIDC | Nein |
| Sitzungsaufzeichnung | Vollständig (SSH+DB+K8s) | Nein | Ja | Nein | Nein | Nein |
| DB-Zugriff | Ja (natives Protokoll) | Ja | Ja | Nur Tunnel | Nein | Nein |
| Kubernetes | Ja (RBAC) | Teilweise | Ja | Nein | Nein | Nein |
| Access Requests | Ja (integriert) | Nein | Nein | Nein | Nein | Nein |
| Open Source | Ja (Apache 2.0) | Ja (MPL 2.0) | Nein (SaaS) | N/A | Teilweise | Ja |
Fallstricke und Sonderfälle
- Zeitversatz zerstört Zertifikate. Auth, Proxy und alle Knoten benötigen NTP-Synchronisation innerhalb von ±30 Sekunden.
- ALPN-Multiplexing erfordert Port 443. Das Aufteilen von Ports bricht einige Proxy-zu-Proxy-Funktionen.
- Wildcard-TLS für App-Zugriff. Anwendungs-Subdomains erfordern ein Wildcard-Zertifikat oder eine ACME-Herausforderung pro App.
- EC2 IAM Join benötigt IMDSv2. Sicherstellen, dass der Instanz-Metadaten-Endpunkt erreichbar ist.
- Kubernetes-Impersonation. Der kube_service-Agent benötigt ClusterRole-Impersonate-Berechtigungen.
Fehlerbehebung
| Problem | Lösung |
|---|---|
Weiterleitungsschleife bei tsh login | Prüfen, ob redirect_url des SSO-Connectors exakt mit der öffentlichen Proxy-Adresse übereinstimmt |
Knoten erscheinen nicht in tsh ls | Prüfen, ob der Agent den Auth auf Port 443 erreicht; Join-Token-Ablauf prüfen |
| Datenbankverbindung verweigert | Bestätigen, dass db_service läuft; Firewall zwischen Agent und DB-Host prüfen |
| kubectl exec verboten | Verb exec zum kubernetes_resources-Block der Rolle hinzufügen |
| Sitzung nicht aufgezeichnet | record_session-Richtlinie prüfen; S3-Bucket-Berechtigungen für die IAM-Rolle des Auth Service prüfen |
Zusammenfassung
- Zertifizierungsstelle — ersetzt statische SSH-Schlüssel durch automatisch ablaufende Zertifikate.
- SSO + MFA — GitHub, Okta, Azure AD, Google Workspace; TOTP, WebAuthn, Hardware-Schlüssel.
- RBAC mit Knoten-Labels — Rollen entsprechen Servern nach Umgebungs-/Team-Tags.
- Vollständiges Audit — jede Sitzung als strukturierte Ereignisse + Video aufgezeichnet, in S3/GCS gespeichert.
- Datenbanken und Kubernetes — protokollbewusstes Proxying ohne Port-Exposition oder Credential-Verteilung.
- Access Requests — Just-in-Time-Rechteerweiterung mit Slack/PagerDuty-Genehmigungsworkflows.
- Open Source — Apache 2.0, selbst hostbar oder verwaltet über Teleport Cloud.