Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Jenseits von Bastion-SSH-Verbindungen in AWS

By Javier CarreraJan 5, 20249 min read

Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.

Sichere Verbindungen zu privaten EC2-Instanzen: ein aktueller Überblick

Der Zugriff auf private EC2-Instanzen gehört in vielen Organisationen zum Alltag bestimmter Nutzer – typischerweise Administratoren und einzelner autorisierter Entwickler. Klassischerweise greifen AWS-Anwender dafür zu Bastions (Jump Boxes), VPNs (Virtual Private Connections) oder AWS Direct Connect. AWS EC2 bietet zwar bereits seit Längerem moderne Alternativen zu diesen "Old-School"-Lösungen, doch eine im Juni 2023 eingeführte Erweiterung eines dieser modernen Ansätze macht eine Aktualisierung sinnvoll. Dieser Artikel stellt die alternativen Optionen für die Verbindung zu privaten EC2-Instanzen vor, beleuchtet ihre Vor- und Nachteile und zeigt, wie sie sich einsetzen lassen.

Hinweis: Eine private Instanz ist in diesem Kontext eine EC2-Instanz ohne öffentliche IPv4-Adresse oder eine Instanz, die nicht in einem öffentlichen VPC-Subnetz gestartet wurde. Per Definition ist ein öffentliches Subnetz jedes Subnetz, dessen Routing-Tabelle den Datenverkehr über ein Internet Gateway ins Internet leitet.

Die "klassische" SSH-Verbindung im Überblick.

Es gibt zwei typische "klassische" Wege, um sich sicher mit einer privaten EC2-Instanz zu verbinden: 1) den Aufbau eines verschlüsselten Tunnels über ein Client-VPN oder Site-to-Site-VPN (in diese Gruppe nehmen wir auch AWS Direct Connect mit auf, auch wenn es streng genommen kein Tunnel ist) und 2) die Nutzung einer öffentlichen EC2-Instanz als "Jump Box" (gemeinhin als "Bastion"-Host bekannt), um von dort eine neue Verbindung zur privaten Instanz aufzubauen. Beide Optionen verursachen Kosten und teilweise einen nicht zu unterschätzenden Konfigurationsaufwand. Schauen wir genauer hin:

  • AWS Client-VPN, AWS Site-to-Site-VPN (oder vergleichbare VPN-Lösungen) bzw. AWS Direct Connect

Dieser Ansatz war und ist nach wie vor verbreitet, um über beliebige Netzwerke hinweg eine Anbindung an ein privates Netzwerk herzustellen – per verschlüsseltem Tunnel (bei VPNs) oder per dedizierter privater Verbindung (bei AWS Direct Connect). Allerdings ist das mit Kosten verbunden: Sie benötigen mindestens eine Instanz oder einen Managed Service als Endpunkt der VPN-Verbindung, in manchen Fällen kommen Verbindungszeit-Kosten hinzu, und der Komplexitätsgrad variiert.

  • Jump Box bzw. Bastion

Eine noch verbreitetere Variante mit geringeren Kosten und weniger Komplexität als VPN/Direct Connect: Hier nimmt eine öffentliche EC2-Instanz die Verbindung des Clients entgegen und baut anschließend eine neue Verbindung zur privaten EC2-Instanz auf (siehe Diagramm unten). Diese Option lässt sich für SSH (typischerweise mit SSH Agent Forwarding) und RDP (mit Remote Desktop Gateway) nutzen. Der Nachteil: Sie zahlen nicht nur für die Bastion-Instanz, sondern vergrößern auch Ihre Angriffsfläche, weil der Bastion-Host öffentlich erreichbar ist. Entsprechend müssen Sie sämtliche Sicherheitsmaßnahmen ausschöpfen, um Ihre Bastion-Hosts abzusichern – etwa kontrollierten Zugriff auf die Maschinen-Credentials (z. B. Private Keys), Netzwerkbeschränkungen über Security Groups und Network Access Control Lists (NACL) sowie regelmäßiges Patchen des Betriebssystems. All das bedeutet operativen Mehraufwand für Ihre Infrastruktur.

