adpypsrp
Description
Ce client traite les événements de type Users, Groups et UserPasswords, et stocke les données dans un Active Directory via des commandes Powershell sur pypsrp.
La liste des paramètres standardAttributes
contient les paramètres des cmdlet utilisées pour les utilisateurs (New-ADUser
/ Set-ADUser
) et les groupes (New-ADGroup
/ Set-ADGroup
).
La liste de paramètres otherAttributes
peut contenir des noms d’attributs LDAP (ldapDisplayName
) disponibles pour gérer ceux qui ne sont pas représentés par les paramètres de cmdlet pour les utilisateurs et les groupes.
Les clés du modèle de données local DOIVENT exister dans standardAttributes
ou otherAttributes
, et seront utilisées comme paramètres de cmdlet avec leurs valeurs associées, permettant de gérer tous les attributs AD.
GroupsMembers
associera uniquement un User
à un Group
.
SubGroupsMembers
associera uniquement un Group
à un Group
, permettant ainsi de gérer les groupes imbriqués.
Pour éviter les problèmes de sécurité et les cas particuliers avec la corbeille, un mot de passe aléatoire complexe est défini lors de la création de l’utilisateur. Ce mot de passe inconnu sera écrasé par le prochain événement UserPassword
de User
. Cela évite d’avoir un compte activé sans mot de passe.
La corbeille ne fait que désactiver le compte.
Configuration
hermes-client-usersgroups_adpypsrp:
WinRM: # Pour plus de détails sur les options, vous pouvez consulter https://pypi.org/project/pypsrp/ - "Connection"
# OBLIGATOIRE : URI et port du serveur AD
host: radon1.in.insa-strasbourg.fr
port: 5986
# OBLIGATOIRE : identifiants de connexion au serveur AD
login: administrator
password: "s3cReT_p4s5w0rD"
# Par défaut : true
ssl: true
# Par défaut : true
ssl_cert_validation: false
# Par défaut : true
credssp_disable_tlsv1_2: true
# Par défaut : "auto". Les valeurs valides sont [auto, always, never]
encryption: always
# Par défaut : "wsman"
path: "wsman"
# Par défaut : "negotiate". Les valeurs valides sont [basic, certificate, negotiate, ntlm, kerberos, credssp]
auth: kerberos
# Par défaut : "WSMAN". Permet de définir la partie service du SPN calculé, utilisée lors de l'authentification au serveur.
# Ceci n'est valide que si l'authentification négociée est Kerberos, ou si Kerberos a été explicitement choisi.
# Si vous obtenez l'erreur "Server not found in Kerberos database", vous pouvez essayer de définir "HTTP" ici.
negotiate_service: WSMAN
AD_domain:
# OBLIGATOIRE : nom de domaine AD et DN
name: in.insa-strasbourg.fr
dn: DC=in,DC=insa-strasbourg,DC=fr
# OBLIGATOIRE : OUs où les utilisateurs et les groupes seront stockés
users_ou: OU=INSA,OU=People,DC=in,DC=insa-strasbourg,DC=fr
groups_ou: OU=INSA,OU=Groups,DC=in,DC=insa-strasbourg,DC=fr
# Facultatif, permet de forcer l'ajout de chaque utilisateur à la liste de groupes spécifiée
# L'ajout de l'appartenance au groupe se fait uniquement à la création de l'utilisateur : tout
# changement de valeur de ce paramètre n'impactera que les utilisateurs qui seront créés ultérieurement
Users_mandatory_groups:
- MandatoryGroup1
- MandatoryGroup2
# Définit les paramètres de cmdlet qui peuvent être définis et le type valide de la valeur qui leur est associée
# Vous devriez vraiment le définir tel quel.
standardAttributes:
Users:
AccountExpirationDate: "<DateTime>"
AccountNotDelegated: "<Boolean>"
AllowReversiblePasswordEncryption: "<Boolean>"
AuthenticationPolicy: "<ADAuthenticationPolicy>"
AuthenticationPolicySilo: "<ADAuthenticationPolicySilo>"
AuthType: "<ADAuthType>"
CannotChangePassword: "<Boolean>"
ChangePasswordAtLogon: "<Boolean>"
City: "<String>"
Company: "<String>"
CompoundIdentitySupported: "<Boolean>"
Country: "<String>"
# Credential: "<PSCredential>" # Inutile : spécifie les identifiants de connexion du compte utilisateur à utiliser pour effectuer cette tâche
Department: "<String>"
Description: "<String>"
DisplayName: "<String>"
Division: "<String>"
EmailAddress: "<String>"
EmployeeID: "<String>"
EmployeeNumber: "<String>"
Enabled: "<Boolean>"
Fax: "<String>"
GivenName: "<String>"
HomeDirectory: "<String>"
HomeDrive: "<String>"
HomePage: "<String>"
HomePhone: "<String>"
KerberosEncryptionType: "<ADKerberosEncryptionType>"
LogonWorkstations: "<String>"
Manager: "<ADUser>"
MobilePhone: "<String>"
Office: "<String>"
OfficePhone: "<String>"
Organization: "<String>"
OtherName: "<String>"
PasswordNeverExpires: "<Boolean>"
PasswordNotRequired: "<Boolean>"
POBox: "<String>"
PostalCode: "<String>"
# PrincipalsAllowedToDelegateToAccount: "<ADPrincipal[]>" # Ne sera pas défini
ProfilePath: "<String>"
SamAccountName: "<String>"
ScriptPath: "<String>"
# Server: "<String>" # Inutile : spécifie l'instance de service de domaine Active Directory à laquelle se connecter
SmartcardLogonRequired: "<Boolean>"
State: "<String>"
StreetAddress: "<String>"
Surname: "<String>"
Title: "<String>"
# TrustedForDelegation: "<Boolean>" # Ne sera pas défini
UserPrincipalName: "<String>"
Groups:
AuthType: "<ADAuthType>"
# Credential: "<PSCredential>" # Inutile : spécifie les identifiants de connexion du compte utilisateur à utiliser pour effectuer cette tâche
Description: "<String>"
DisplayName: "<String>"
GroupCategory: "<ADGroupCategory>"
GroupScope: "<ADGroupScope>"
HomePage: "<String>"
ManagedBy: "<ADPrincipal>"
SamAccountName: "<String>"
# Server: "<String>" # Inutile : spécifie l'instance de service de domaine Active Directory à laquelle se connecter
# Définit les attributs LDAP (ldapDisplayName) à gérer, qui ne sont pas gérés par les attributs standard.
# Vous pouvez définir les valeurs souhaitées. Les valeurs ci-dessous sont données à titre d'exemple.
otherAttributes:
Users:
otherMobile: "<String[]>"
otherTelephone: "<String[]>"
url: "<String[]>"
# Paramètres de génération de mot de passe aléatoire facultatifs. Par défaut : les valeurs spécifiées ci-dessous
# Un mot de passe aléatoire est généré pour initialiser un utilisateur dont le mot de passe n'est pas encore disponible
random_passwords:
# Longueur du mot de passe
length: 32
# Si true, le mot de passe généré peut contenir des lettres majuscules
with_upper_letters: true
# Le mot de passe généré contiendra au moins ce nombre de lettres majuscules
minimum_number_of_upper_letters: 1
# Si true, le mot de passe généré peut contenir des lettres minuscules
with_lower_letters: true
# Le mot de passe généré contiendra au moins ce nombre de lettres minuscules
minimum_number_of_lower_letters: 1
# Si true, le mot de passe généré peut contenir des chiffres
with_numbers: true
# Le mot de passe généré contiendra au moins ce nombre de chiffres
minimum_number_of_numbers: 1
# Si true, le mot de passe généré peut contenir des caractères spéciaux
with_special_chars: true
# Le mot de passe généré contiendra au moins ce nombre de caractères spéciaux
minimum_number_of_special_chars: 1
# Si true, le mot de passe généré ne contiendra pas les caractères spécifiés dans 'ambigous_chars_dictionary'
avoid_ambigous_chars: false
# Le dictionnaire des caractères ambigus (sensibles à la casse) qui peuvent être interdits dans le mot de passe, même si certains sont présents dans d'autres dictionnaires
ambigous_chars_dictionary: "lIO01"
# Le dictionnaire des lettres (insensibles à la casse) autorisées dans le mot de passe
letters_dictionary: "abcdefghijklmnopqrstuvwxyz"
# Le dictionnaire des caractères spéciaux autorisés dans le mot de passe
special_chars_dictionary: "!@#$%^&*"
Datamodel
Les types de données suivants peuvent être configurés :
Users
: nécessite que l’attributSamAccountName
soit définiUserPasswords
: nécessite évidemmentUsers
, et que l’attributuser_pkey
corresponde aux clés primaires deUsers
, et nécessite l’attributpassword
. Tous les autres attributs seront ignorésGroups
: nécessite que l’attributSamAccountName
soit définiGroupsMembers
: nécessite évidemmentUsers
etGroups
, et nécessite que les attributsuser_pkey
etgroup_pkey
correspondent aux clés primaires deUsers
etGroups
. Tous les autres attributs seront ignorésSubGroupsMembers
: nécessite évidemmentGroups
, et nécessite que les attributssubgroup_pkey
etgroup_pkey
correspondent respectivement à la clé primaire du sous-groupe à affecter, et à celle du groupe d’affectation. Tous les autres attributs seront ignorés
datamodel:
Users:
hermesType: your_server_Users_type_name
attrsmapping:
user_pkey: user_primary_key_on_server
SamAccountName: login_on_server
UserPrincipalName: "{{ login_on_server ~ '@YOU.AD.DOMAIN.TLD' }}"
# Pas obligatoire, juste présent pour exemple :
MobilePhone: "{{ (mobile | default([None]))[0] }}" # <String>
otherMobile: "{{ (mobile | default([]))[1:] }}" # <String[]>
# ...
UserPasswords:
hermesType: your_server_UserPasswords_type_name
attrsmapping:
user_pkey: user_primary_key_on_server
password: cleartext_password_on_server
# ...
Groups:
hermesType: your_server_Groups_type_name
attrsmapping:
group_pkey: group_primary_key_on_server
SamAccountName: group_name_on_server
# ...
GroupsMembers:
hermesType: your_server_GroupsMembers_type_name
attrsmapping:
user_pkey: user_primary_key_on_server
group_pkey: group_primary_key_on_server
# ...
SubGroupsMembers:
hermesType: your_server_SubGroupsMembers_type_name
attrsmapping:
subgroup_pkey: subgroup_primary_key_on_server
group_pkey: group_primary_key_on_server
# ...