Als Client2Site VPN Service bietet AWS “Client VPN endpoints”, was unter der Haube ein OpenVPN ist.
Per Default, können sich alle User aus dem Active Directory verbinden, unabhängig einer Gruppenmitgliedschaft. Ist für die Autorisation eine Gruppe angegeben, wird nur der Zugriff auf die Ressourcen hinter dem VPN verhindert – nicht aber die Verbindung zum VPN Server.
Das ist unschön!
Wir wollen als Lösung nur Benutzern mit der Mitgliedschaft in einer Active Directory Gruppe den Aufbau der VPN Verbindung ermöglichen. Dafür bietet AWS den Client Connect Handler. Dieser wird bei jedem VPN Verbindungaufbau kontaktiert.
Während des Verbindungsaufbaus führt der Client Connect Handler eine benutzerdefinierte Autorisierungslogik aus, nachdem der Client VPN-Service die Geräte (oder Benutzer) authentifiziert hat.
Durch eine AWS Lambda-Funktion wird der Handler implementiert und kann über die AWS-Konsole oder AWS CLI aktiviert werden.
Genug der Theorie, nun zum praktischen Teil 😉
Bevor wir starten, benötigen wir ein gültiges Server Zertifikat, welches am besten in den AWS Certificates Manager importiert wird und den AWS Directory Service (AWS Managed Microsoft AD).
01 –Erstellen der AWS Lambda Function
02 – Anlegen des Client VPN Endpoints
03 – Die Target Network Associations und eine Autorisation Rule erstellen
Im ersten Schritt öffnen wir den AWS Lambda Service und erstellen uns per „CREATE FUNCTION“ eine neue Funktion.
TIPP: Die Meldung die der User zu sehen bekommt, wird als „error_msg“ von dem Connection Handler übergeben und kann hier in der Function leicht angepasst werden.
Die AWS Lambda Function wurde mit unserem Beispielcode erstellt und ist jetzt „scharf geschaltet“.
02
Im nächsten Schritt erstellen wir und das benötigte Client VPN.
Dafür gehen wir zu dem entsprechenden AWS Service und erstellen einen neuen Client-VPN-Endpunkt.
Jetzt benötigen wir das Server Zertifikat, wie in der Einleitung angesprochen, was im AWS Certificates Manager hinterlegt sein sollte.
Du hast noch kein Zertifikat? Dann kannst Du dir z.B. mit easy-rsa relativ einfach eines erstellen.
Im nächsten Schritt wählen wir bei den Authentication options die „User based authentication“ aus, was dazu führt, das wir die ID des AWS Directory Services angeben müssen.
Zuletzt muss noch die Lambda Funktion die wir im ersten Schritt erstellt haben, als „Client connect Handler“ ausgewählt werden.
03
Die Konfiguration sollten nun bereit zum Testen sein.
Der Client kann unter AWS Client VPN Download | Amazon Web Services heruntergeladen.
Die Konfiguration unseres VPN kann in AWS Client VPN endpoints heruntergeladen werden.
Jetzt noch VERBINDEN klicken.
User ohne Berechtigung werden nun auch direkt getrennt:
fazit
Durch den „Client Connection Handler“ kann ein Benutzer mit fehlender Berechtigung nun keine VPN Verbindung mehr aufbauen und wird darüber auch entsprechend Informiert.
Vereinfachen kann man den Aufbau natürlich auch, in dem ein Cloudformation Template (Stichwort: Infrastructure as Code) dafür erstellt wird, was die benötigten Parameter abfragt und alles „am Stück“ konfiguriert bzw. erstellt.