Bastion-basierte Verbindung

Die genannten Optionen sind technisch valide, doch AWS bietet zwei moderne, besser handhabbare und kosteneffizientere Methoden, um Ihren privaten Instanzen denselben Zugriff zur Verfügung zu stellen. Sehen wir sie uns an.

ZUGRIFFSMETHODE 1: Mit Session Manager können Sie SSH komplett umgehen (sofern Sie das wollen).

AWS Session Manager, 2018 eingeführt, ist eine Funktion von AWS Systems Manager, mit der Sie Ihre EC2-Instanzen, Edge-Geräte sowie On-Premise-Server und virtuellen Maschinen (VMs) interaktiv verwalten können.

Bei der Nutzung von Session Manager müssen SSH oder RDP auf der privaten EC2-Instanz, mit der Sie sich verbinden, weder installiert noch konfiguriert oder ausgeführt werden. Sie können die SSH- oder RDP-Protokolle aber dennoch nutzen, um sich über Session Manager mit der privaten EC2-Instanz zu verbinden (siehe unten).

Session Manager konfigurieren:

  • Auf der privaten EC2-Instanz muss der Systems Manager Agent laufen. Dieser ist in mehreren AMIs vorinstalliert, lässt sich aber auch manuell installieren – und das nicht nur auf EC2-Instanzen.
  • Das Subnetz, in dem die private Ziel-EC2-Instanz angebunden ist, muss direkt oder indirekt – über ein Internet Gateway oder NAT Gateway – Internetverbindung haben. Alternativ können Sie VPC-Endpoints für Session Manager konfigurieren, um private EC2-Instanzen ohne ausgehenden Internetzugriff zu verwalten. Veranschaulichen wir die beiden Optionen:
  • Netzwerkkonfiguration Option 1: Falls Sie bereits ein NAT Gateway in einem öffentlichen Subnetz betreiben (und Ihnen die zusätzlichen Kosten für den vom NAT Gateway verarbeiteten Traffic des Systems Manager Agent nichts ausmachen), zeigt das folgende Diagramm, dass der Session Manager Agent ausgehende Konnektivität zu den Session-Manager-Endpoints benötigt, damit Client-Sitzungen gestartet werden können.

Session Manager mit NAT Gateway

  • Netzwerkkonfiguration Option 2: Wenn Sie weder ein Internet Gateway noch ein NAT Gateway einsetzen möchten, benötigen Sie je einen VPC Endpoint pro Service: Systems Manager, Session Manager Message Gateway Service und Message Delivery Service. Weitere Details finden Sie hier und hier. Beachten Sie, dass VPC Endpoints eigene Security Groups (und Resource Policies) haben, die sich für eine zusätzliche Netzwerk- und Identitäts-Zugriffskontrolle nutzen lassen.

Session Manager mit VPC Endpoints

Session Manager nutzen:

  • Sie können die AWS Management Console oder die AWS Command Line Interface (AWS CLI) verwenden, um Sitzungen zu starten – mit Knoten, für die Ihr Systemadministrator über AWS Identity and Access Management (IAM)-Policies Zugriff freigegeben hat. Wenn Sie die AWS CLI bevorzugen, müssen Sie zunächst das Session Manager Plugin für die AWS CLI installieren.
  • Sie verfügen über eine zentrale Zugriffskontrolle auf Instanzen via IAM-Policies – sowohl auf der Zielinstanz (die der Instanz zugewiesene Rolle benötigt Berechtigungen, damit der Systems Manager Agent mit den Systems Manager/Session Manager APIs interagieren kann) als auch auf der zugreifenden Identität (der IAM-User oder die IAM-Rolle benötigt Berechtigungen, um eine Session-Manager-Verbindung zur Instanz aufzubauen).
  • Sie können Instanzberechtigungen auf Account-Ebene über eine AWS Identity and Access Management (IAM)-Rolle oder auf Instanz-Ebene über ein Instance Profile vergeben. Wenn es Ihr Use Case erlaubt, empfiehlt AWS, den Zugriff auf Account-Ebene über die Default Host Management Configuration zu gewähren.
  • Sie können weiterhin die Protokolle SSH oder RDP verwenden (in diesem Fall benötigen Sie eine Credentials-Datei auf dem Client).
  • Sie können sogar sicher mit Ihrer bevorzugten GUI auf eine Amazon-RDS- oder Amazon-EC2-Datenbankinstanz zugreifen – über Port-Forwarding und eine EC2-"Bastion" in einem privaten Subnetz.

