Resource based constrained delegation

Kerberos voor SQL Server (deel 2) : Resource based constrained delegation

In deze blog over Kerberos aandacht voor ‘Resource based constrained delegation’. Dit is een nieuwe methode voor Kerberos delegations welke voor grotere BI projecten een interessante oplossing kan zijn. Het grote voordeel is dat het eenvoudiger is te configureren en zelfs via een AD groep kan worden ingericht. Alhoewel de nieuwe methode al sinds de introductie van Windows Server 2012 beschikbaar is wordt deze nog niet veel toegepast.

Samengevat zijn dit de stappen om Kerberos in te richten:

  1. Aanpassen connection strings
  2. Herstart services met een AD service account
  3. Registreer SPN’s voor de service accounts
  4. Aanmaken delegations op service account
  5. Herstarten services

Deze stappen zijn uitgebreid beschreven in mijn blog: Kerberos voor SQL Server

Wat is er anders

De methode ‘Resource based constrained delegation’ is een alternatief op stap 4: Aanmaken delegations. Bij de ‘oude’ methode moet je eerst op het tweede account de SPN’s aanmaken en vervolgens op het eerste account de delegations maken naar deze SPN’s. Bij de nieuwe methode volstaat het om bij het tweede account de SPN’s aan te maken en op te geven welke accounts een delegation mogen uitvoeren naar deze SPN’s.  Samengevat, zowel de SPN’s als de delegations worden nu alleen op het tweede account uit de double hop gedefinieerd.

Dit gebeurt via de property PrincipalsAllowedToDelegateToAccount. Het is dus niet meer nodig om bij meerdere accounts de individuele SPN’s op te geven voor de delegations.

Deze nieuwe methode van delegations heeft de volgende voordelen:

1. Eenvoudiger beheer. Bij de oude methode is het een hele toer om administratie te voeren over alle SPN’s en de daaraan gerelateerde delegations bij een groter project of serverpark.

2. Het is mogelijk om alle account die een delegation moeten hebben in een AD groep te zetten en deze toe te wijzen als PrincipalsAllowedToDelegateToAccount. Dit geeft een goed overzicht van alle accounts die beschikbaar zijn voor delegations en het is ook gemakkelijker te beheren.

3. Resource based constrained delegation kan over de grenzen van een Active Directory domein of Active Directory forrest heen.

De Resource based constrained delegation en de ‘oude’ variant kunnen naast elkaar worden gebruikt. Op een service account kunnen dus delegations zijn opgevoerd via PrincipalsAllowedToDelegateToAccount en d.m.v. delegations op SPN’s naar een ander account.

Het nadeel is echter dat er geen scherm of GUI beschikbaar is om dit te configureren zodat de configuratie geheel met PowerShell moet worden uitgevoerd. Het volstaat echter om d.m.v. PowerShell alleen de property -PrincipalsAllowedToDelegateToAccount te vullen zoals aangegeven in afbeelding 1.

Afbeelding 1. De Delegations naar de SPN’s op het account svcRSServer1 zijn vervallen en de property PrincipalsAllowedToDelegateToAccount voor het account svcSQLServer2 is nu toegevoegd.

Voorwaarden

Bij het uitvoeren van het PowerShell commando wordt er niet op gecontroleerd, maar voor een succesvolle Kerberos delegation moeten er SPN’s zijn gecreëerd voor beide accounts. Dus in het voorbeeld moeten er SPN’s zijn op svcRSServer1 en svcSQLServer2.

Net zoals bij de ‘oude’ variant dient de service gestart te zijn met een AD account of met een build-in account zoals SYSTEM of NETWORK SERVICES. Bij het gebruik van een build-In account moet de property PrincipalsAllowedToDelegateToAccount van de server worden gebruikt.

Voor een delegation over de grenzen van een AD domein heen is een trust nodig tussen deze AD domeinen.

PowerShell

Voordat je met PowerShell Kerberos kunt inrichten dien je de Active Directory module voor PowerShell te installeren. Gebruik hiervoor deze twee commando’s:

Add-WindowsFeature RSAT-AD-PowerShell

Import-Module ActiveDirectory

Voor het configureren van het voorbeeld uit bovenstaande figuur zorg je er voor dat eerst alle noodzakelijke SPN’s zijn aangemaakt en vervolgens geef je het PowerShell commando:

Set-ADUser svcSQLServer2 -PrincipalsAllowedToDelegateToAccount svcRSServer1

Voor het raadplegen van de eigenschappen van een user of regulier service account gebruik je dit PowerShell commando:

Get-ADUser svcSQLServer2 -Property PrincipalsAllowedToDelegateToAccount

Voor de PowerShell commando’s is er een verschil of je werkt met een useraccount, computer of met een managed service account . Als je de gegevens van een computer of een (group) managed service account wilt raadplegen gebruik je de commando’s Get-ADComputer en Get-ADServiceAccount. Voor het aanpassen gebruik je de commando’s Set-ADComputer en Set-ADServiceAccount

Beheer via een AD groep

De nieuwe methode wordt pas echt krachtig als je geen individuele accounts maar een AD groep specificeert als PrincipalsAllowedToDelegateToAccount. Bij grotere projecten gebruik je dezelfde groep voor alle betrokken service accounts zodat alle delegations voor het gehele project maar op een plek beheerd hoeven te worden.

Creëer in AD een security groep en geef deze op als ‘PrincipalsAllowedToDelegateToAccount’. In deze groep kunnen vervolgens de gewenste accounts worden geplaatst die een delegation naar het service account mogen hebben. Een bijkomend voordeel is dat  het bekende scherm gebruikt kan worden voor een overzicht van alle betrokken accounts.

Set-ADUser svcSQLServer2 -PrincipalsAllowedToDelegateToAccount "svcSQLServer2 AllowedToDelegate Group"

 Afbeelding 2: AD groep voor delegations waarbij er ook andere accounts en servers zijn toegevoegd

Bij het gebruik van een groep kunnen accounts, computers, service accounts en zelfs geneste groepen worden gecombineerd.

Een groep voor project

De groep met accounts kan worden gebruikt voor de delegations op meerdere accounts door dezelfde groep op te geven via de property PrincipalsAllowedToDelegateToAccount. De administratie van de delegations wordt hierdoor sterk vereenvoudigd. Creëer eerst alle noodzakelijke SPN’s op alle betrokken accounts. Maak een AD groep en koppel deze per service account met het Powershell commando:

Set-ADUser <accountnaam> -PrincipalsAllowedToDelegateToAccount <AD groep>

Voeg alle service accounts die een delegation nodig hebben toe aan deze AD groep. Dit levert de inrichting zoals beschreven in Afbeelding 3.

Afbeelding 3: Inrichting van Kerberos delegations via een AD groep voor een BI project

Leave a Comment

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