Üben Sie die NetBox-Authentifizierung über Microsoft AD FS – IT – Oberschwaben
8 mins read

Üben Sie die NetBox-Authentifizierung über Microsoft AD FS – IT – Oberschwaben


Zuletzt aktualisiert am 16. September 2024 um 11:09:00 Uhr

In diesem Artikel beschreibe ich, wie Sie sich über einen Identitätsanbieter (IdP) bei NetBox anmelden. Ich werde den Microsoft Active Directory Federation Service (AD FS) als IdP verwenden. Der Hintergrund ist, dass ich AD FS bereits für verschiedene Anwendungen wie Exchange Server, Nextcloud, Apache Guacamole usw. verwende. Stichwort – Synergie.

Vorbereitungen

In diesem Artikel lege ich folgende Rahmenbedingungen fest:

  • Microsoft Active Directory (AD) mit mindestens einem DC.
  • Private Key Infrastructure (PKI) zur Ausstellung von Zertifikaten für AD FS.
  • AD-Mitglied Microsoft Active Directory Federation Service (AD FS).
  • Microsoft Web Application Proxy (WAP) in der DMZ, d. h
    • AD FS ist verbunden und konfiguriert.
    • Verfügt über ein öffentliches Zertifikat für den FQDN von AD FS.
  • Ein Server in der DMZ oder ein Webhost mit Ubuntu Server 22.04 LTS, auf dem NetBox Version 3.7.4 installiert ist.
    • NetBox ist über netbox01.lab03.daniel.wydler.eu erreichbar.
    • Die NetBox-Instanz ist über HTTPS erreichbar.

Nachfolgend finden Sie eine Netzwerkkarte:

noch offen

Erstellen von Gruppen im Active Directory

Die Grundidee besteht darin, dass die NetBox-Gruppenmitgliedschaft über Active Directory-Gruppen gesteuert wird. Dadurch können Sie auch den Zugriff auf die NetBox steuern.

Also erstelle ich zwei Modellgruppen:

  • gg-netbox-logon-allow: Benutzer müssen Mitglieder dieser Gruppe sein, um sich bei NetBox anmelden zu dürfen.
  • gg-netbox-administrators: Benutzern in diesen Gruppen wird die Rolle „Superuser“ in NetBox gewährt.

So sieht LAB03 in meiner Testumgebung aus:

Selbstverständlich können weitere AD-Gruppen erstellt werden.

Microsoft AD FS-Konfiguration

Starten Sie die AD FS-Verwaltungskonsole und wählen Sie im linken Navigationsbereich „Relying Party Trusts“ aus. Wählen Sie dann auf der rechten Seite den Eintrag „Relaying Party Trust hinzufügen“ aus.

Als nächstes müssen verschiedene Transformationsregeln in der Schadensrichtlinie implementiert werden. Damit die korrekten Werte aus AD FS oder Active Directory an die NetBox übergeben werden.

Außerdem muss die Funktion „RelayState“ aktiviert werden, sofern dies noch nicht geschehen ist. Starten Sie dazu PowerShell auf dem AD FS-Server und führen Sie den folgenden Befehl aus.

Set-AdfsProperties -EnableRelayStateForIdpInitiatedSignOn $true

Wenn kein Text ausgegeben wird, wurde der Befehl erfolgreich ausgeführt.

NetBox-Konfiguration

NetBox wurde mithilfe des folgenden Artikels (Link) installiert. Die folgenden Dateien und Konfigurationen stammen von diesem GitHub-Fork.

Konfigurieren Sie das SAML-Plugin

Erstellen Sie die Datei local_requirements.txt mit den erforderlichen Python-Modulen.

Erstellen Sie die Datei /opt/netbox/netbox/netbox/samlgetgroups.py mit diesem Inhalt.

Wer bisher aufgepasst hat, wird Zeile 19 bemerken. Dieses Skript wird verwendet, um AD-Gruppen und NetBox-Gruppen zuzuweisen. Dazu gehört auch die Vergabe von Rechten an NetBox-Benutzer „Employee“ und „Superuser“. Das bedeutet, dass das Skript natürlich durch das Kopieren der Zeilen 19-23 problemlos erweitert werden kann.

Abschließend muss die bestehende Datei /opt/netbox/netbox/netbox/configuration.py angepasst werden. Zunächst wird jedoch eine Sicherungskopie der Datei erstellt.

cp /opt/netbox/netbox/netbox/configuration.py /opt/netbox/netbox/netbox/configuration.py.$(date '+%Y-%m-%d_%H-%M-%S')

Öffnen Sie dann die Datei /opt/netbox/netbox/netbox/configuration.py in einem Editor (z. B. vim).

Kommentieren oder löschen Sie zunächst die folgenden Zeilen (von 193):

Nachfolgend finden Sie die Konfiguration für die SAML-Authentifizierung. Dies sollte der Situation angepasst werden.

