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.com auf die Proxy-IP zeigt.
  • Port 443 (HTTPS/ALPN) eingehend zum Proxy geöffnet.
  • tsh- und tctl-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.

Verwandte Artikel