Weitere Aspekte zu Session Manager:

  • Session Manager unterstützt Logging und Auditing. Mit AWS CloudTrail und Amazon CloudWatch Logs (und optional auch einem S3-Bucket) lassen sich sämtliche Sitzungsaktivitäten lückenlos aufzeichnen. Logging steht nicht zur Verfügung für Session-Manager-Sitzungen, die über Port-Forwarding oder SSH laufen. Der Grund: SSH verschlüsselt sämtliche Sitzungsdaten, und Session Manager dient hier lediglich als Tunnel für die SSH-Verbindungen.
  • Für den Zugriff auf Amazon-EC2-Instanzen über Session Manager fallen keine zusätzlichen Kosten an. Es gelten die üblichen Datenübertragungsgebühren. Der interaktive Zugriff auf On-Premises-Instanzen über Session Manager ist hingegen kostenpflichtig.

ZUGRIFFSMETHODE 2: EC2 Instance Connect Endpoint ist der neueste Weg für SSH/RDP auf eine Maschine.

EC2 Instance Connect Endpoint ermöglicht den Verbindungsaufbau per SSH oder RDP zu einer Instanz – auf Basis kurzlebiger SSH-Schlüssel und ohne dass die Instanz eine öffentliche IPv4-Adresse benötigt. Vor Juni 2023 bot EC2 Instance Connect ähnliche Funktionen, erlaubte aber nur den Zugriff auf öffentliche EC2-Instanzen (für diese Art von Maschinen steht die Option weiterhin zur Verfügung). EC2 Instance Connect wurde 2019 eingeführt.

EC2 Instance Connect Endpoint konfigurieren:

  • Auf der Zielinstanz wird kein Agent benötigt. Damit lassen sich auch Instanzen erreichen, die keine Agents unterstützen, etwa Drittanbieter-Appliances.
  • Eine direkte oder indirekte Internetkonnektivität über ein Internet Gateway oder NAT Gateway ist nicht erforderlich. Allerdings müssen Sie einen Endpoint in einem Subnetz innerhalb des VPC konfigurieren, in dem sich Ihre Zielinstanz befindet. Zum Zeitpunkt der Erstellung dieses Artikels (November 2023) lässt sich pro VPC nur ein EC2 Instance Connect Endpoint anlegen (siehe Quotas). Bis der Endpoint bereitsteht, dauert es einige Minuten.

EC2 Instance Connect Endpoint

EC2 Instance Connect Endpoint nutzen:

  • Sie können die AWS Management Console, Ihren eigenen Schlüssel und SSH-Client oder die AWS Command Line Interface (AWS CLI) nutzen, um sich mit Ihren privaten Knoten zu verbinden. Bevor Sie eine Verbindung mit einem RDP-Client aufbauen, müssen Sie über die AWS CLI einen Tunnel öffnen.
  • Auf Wunsch können Sie Ihre eigenen SSH-Keys verwenden (in diesem Fall benötigen Sie eine Credentials-Datei auf dem Client). Um eine RDP-Verbindung mit dem Standard-Administrator-User aufzubauen, benötigen Sie den Private Key des mit der EC2-Instanz verknüpften Standard-Key-Pairs, um das initiale Administrator-Passwort zu entschlüsseln – wie bei der Verbindung zu öffentlichen Windows-Instanzen.
  • EC2 Instance Connect Endpoint bietet eine zentrale Zugriffskontrolle auf Instanzen, indem identitätsbasierte (IAM-Berechtigungen des verbindungsinitiierenden IAM-Users oder der IAM-Rolle) und netzwerkbasierte Kontrollen (Security Groups am Endpoint und an der Zielinstanz) kombiniert werden. Sie können den EC2 Instance Connect Endpoint anweisen, die IP-Adresse des Clients zu erhalten. Das kann beeinflussen, wie Sie Ihre Security Groups und Network Access Control Lists (NACLs) konfigurieren.