# Remote authentication support
EMOTE_AUTH_ENABLED = True
REMOTE_AUTH_BACKEND = 'social_core.backends.saml.SAMLAuth'
SOCIAL_AUTH_SAML_SP_ENTITY_ID = '
SOCIAL_AUTH_SAML_SP_PUBLIC_CERT = ''
SOCIAL_AUTH_SAML_SP_PRIVATE_KEY = ''
SOCIAL_AUTH_SAML_ORG_INFO = {
                "en-US": {
                "name": "Netbox",
                "displayname": "Netbox",
                "url": "
        }
}
SOCIAL_AUTH_SAML_TECHNICAL_CONTACT = {
                "emailAddress": "[email protected]",
                "givenName": "Technical"
                }

SOCIAL_AUTH_SAML_SUPPORT_CONTACT = {
                "emailAddress": "[email protected]",
                "givenName": "Support"
                }
SOCIAL_AUTH_SAML_ENABLED_IDPS = {
                "SAML": {
                "entity_id": "
                "url": "
                "attr_user_permanent_id": "name_id",
                "attr_username": "name_id",
                "attr_first_name": "attr_first_name",
                "attr_last_name": "attr_last_name",
                "attr_email": "attr_email",
                "attr_full_name": "attr_full_name",
                "x509cert": "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"
                }
}

REMOTE_AUTH_AUTO_CREATE_USER = True

SOCIAL_AUTH_SAML_EXTRA_DATA = [(" "Group")]
SOCIAL_AUTH_SAML_SECURITY_CONFIG = {"requestedAuthnContext": False}
SOCIAL_AUTH_REDIRECT_IS_HTTPS = True

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details',
    'social_core.pipeline.social_auth.social_uid',
    'social_core.pipeline.social_auth.social_user',
    'social_core.pipeline.user.get_username',
    'social_core.pipeline.social_auth.associate_by_email',
    'social_core.pipeline.user.create_user',
    'social_core.pipeline.social_auth.associate_user',
    'netbox.authentication.user_default_groups_handler',
    'social_core.pipeline.social_auth.load_extra_data',
    'social_core.pipeline.user.user_details',
    'netbox.samlgetgroups.set_role',
)

Erläuterungen und Hinweise:

  • Der Parameter „SOCIAL_AUTH_SAML_ENABLED_IDPS -> x509cert“ enthält das Zertifikat im Base64-Format, das AD FS zum Entschlüsseln des Tokens verwendet.
  • Die Parameter „SOCIAL_AUTH_SAML_ORG_INFO -> url“ und „SOCIAL_AUTH_SAML_SP_ENTITY_ID“ stimmen mit dem in AD FS als „Identifiers“ im Feld Relay Party Trusts des Eintrags „netbox01.lab03.daniel.wydler.eu“ angegebenen Wert überein.
  • Ersetzen Sie den FQDN „login.lab03.daniel.wydler.eu“ durch Ihren Wert für die AD FS-Instanz.

Nachdem alle Anpassungen vorgenommen wurden, wird die Konfiguration ab Zeile 193 in die Datei /opt/netbox/netbox/netbox/configuration.py eingefügt.

Damit die Änderungen wirksam werden, muss das Skript upgrade.sh ausgeführt werden.

/opt/netbox/upgrade.sh

Wenn der Prozess fehlerfrei verlief, sollte ein NetBox-Dienst neu gestartet werden.

systemctl restart netbox netbox-rq

Alles

Wenn Sie anschließend die NetBox-Benutzeroberfläche in Ihrem Browser aufrufen, erscheinen die folgenden Anmeldeoptionen.

Wenn Sie die Anmeldeoptionen entfernen und direkt zu SAML umleiten möchten, muss der folgende Abschnitt zur Nginx-Konfiguration hinzugefügt werden.

# Weiterleitung zur SAML Anmeldung
    location /login/ {       
            return 301  $scheme://$http_host/oauth/login/saml/?next=%2F&idp=SAML;
    }

Vergessen Sie nicht, Nginx neu zu starten, nachdem Sie die Änderung vorgenommen haben.

systemctl restart nginx.service

Dies ist notwendig, damit die Änderung wirksam wird.

Funktionstest

Öffnen Sie die NetBox-Benutzeroberfläche in einem Browser Ihrer Wahl. Wenn in der Nginx-Konfiguration die direkte Weiterleitung an SAML aktiviert ist (siehe Kapitel Sonstiges), erscheint diese Abfrage nicht.

Das bedeutet, dass Sie sich weiterhin direkt bei AD FS anmelden können.

Die Registrierung war erfolgreich und es gelten auch die angegebenen Regeln und Ansprüche.

Viel Spaß beim Ausprobieren. 🙂



technische Probleme auf

Leave a Reply

Your email address will not be published. Required fields are marked *