samedi 8 mars 2014

Délégation d'administration Active Directory et Powershell


Bonjour à tous.

Je vous propose aujourd'hui un article sur la délégation d'administration Active Directory et Powershell.

Bien évidemment on peut toujours utiliser l'assistant de délégation d'administration ou les commandes dsacls pour mettre en place la délégation d'administration mais il est plus intéressant d'utiliser les fonctionnalités apportées par Powershell.


Avant de commencer il faut déjà parler du lecteur AD:\ qui est créé lors de l'import du module ActiveDirectory.
Lorsque vous importez le module Powershell ActiveDirectory, un lecteur nommé AD est créé et est mappé à un des contrôleurs de domaine.
 


Vous pouvez vous déplacer dans ce lecteur comme dans une arborescence classique de fichier.

 


Par défaut le lecteur est mapper sur le domaine mais il est possible de créer un autre lecteur et de le mapper un autre domaine ou une autre forêt avec la Cmdlet New-PSDrive.



Pour faire notre délégation, on va se servir de ce lecteur et de la Cmdlet Get-ACL.
En effet, on peut récupérer les ACL d'objets Active Directory via notre lecteur.



On récupère un objet de classe ActiveDirectorySecurity.


On va s'intéresser de plus près maintenant aux méthodes proposées par cette classe.
La liste des méthodes la classe est disponible dans le lien suivant : Méthodes ActiveDirectorySecurity

La méthode qui nous intéresse principalement est la méthode AddAccessRule qui permet d'ajouter une règle d'accès à la liste DACL d'un objet.

Le paramètre de cette méthode est un objet de classe ActiveDirectoryAccessRule qui représente une entrée de contrôle d'accès (ACE) dans la liste de contrôle d'accès discrétionnaire (DACL).

Nous allons donc voir comment construire des objets de classe ActiveDirectoryAccessRule.

Il existe différents constructeurs pour initialiser une nouvel objet de classe ActiveDirectoryAccessRule : Constructeurs ActiveDirectoryAccessRule

On utilisera ces différents constructeurs en fonction du besoin.


Prenons un exemple, j'ai une OU nommée Utilisateurs sur laquelle je veux déléguer la création de compte utilisateurs à un groupe nommé "Create User Accounts".

Je commence par récupérer les ACL de l'OU



Maintenant je dois construire mon ACE. J'ai d'abord besoin du SID de mon groupe.



Ensuite j'ai besoin du droit que je souhaite autoriser, à savoir la création d'objet enfant (de type utilisateur). La liste des droits est disponible ici : ActiveDirectoryRights


 Puis du type de contrôle d'accès qui est autoriser : AccessControlType


Et enfin le GUID du type d'objet auquel la règle d'accès doit s'appliquer, les objets de type utilisateur. Les GUID des classes d'objets sont disponibles ici : All Classes



On peut maintenant créer notre ACE.


Puis l'ajouter aux ACL de notre OU.


Et c'est terminé. On peut vérifier que la délégation a bien été faite.



Je n'irai pas plus loin dans la démonstration, ça peut paraitre au premier abord assez laborieux.
Une fois qu'on a jonglé avec les différents constructeurs ça devient vite compréhensible.

Voici le code que j'ai utilisé :

$ACL = Get-Acl "AD:\OU=Utilisateurs,DC=ROOT,DC=ADDS"

$Group = Get-ADGroup "Create User Accounts"

[System.Security.Principal.SecurityIdentifier] $SID = $Group.SID
[System.DirectoryServices.ActiveDirectoryRights] $ADRights = "CreateChild"
[System.Security.AccessControl.AccessControlType] $AccCtrlType = "Allow"
[System.guid] $GUID = "bf967aba-0de6-11d0-a285-00aa003049e2"

$ACE = New-Object -TypeName System.DirectoryServices.ActiveDirectoryAccessRule -ArgumentList $SID,$ADRights,$AccCtrlType,$GUID

$ACL.AddAccessRule($ACE)
$ACL|Set-ACL


L'intérêt est bien évidemment de pouvoir scripter un déploiement complet du modèle de délégation en utilisant les autres fonctionnalités de Powershell.

Je travaille en ce moment sur une autre série d'articles sur la délégation d'administration, je fournirai à chaque fois le code Powershell correspondant.

J'espère que cet article vous aura intéressé.

A bientôt et bon scripting

1 commentaire:

  1. Salut gregory, j'ai une petite question, dans " ActiveDirectoryRights " je ne trouve pas l'option "Reset Password". peux tu me renseigner stp si tu as l'information. Merci

    RépondreSupprimer