Weitere Aspekte zum EC2 Instance Connect Endpoint:

  • Es kommen temporäre Credentials zum Einsatz. Selbst bei einer Kompromittierung eines Private Keys lässt sich dieser nicht über die Gültigkeitsdauer der Credentials hinaus nutzen.
  • Sie können Ressourcenoperationen protokollieren und Verbindungen, die über den EC2 Instance Connect Endpoint aufgebaut werden, mit AWS CloudTrail Logs auditieren. Anders als bei Session Manager muss das Logging der Nutzeraktivitäten auf Betriebssystemebene der Zielinstanz erfolgen.
  • Es gibt einige Einschränkungen, die Sie kennen sollten. Zwei davon hervorgehoben: Es werden nur die Ports 22 und 3389 unterstützt, und EC2 Instance Connect Endpoint unterstützt keine Verbindungen zu einer Instanz über IPv6-Adressen.
  • Für die Nutzung von EC2 Instance Connect Endpoints fallen keine zusätzlichen Kosten an. Es gelten die üblichen Datenübertragungsgebühren.

Fazit

In diesem Artikel habe ich vier Methoden für die sichere Verbindung mit privaten EC2-Instanzen in AWS vorgestellt.

Zu den klassischen Methoden zählen: 1) das Einrichten von AWS Client-VPN, Site-to-Site-VPN oder AWS Direct Connect (was den Aufbau verschlüsselter Tunnel oder dedizierter Verbindungen umfasst, jedoch mit Komplexität und Kosten verbunden ist) und 2) die Nutzung einer öffentlichen EC2-Instanz als "Jump Box" (kostengünstig, vergrößert aber die Angriffsfläche).

Anschließend stellt der Artikel zwei moderne, einfachere und günstigere Ansätze vor:

  • Session Manager: eine Funktion von AWS Systems Manager, die das interaktive Management von EC2-Instanzen erlaubt, ohne dass auf der privaten Instanz SSH oder RDP benötigt werden (optional können Sie sie weiterhin nutzen). Es kommt der Systems Manager Agent zum Einsatz, das Zielsubnetz benötigt ausgehende Internetkonnektivität (über ein NAT Gateway oder einen VPC Interface Endpoint), und die Zugriffskontrolle erfolgt zentral über IAM-Policies.
  • EC2 Instance Connect Endpoint: ermöglicht SSH- oder RDP-Zugriff auf Instanzen ohne öffentliche IPv4-Adresse. Auf der Zielinstanz wird kein Agent benötigt, ebenso wenig eine direkte Internetkonnektivität (lediglich die Anbindung des Endpoints an ein Subnetz im VPC). Die Zugriffskontrolle erfolgt über IAM-Berechtigungen und Security Groups.

Sowohl Session Manager als auch EC2 Instance Connect Endpoint bieten Auditing-Funktionen (Session Manager ermöglicht optional das Logging der Sitzungsaktivitäten) und verursachen für den Zugriff auf Amazon-EC2-Instanzen keine zusätzlichen Kosten – mit Ausnahme der üblichen Datenübertragungsgebühren.

Ich kann Ihnen nur empfehlen, diese verbesserten Verbindungsoptionen jetzt zu nutzen – sie helfen Ihnen auch dabei, die Auswirkungen der neuen Preisgestaltung für öffentliche IPv4-Adressen, die AWS für den 1. Februar 2024 angekündigt hat, abzufedern. Wenn Sie Unterstützung benötigen, helfen Ihnen unsere Customer Reliability Engineers (CRE) und Technical Account Managers (TAM) bei DoiT gerne weiter – kontaktieren Sie uns!