NetScaler Ressourcenzuweisung an Gruppen – Teil II

Hallo zusammen

Im letzten Artikel ging ich auf die Zuweisung von Session Policies an Gruppen innerhalb NetScaler Gateway ein. Auch wenn dieser dem einen oder anderen Leser vielleicht sehr banal vorkam, so wird dies in Kursen und im Support öfter mal angefragt.

In diesem Artikel wollen wir uns die Möglichkeiten anschauen, Authorization Policies des AAA Features aufgrund Gruppenmitgliedschaften ausführen zu lassen.

Zwar gibt es verlockenderweise auch Gruppen und Benutzer:

NS-AAA-Groups01

Und man erhält sogar die Option um Authorization Policies zuzuweisen, jedoch wird man bald an einer Fehlermeldung scheitern :-(

NS-AAA-Groups02

Somit ist diese Möglichkeit leider eben deren keine.

Wir müssen also auf eine andere Variante zurückgreifen und zwar auf die Expressions. Bevor ich diese genauer erläutere, bauen wir uns erst ein Szenario:

Gehen wir davon aus, dass wir einen bestimmten Backendservice mittels LB bereitstellen und zusätzlich mittels AAA (ohne SSO) absichern wollen.
Die Anmeldung erfolgt via LDAP und die Gruppen werden entsprechend ermittelt.
Die Gruppe G_PIT_Backend soll Zugriff erhalten, während den restlichen Benutzer der Zugriff verweigert werden soll.

Als erstes erstellen wir die LDAP Server und Policy inkl. Ermittlung der Gruppen:

add authentication ldapAction ldap-srv-PIT -serverIP 192.168.100.50 -serverPort 389 -ldapBase "dc=domain,dc=pit" -ldapBindDn svcldap@domain.pit -ldapBindDnPassword Password1 -ldapLoginName sAMAccountName -groupAttrName memberOf -subAttributeName cn
add authentication ldapPolicy ldap-pol-PIT ns_true ldap-srv-PIT

Im weiteren Schritt wird der AAA vServer für die spätere Authentifizierung erstellt:

add authentication vserver aaa-vsrv-aaa.domain.pit SSL 192.168.200.50 443
bind authentication vserver aaa-vsrv-aaa.domain.pit -policy ldap-pol-PIT -priority 100
bind ssl vserver aaa-vsrv-aaa.domain.pit -certkeyName aaa.domain.pit

Nun können wir wie gewohnt unseren Backendservice mittels LB bereitstellen, jedoch zusätzlich den AAA vServer zur Authentifizierung hinzufügen:

add server INTRANET01 192.168.100.81
add server INTRANET02 192.168.100.82
add service svc-https-intranet01 INTRANET01 SSL 443
add service svc-https-intranet02 INTRANET02 SSL 443
add lb vserver lb-vsrv-intranet.domain.pit SSL 192.168.200.80 443 -persistenceType COOKIEINSERT -persistenceBackup SOURCEIP -AuthenticationHost aaa.domain.pit -Authentication ON -authnVsName aaa-vsrv-aaa.domain.pit
bind lb vserver lb-vsrv-intranet.domain.pit svc-https-intranet01
bind lb vserver lb-vsrv-intranet.domain.pit svc-https-intranet02
bind lb vserver lb-vsrv-intranet.domain.pit -certkeyName intranet.domain.pit

Nach einem ersten Test stellen wir nun fest, dass die Authentifizierung funktioniert. Jedoch erhält aktuell noch jeder Benutzer Zugriff ins Backend.

Um die Zugriffe ins Backend zu steuern erstellen wir nun zwei Authorization Policies, wobei die eine alles sperrt und die andere den Zugriff für unsere Gruppe gewährt:

add authorization policy DenyAll HTTP.REQ.IS_VALID DENY
add authorization policy IntranetBackendAllow "HTTP.REQ.USER.IS_MEMBER_OF(\"G_PIT_Backend\")" ALLOW

Diese Policies müssen wir nun noch in der richtigen (!) Priorität dem vorhin erstellen LB vServer zuweisen:

bind lb vserver LB-vsrv-intranet.domain.pit -policyName IntranetBackendAllow -priority 100 -gotoPriorityExpression END -type REQUEST
bind lb vserver LB-vsrv-intranet.domain.pit -policyName DenyAll -priority 200 -gotoPriorityExpression END -type REQUEST

Ab jetzt erhalten nur noch die Mitglieder unserer definierten Gruppe den Zugriff ins Backend.

Viel Erfolg beim Nachbauen. :-)

Skript: NS-ResToGroup2