In der heutigen Zeit wird es immer wichtiger den Zugriff auf Daten und Systeme gezielt und präzise verwalten zu können. Eine zentrale Plattform zur Verwaltung der Berechtigungen und des Zugriffs für die einzelnen Nutzer aber auch Gruppen von Nutzern ist erforderlich, um z.B. Benutzern, welche aus dem Unternehmen ausscheiden, zentral den Zugriff auf Daten und die Berechtigungen zur Nutzung der Systeme entziehen zu können. Über die Berechtigung von Benutzergruppen ist es möglich bestimmte Berechtigungen für einzelnen Abteilungen innerhalb des Unternehmens zu vergeben. Eine Möglichkeit für die Einrichtung eines solchen zentralen Berechtigungssystems ist der „Directory Service“ von AWS.
Der AWS Directory Service ermöglicht die Erstellung eines verwalteten Microsoft Active Directory (AD). Dieses AD kann für die Verwaltung von Benutzern und Berechtigungen für Windows als auch Linux Systeme verwendet werden. Darüber hinaus wird die Rechteverwaltung über AD von verschiedenen AWS Diensten wie Relational Database Service (RDS) unterstützt.
Szenario
Das folgende Bild gibt eine Übersicht über die verwendete Architektur in diesem Beispiel.
Als Grundlage für dieses Beispiel wird angenommen, dass mehrere unterschiedliche Dienste mit einem lokalen AD verbunden werden sollen. Es handelt sich bei den anzubindenden Diensten um eine EC2 Instanz mit Windows Server 2022, eine EC2 Instanz mit Ubuntu Server sowie eine Microsoft SQL-Server Datenbank und einer PostgreSQL Datenbank. Die Datenbanken werden über den Service AWS RDS bereitgestellt. Außerdem befindet sich eine Instanz des Directory Service in der VPC. Die VPC dient der netzwerkmäßigen Kapselung der einzelnen Services. Bei einer VPC handelt es sich um einen netzwerktechnisch abgegrenzten Bereich in der AWS, in dem über unterschiedliche Richtlinien der Zugriff genau gesteuert werden kann. Für die Kommunikation zwischen der VPC und dem lokalen Netzwerk wird ein Transit Gateway verwendet. Das Transit Gateway ist ein VPN Endpunkt in AWS über den ein dynamisch gerouteter VPN Tunnel aufgebaut werden kann. Durch den VPN Tunnel ist es dann möglich unterschiedliche Subnetze in verschiedenen VPCs anzusprechen.
Einrichten des Directory Service
Bei der Einrichtung des Directory Service in AWS werden einige Angaben, wie die Art des zu erstellenden Verzeichnisses, benötigt. In diesem Beispiel wird ein Verzeichnis vom Typ „AWS Managed Microsoft AD“ verwendet. Zu den weiteren Optionen bei der Erstellung des Verzeichnisses gehört die Einstellung des DNS Namens der Domäne, das Festlegen eines Kennworts für den Admin Benutzer und die Auswahl der VPC und Subnetze, in welcher das Directory bereitgestellt werden soll.
Anbindung von Windows Server 2022
Die Anbindung der EC2 mit Windows Server 2022, welche hier als Verwaltungssystem genutzt wird, erfolgt über die Angabe des beizutretenden Verzeichnisses bei der Anlage der EC2 Instanz. Auch hier muss der Netzwerkzugriff zwischen EC2 und Directory Instanz sichergestellt werden.
Nach der Erstellung der EC2 und dem erfolgreichen Domain Beitritt ist eine Anmeldung and der EC2 mit dem “Admin” Benutzer, welcher vom Directory Service angelegt wurde, möglich.
Erstellen der AD Objekte
In diesem Abschnitt werden die Objekte im AD mithilfe der erstellten Windows Server EC2 angelegt. Um die Objekte erstellen zu können, ist die Verwendung eines Benutzers mit den benötigten Rechten erforderlich. Hier wird der “Admin” Benutzer für die initiale Einrichtung verwendet.
Im AD werden zwei unterschiedliche Gruppen (SQL-Server und SQL-Admins) erstellt. Für die unterschiedlichen Systeme werden die auf dem folgenden Screenshot zu sehenden Benutzer angelegt und den Gruppen zugewiesen.
Der Benutzer „Admin“ ist der von AWS bei der Erstellung des ADs über den Directory Service angelegte Verwaltungsbenutzer. Die Benutzer „Red Hat“ und „ubuntu server“ werden in diesem Beispiel für die Anbindung der EC2 Instanzen verwendet.
Anbindung der Linux Instanzen
Die Anbindung der Linux basierten Instanzen erfolgt ähnlich wie die Anbindung der Windows Server Instanz. Nach dem Erstellen der Instanz werden hier allerdings nicht die Microsoft Tools für die AD Integration, sondern spezielle Linux Programm verwendet. Der Beitritt der Instanz zur Domäne erfolgt über das Tool „realm“.
Erreichbarkeit der Domäne prüfen:
sudo realm discover example.com
Dieser Befehlt prüft, ob die Domäne <example.com> erreichbar ist.
sudo realm join -U <Username> example.com
Mit diesem Befehl erfolgt der Beitritt der Instanz zur Domäne.
Nachdem die Instanz der Domäne beigetreten ist, lassen sich über den Befehl
id <Username>@<example.com>
die Daten des Benutzers von der Domäne abfragen.
Besonderheit Anbindung RedHat
Um die RedHat Instanz an das Directory anbinden zu können, müssen zuerst die benötigten Tools installiert werden. Im Anschluss passt man die Adressen der DNS-Server an, damit die Instanz das Directory finden kann. Der Rest des Setups verläuft ähnlich wie bei Ubuntu Server.
Toolliste Ubuntu/RedHat
Die benötigten Programme lassen sich mit den folgenden Befehlen installieren.
Ubuntu:
sudo apt install realmd libnss-sss libpam-sss sssd sssd-tools adcli samba-common-bin oddjob oddjob-mkhomedir packagekit
RedHat:
yum install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients
Auf dem folgenden Screenshot ist das Ergebnis des Abrufs der Benutzerinformationen aus dem AD unter RedHat/Ubuntu zu sehen.
Aus der Ausgabe des Befehls ID sind die AD Gruppen, welchen der jeweilige Nutzer zugeordnet ist, ersichtlich.
Die Verwaltung der AD Berechtigungen erfolgt bei den Linux Systemen ohne GUI über die Shell und das Editieren von Konfigurationsdateien.
Anbindung des lokalen AD
Um eine Verbindung mit dem lokalen AD herzustellen, wird eine VPN Verbindung über ein Transit Gateway verwendet. Die Verbindung mit dem lokalen AD ermöglicht die Verwendung der dort eingerichteten Objekte wie Benutzer. Durch die VPN Verbindung sind das lokale AD und das AD des Directory Services netzwerktechnisch verbunden. Für eine erfolgreiche Kommunikation zwischen beiden ADs ist noch die Freigabe der Kommunikation auf Anwendungsebene erforderlich. Die Freigabe der Kommunikation auf Anwendungsebene zwischen den beiden Verzeichnissen erfolgt über einen Domain-Trust. Durch diesen Trust ist die Authentifizierung mit Benutzern des lokal gehosteten AD gegen das Verzeichnis, welches vom Directory Service bereitgestellt wird, möglich.
Erstellen der Datenbanken in AWS RDS
Beim Erstellen der Datenbanken in RDS muss darauf geachtet werden, dass die Datenbankinstanzen den nötigen Zugriff auf die Instanz des Directory Service über das Netzwerk erhalten. In diesem wurde dies über Regeln in den Sicherheitsgruppen erledigt. Einstellungen für einen VPC übergreifenden Netzwerkverkehr sind hier nicht erforderlich, da sich alle Instanzen in der selben VPC befinden.
Einrichtung Microsoft SQL-Server
Um einen Benutzer aus einem AD für eine Microsoft SQL-Server Instanz verwenden zu können, muss dieser zuerst auf dem SQL-Server eingerichtet werden. Die folgenden Befehle legen die Berechtigungen für einen einzelnen Benutzer oder eine Gruppe im AD fest. In diesem Fall werden die Rechte für die Gruppe „SQL-Admins“ festgelegt.
CREATE LOGIN [saracus-aws\SQL-Admins] FROM WINDOWS;
GO
GRANT ALTER ANY CONNECTION TO [saracus-aws\SQL-Admins]
GRANT ALTER ANY LINKED SERVER TO [saracus-aws\SQL-Admins]
GRANT ALTER ANY LOGIN TO [saracus-aws\SQL-Admins]
GRANT ALTER SERVER STATE TO [saracus-aws\SQL-Admins]
GRANT ALTER TRACE TO [saracus-aws\SQL-Admins]
GRANT CONNECT SQL TO [saracus-aws\SQL-Admins]
GRANT CREATE ANY DATABASE TO [saracus-aws\SQL-Admins]
GRANT VIEW ANY DATABASE TO [saracus-aws\SQL-Admins]
GRANT VIEW ANY DEFINITION TO [saracus-aws\SQL-Admins]
GRANT VIEW SERVER STATE TO [saracus-aws\SQL-Admins]
GRANT ALTER ANY SERVER ROLE TO [saracus-aws\SQL-Admins]
GO
Listing 1 Einrichtung AD Gruppe in Microsoft SQL-Server und Rechtevergabe
Auf diese Weise können für jeden Benutzer die Rechte angepasst vergeben werden. Die Verwaltung der Microsoft SQL-Server Instanz wird über SQL-Server Management Studio durchgeführt. Bei der Erstellung der Benutzer wird, solange kein Domänen Benutzer mit den entsprechenden Rechten existiert, der von AWS RDS angelegte Admin Benutzer verwendet, um die Verwaltungsaufgaben auszuführen.
Nachdem die Benutzer bzw. Gruppen angelegt wurden, kann der Login wie auf dem folgenden Screenshot gezeigt erfolgen.
Einrichtung PostgreSQL
Für die Verwaltung der PostgreSQL Instanz wird das Programm pgAdmin unter Windows verwendet. Bei PostgreSQL ist es möglich den Passwortabgleich des Benutzers über das AD durchzuführen. Dazu muss der Benutzer erst in der Datenbank angelegt werden, was auch hier mit dem von RDS initial erstellten Administrations Benutzer durchgeführt wurde. Um den Benutzer vor unbefugtem Zugriff zu schützen, sollte der Benutzer mit einem Passwort versehen werden. Das gesetzte Passwort verhindert die Anmeldung ohne Passwort und ohne aktivierte “Kerberos authentication”. AD Gruppen werden nicht direkt von PostgreSQL unterstützt. Die Verwendung von Berechtigungen für AD Gruppen ist jedoch über externe Skripte bzw. Plugins möglich.
Bei PostgreSQL müssen die Benutzer im Format <Benutzername>@<Domain> angelegt werden. In den Einstellungen für die Verbindung muss „Kerberos authentication“ aktiviert werden, um die Authentifizierung mit dem AD durchzuführen.
Eine Möglichkeit für ein Skript, welches die Verwendung von AD Berechtigungen in PostgreSQL ermöglicht, ist ein Python Skript zur Übertragung der AD Berechtigungen in entsprechende Datenbank Berechtigungen. Das Skript benötigt einen Zugriff auf das AD zum Auslesen der Berechtigungen der einzelnen Benutzer und einen Zugriff auf die Datenbank, um die Berechtigungen setzen zu können. Außerdem ist ein Mapping zwischen AD Berechtigungen und Datenbank Berechtigungen erforderlich. Das Skript kann dann zyklisch ausgeführt werden.
Fazit
Im Bereich der AD Integration haben alle in diesem Beispiel genutzten AWS Services unterschiedliche Stärken und Schwächen. Im Bereich der Datenbanken, die hier über RDS bereitgestellt wurden, ist Microsoft SQL-Server deutlich einfacher an ein AD zum Rechtemanagement anzubinden als die PostgreSQL Datenbank. Bei der SQL-Server Datenbank können die Rechte über einfache SQL-Befehle verwaltet werden und den AD Objekten (Benutzern / Gruppen) zugewiesen werden, wodurch der administrative Aufwand geringer ausfällt. Bei der PostgreSQL Datenbank werden für die Rechteverwaltung über das AD externe Skripte wie z.B. ein Python Skript benötigt. Dieses Skript hat die Aufgabe einen Abgleich der Berechtigungen zwischen AD und der PostgreSQL Datenbank durchzuführen. Die Anbindung der beiden EC2 Instanzen gestaltet sich in beiden Fällen (Windows Server / RedHat) ähnlich aufwendig. Bei der Anbindung der unterschiedlichen Betriebssysteme ist die Anbindung der Windows System am einfachsten, da hier für alle Schritte Programme mit grafischen Oberflächen direkt von Microsoft bereitgestellt werden. Bei den Linux Systemen erfolgt die Verwaltung der Rechte jedoch über textbasierte Konfigurationsdateien und der Shell, wodurch sich die Administration schwieriger gestaltet.