Der Laptop eines Entwicklers läuft beim Verbinden mit dem privaten RDS-Endpunkt in eine Zeitüberschreitung, während dieselben Zugangsdaten von einem Bastion-Host funktionieren. Nichts ist ausgefallen. Dem Weg zwischen diesem Laptop und der Datenbank fehlt eine von drei Sachen: ein Name, der sich auflöst, eine Route, die den Verkehr trägt, oder eine Regel in einer Sicherheitsgruppe, die die Quelle zulässt, die die Datenbank tatsächlich sieht. Finden Sie heraus, welche fehlt, bevor Sie die anderen beiden ändern.

Lesen Sie den Fehler auf der richtigen Ebene

Eine Zeitüberschreitung ist nicht ein Fehler. Ein Name, der sich nicht auflöst, scheitert, bevor ein Paket die Maschine verlässt. Eine Adresse ohne Route schickt Pakete in ein schwarzes Loch. Ein gefilterter Port erzeugt ein Warten, das genau wie ein falscher Host aussieht. Führen Sie die Schritte in der Reihenfolge aus und halten Sie beim ersten an, der scheitert.

dig +short db.internal.example
nc -vz db.internal.example 5432

Liefert der Name eine öffentliche Adresse oder gar nichts, ist der Tunnel noch nicht das Problem.

Löst sich der Name auf und hängt der Porttest, vergleichen Sie die aufgelöste Adresse mit der Adresse, die die Datenbank meldet. Ein verwalteter Endpunkt kann sich auf eine private Adresse innerhalb der VPC und auf nichts Nützliches außerhalb davon auflösen, und eine aus einer alten Abfrage kopierte Adresse zeigt auf einen Host, der nicht mehr antwortet.

Trennen Sie den Tunnel von der Route

Ein Client-VPN zu verbinden leitet nicht automatisch jeden privaten Bereich. Das Profil trägt die Routen, die der Dienst schiebt, und der Client installiert möglicherweise nur einige davon. Sehen Sie nach, welche Bereiche der Client tatsächlich hinzugefügt hat und ob die Datenbankadresse in einen davon fällt.

ip route get 10.20.40.15
ip addr show tun0

Eine Route, die auf die Tunnelschnittstelle zeigt, ist notwendig; sie ist nicht ausreichend, weil die Gegenseite den Verkehr trotzdem annehmen muss.

Split-Tunnel-Profile sind die übliche Ursache dieses halben Fehlers. Sie funktionieren für die Anwendung, für die das Profil entworfen wurde, und lassen den Datenbankbereich außerhalb des Tunnels, was genau die Zeitüberschreitung erzeugt, die eine Firewall erzeugen würde.

Passen Sie die Sicherheitsgruppe an die echte Quelle an

Die RDS-Sicherheitsgruppe lässt Quellen zu, keine Personen. Je nach Architektur kann die Quelle der VPN-Client-Pool, die private Adresse eines Bastions oder eine NAT-Adresse sein, auf die der Verkehr übersetzt wird. Lesen Sie die Regel und die tatsächliche Paketquelle zusammen.

aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0 \
  --query 'SecurityGroups[].IpPermissions'

Eine Regel für die Privatadresse eines einzelnen Laptops ist ein Wartungsproblem statt eines Zugriffsdesigns.

Wenn ein Client-VPN oder ein NAT-Gateway im Weg sitzt, kann die Datenbank die Adresse des Übersetzers statt der Tunneladresse des Entwicklers sehen. Deshalb kann eine aus einem funktionierenden Bastion-Aufbau kopierte Regel für einen Laptop scheitern: Die beiden Wege kommen aus verschiedenen Quellen, obwohl beide intern aussehen.

Bevorzugen Sie einen schmalen Weg vor einem breiten

Wenn ein Entwickler eine Datenbank braucht, ist eine sitzungsbasierte Weiterleitung oft billiger zu betreiben als ein vollständiger Netzwerktunnel. Der lokale Client verbindet sich mit einem weitergeleiteten Port, und die entfernte Komponente stellt die Datenbankverbindung aus dem Netzwerk heraus her.

ssh -N -L 5432:db.internal.example:5432 bastion.internal.example

Behalten Sie die TLS-Prüfung in diesem Entwurf bei. Der Client sollte das Serverzertifikat weiterhin gegen den Namen prüfen, den er erwartet; ein lokal weitergeleiteter Port ist kein Grund, die Prüfung abzuschalten, und sie abzuschalten verbirgt genau das Identitätsproblem, das es zu fangen gilt.

Die Wahl zwischen einem vollen Tunnel und einer schmalen Weiterleitung ist eine Entscheidung über den Umfang, nicht über Sicherheitstheater.

Hinterlassen Sie einen wiederholbaren Weg

Dokumentieren Sie den Endpunktnamen statt einer aufgelösten Adresse, den Quellbereich, den die Sicherheitsgruppe zulässt, und die Datenbankrolle, die der Entwickler verwendet. Diese drei Fakten erklären die meisten künftigen Fehler ohne Anruf. Fügen Sie auch die Version des Clientprofils hinzu, denn eine Profiländerung kann eine Route entfernen, die das alte trug.

Testen Sie dann den negativen Fall einmal: Ein Client außerhalb der genehmigten Quelle sollte weiterhin abgelehnt werden.

Eine private Datenbank, die nur für die Person funktioniert, die sie eingerichtet hat, ist kein privater Zugang; sie ist eine undokumentierte Ausnahme, die darauf wartet, wiederentdeckt zu werden. Schreiben Sie den Weg auf, und der nächste Entwickler erbt eine Methode statt eines Rätsels.

Ähnliche Artikel