Merci à tous nos partenaires !
24 octobre 2019 - PARIS
@IdentityDays #identitydays2019
Optimisation et
administration avancée
d’Active Directory
Thierry - DEMAN
24 octobre 2019 - PARIS
Identity Days 2019
Thierry Deman
Architecte Sénior chez EXAKIS-NELITE
Office Apps&services MVP (18 awards)
Twitter : t_deman
Audit, Migration, …
Auteur chez ENI (Windows
administration avancée)
• Présentation rapide du Schéma (Classes/Attributs)
• Ajouter de champ dans le catalogue global
• Ajouter un index sur un attribut
• Création/utilisation de partition supplémentaire,
• Nettoyage des permissions dans AD (Par script Powershell)
• Les extensions de schéma
• Extension Exchange (Pourquoi/Pourquoi pas)
• Règles de la création de champs supplémentaires (Inscription)
• Recherche avancée dans AD (DSA.msc), Les recherches
personnalisées (Dans DSA.MSC et ADSIEDIT.MSC)
• L’évolution d’AD et la sécurité
AGENDA DE LA CONFÉRENCE
24 octobre 2019 - PARIS
Identity Days 2019
Présentation rapide du Schéma
Identity Days 2019
24 octobre 2019 - PARIS
Présentation rapide du Schéma
• Plusieurs outils : Console Schéma (à créer), ADSIEDIT.MSC
• Autres outils: Ldif.exe, browser Ldap (Softerra)
• Classes = Objets (avec notion d’héritage)
• Account, User, Computer,…
• Ensemble d’attributs obligatoires et facultatifs
269 classes sur un AD seul, 649 classes avec Exchange, SFB, … installés
• Attributs = Propriétés
1498 attributs sur un AD seul, 4106 attributs avec Exchange,…
(Classes/Attributs)
Identity Days 2019
24 octobre 2019 - PARIS
Top Person OrganizationalPerson user InetOrgPerson
Computer
Contact
Ajout d’un champ dans le catalogue global
Identity Days 2019
24 octobre 2019 - PARIS
Ajout de champ dans le catalogue global
• Accès classique
get-aduser -server Localhost:3268 -filter {cond} -Properties *
- Le fait d’indiquer le port 3268 (ou 3269) indique l’utilisation de l’annuaire restreint
du catalogue global. Par défaut, le port 389 connecte au domaine du DC indiqué.
- Recherche en 2 étapes dans le catalogue global (Forêt), puis recherche dans le
domaine correspondant de l’objet.
• Une requête pour trouver le DN de l’objet (et son domaine d’origine)
get-aduser -server localhost:3268 "jdupont"
- Puis une autre requête pour récupérer l’objet (à partir du DN)
get-aduser "CN=Jean DUPONT,CN=Users,DC=MaSociete,DC=Priv" -property EmployeeNumber
Identity Days 2019
24 octobre 2019 - PARIS
Exemple de recherche d’une propriété « EmployeeNumber »
Modification du schéma par la console Schéma
• Se créer la console si elle n’existe pas.
• regsvr32 schmmgmt.dll
• Charger la console (mmc.exe , Ajouter le « Snap-in »
Schéma Active directory)
• L’avantage de cette console est la recherche
facile des noms
• Il suffit de cocher la case « répliquer cet attribut… »
et d’appliquer
• Un événement sera logué sur cette modification
avec l’exécutant.
Identity Days 2019
24 octobre 2019 - PARIS
Exemple de recherche d’une propriété « EmployeeNumber »
La modification peut aussi se faire en Powershell
• Accès à l’objet dans le schéma:
$a=get-adobject -searchbase "CN=Schema,CN=Configuration,DC=MaSociete,DC=Priv"
-ldapfilter "(lDAPDisplayName=EmployeeNumber)“
• Modification de l’objet dans le schéma
set-adobject $a.DistinguishedName -add @{isMemberOfPartialAttributeSet=$true}
• Accès direct à l’attribut
get-aduser -server localhost:3268 "jdupont" -property EmployeeNumber
Identity Days 2019
24 octobre 2019 - PARIS
Toutes les commandes AD peuvent se faire aussi bien sur la partition du schéma, comme la partition par défaut
Liste des champs du catalogue global
• Pour un AD sans Exchange installé :
Un objet de type « InetOrgPerson » contient 27 attributs dont 9 sont dans le CG
Un objet de type « user » contient 156 attributs dont 21 sont dans le CG
• Pour un objet « user » dans un AD avec Exchange et SFB installés
191 attributs dont 57 dans le GC
Identity Days 2019
24 octobre 2019 - PARIS
Toutes les commandes AD peuvent se faire aussi bien sur la partition du schéma, comme la partition par défaut
$a=get-adobject -searchbase "CN=Schema,CN=Configuration,DC=deman,DC=local" -ldapfilter
"(&(objectclass=ClassSchema)(name=user))" -properties maycontain,mustcontain,systemmaycontain,systemmustcontain
$b=$a.maycontain+$a.mustcontain+$a.systemmaycontain+$a.systemmustcontain; echo $b |measure
foreach ($i in $b) { get-adobject -searchbase "CN=Schema,CN=Configuration,DC=deman,DC=local" -ldapfilter
"(&(lDAPDisplayName=$i)(isMemberOfPartialAttributeSet=TRUE))" }
Ajouter un index sur un attribut
Identity Days 2019
24 octobre 2019 - PARIS
Ajouter un index sur un attribut
• L’indexation est mémorisée dans
l’attribut « Searchflags »
0x1 = Index
0x2 = Index spécifique pour chaque
conteneur/OU
0x4= Autorise l’ANR
0x10= Copie l’attribut (si copie de l’objet)
0x20 = Tuple Index (Améliore l’index si * en
début)
0x40 = VLV Search
Identity Days 2019
24 octobre 2019 - PARIS
Ajout en mode graphique
Exemple d’utilisation
• Avant création de l’index
measure-command {foreach ($i in 1..1000) {get-aduser -filter {employeeNumber -like "1234567"}}}
TotalMilliseconds : 4764,79
• Après création de l’index
measure-command {foreach ($i in 1..1000) {get-aduser -filter {employeeNumber -like "1234567"}}}
TotalMilliseconds : 2413,2859
Si l’index est supprimé, on retrouve la durée initiale.
Identity Days 2019
24 octobre 2019 - PARIS
Création/utilisation de partition supplémentaire
Identity Days 2019
24 octobre 2019 - PARIS
Création/utilisation de partition supplémentaire
• Création d’une partition gérée par un premier serveur DNS
dnscmd DC2016 /createdirectorypartition MyCustomPartition.MaSociete.com
• Ajout d’un 2ème serveur DC/DNS gérant la partition
dnscmd DC2 /enlistdirectorypartition MyCustomPartition.MaSociete.com
• Créer un point de connexion
repadmin /kcc DC2016
Identity Days 2019
24 octobre 2019 - PARIS
Exemple d’utilisation de cette partition
• Création d’une OU
New-ADOrganizationalUnit -Name Tests -Path "DC=MyCustomPartition,DC=MASOCIETE,DC=PRIV“
• Création d’un contact
New-ADObject -type contact -path 'ou=tests,dc=mycustompartition,dc=MaSociete,DC=Priv' -Name
"Contact1“
• Recherche dans la partition
get-adobject -SearchBase "dc=mycustompartition,dc=MaSociete,DC=Priv" -filter {objectclass -eq
"contact"}
Identity Days 2019
24 octobre 2019 - PARIS
Avantages et limitations
• Permet de créer un annuaire logiciel accessible et modifiable par les utilisateurs
et groupes disposant des autorisations adéquates.
• Accès facile par LDAP, et toute application compatible.
(mycustompartition.MaSociete.Priv est résolu par le DNS)
• On peut créer tout type d’objets sauf les « security principals, donc pas
d’utilisateurs » avec mots de passe
Identity Days 2019
24 octobre 2019 - PARIS
Affichage et Nettoyages des permissions dans AD
Identity Days 2019
24 octobre 2019 - PARIS
Nettoyage des permissions dans AD
• Le même type de problème
existe dans les fichiers et les
registres.
• Il peut se cacher dans toutes les
partitions AD (Domain,
Configuration, Schéma, …)
• Pas d’outil pour parcourir et
nettoyer ce type d’information
Identity Days 2019
24 octobre 2019 - PARIS
Affichage des permissions dans AD et suppression des ACL inutiles
Outil de recherche et nettoyage.
• Choix du contexte :[/DOMAIN|/CONF|/SCHEMA|/DOMAINDNS|/FORESTDNS|dn
• Affichage des permissions sur chaque OU/CN avec ou sans les objets.
• Affichage et recherche de tous les objets non résolus (Attention, il peut s’agir de
SID provenant de domaines approuvés non accessibles temporairement)
• Suppression uniquement des objets non résolus dans le domaine courant.
Seules les opérations sur le domaine courant sont « sures ». Un SID inconnu, non transformé en nom, peut
correspondre à un domaine non approuvé, un contrôleur de domaine non accessible, etc…
Le script est publié dans la galerie Technet:
https://gallery.technet.microsoft.com/How-to-remove-all-unknown-
9d594f3a?redir=0
Identity Days 2019
24 octobre 2019 - PARIS
Les extensions de schéma
Identity Days 2019
24 octobre 2019 - PARIS
Les extensions de schéma (Exchange, …)
• Quels sont les risques?
Les risques ne sont jamais au moment de l’ajout, mais de leur 1ère utilisation. (Un seul cas connu)
• Pourquoi les faire?
Ils sont indispensables à certains logiciels.
Ils apportent des classes et des attributs supplémentaires. (ExtensionAttribute…)
 Gestion centralisée à partir d’AD pour le mode Hybride verse O365
(Cela permet de synchroniser des informations complémentaires)
• On peut aussi créer ses propres extensions au schéma. (Ce n’est pas réservé aux éditeurs de
logiciels)
Identity Days 2019
24 octobre 2019 - PARIS
Règles de la création de champs supplémentaires (Inscription)
• Demander un OID à l’IANA (C’est gratuit)
http://pen.iana.org/pen/PenApplication.page
• Que ce soit pour une application interne ou diffusée
Exemple pour Microsoft
https://ldapwiki.com/wiki/1.2.840.113556
Identity Days 2019
24 octobre 2019 - PARIS
Recherche avancée dans AD,
Les recherches personnalisées
Identity Days 2019
24 octobre 2019 - PARIS
Recherche avancée dans AD (DSA.msc),
les recherches personnalisées
• Permet de rechercher sur tous les attributs existants
• Permet de vérifier les conditions utilisées par la suite dans une
commande PowerShell
• Peuvent être conservées, exportées, importées
• La vue sur les résultats a les mêmes propriétés qu’une OU
Tous les onglets sont disponibles sur chaque objet (en mode avancé)
Identity Days 2019
24 octobre 2019 - PARIS
Exemple de recherche d’un SID
Identity Days 2019
24 octobre 2019 - PARIS
• Tous les champs AD sont accessibles, mais pas forcément visualisés
Exemple de récupération d’un filtre
dans une requête Powershell
Identity Days 2019
24 octobre 2019 - PARIS
• Filtre généré par la requête :
(&(&(name=*dupont*)))
• Autre filtre plus complexe:
(&(&(objectCategory=user)(objectClass=user)(
userPrincipalName=*)(name=*dupont*)))
L’évolution d’AD (Risques, Sécurité)
Identity Days 2019
24 octobre 2019 - PARIS
L’évolution d’AD (risques,…)
• Pour le moment, AD est quasiment incontournable
• GPO, déploiement, délégation d’administration (Utiliser le Tier-Model)
• Azure AD commence seulement à ajouter la notion d’ « Unités Administratives » qui accueille
seulement des utilisateurs.
• AD est le maillon le plus faible de la chaine
• Ouvert en lecture à toute l’entreprise (Et à tous dès qu’un compte est compromis)
• En partie accessible depuis Internet si ADFS est utilisé (Configurer Smart lockout)
• Peu d’outils de sécurité fournis d’origine.
• Pas de « Secure Score for AD, Exchange»,
• il faut se tourner vers d’autres outils: ALSID, Retina, …
• L’authentification basique, cryptages « faibles », doivent disparaître…
• Notamment dans Exchange, mais aussi HTTP, IMAP, POP, LDAP, …
Identity Days 2019
24 octobre 2019 - PARIS
Identity Days 2019
24 octobre 2019 - PARIS
• Quelques Démos en fonction du temps.
• Des questions?
Merci à tous nos partenaires !
24 octobre 2019 - PARIS
@IdentityDays #identitydays2019

Optimisation et administration avancée d’Active Directory - Par Thierry Deman

  • 1.
    Merci à tousnos partenaires ! 24 octobre 2019 - PARIS @IdentityDays #identitydays2019
  • 2.
    Optimisation et administration avancée d’ActiveDirectory Thierry - DEMAN 24 octobre 2019 - PARIS Identity Days 2019
  • 3.
    Thierry Deman Architecte Séniorchez EXAKIS-NELITE Office Apps&services MVP (18 awards) Twitter : t_deman Audit, Migration, … Auteur chez ENI (Windows administration avancée) • Présentation rapide du Schéma (Classes/Attributs) • Ajouter de champ dans le catalogue global • Ajouter un index sur un attribut • Création/utilisation de partition supplémentaire, • Nettoyage des permissions dans AD (Par script Powershell) • Les extensions de schéma • Extension Exchange (Pourquoi/Pourquoi pas) • Règles de la création de champs supplémentaires (Inscription) • Recherche avancée dans AD (DSA.msc), Les recherches personnalisées (Dans DSA.MSC et ADSIEDIT.MSC) • L’évolution d’AD et la sécurité AGENDA DE LA CONFÉRENCE 24 octobre 2019 - PARIS Identity Days 2019
  • 4.
    Présentation rapide duSchéma Identity Days 2019 24 octobre 2019 - PARIS
  • 5.
    Présentation rapide duSchéma • Plusieurs outils : Console Schéma (à créer), ADSIEDIT.MSC • Autres outils: Ldif.exe, browser Ldap (Softerra) • Classes = Objets (avec notion d’héritage) • Account, User, Computer,… • Ensemble d’attributs obligatoires et facultatifs 269 classes sur un AD seul, 649 classes avec Exchange, SFB, … installés • Attributs = Propriétés 1498 attributs sur un AD seul, 4106 attributs avec Exchange,… (Classes/Attributs) Identity Days 2019 24 octobre 2019 - PARIS Top Person OrganizationalPerson user InetOrgPerson Computer Contact
  • 6.
    Ajout d’un champdans le catalogue global Identity Days 2019 24 octobre 2019 - PARIS
  • 7.
    Ajout de champdans le catalogue global • Accès classique get-aduser -server Localhost:3268 -filter {cond} -Properties * - Le fait d’indiquer le port 3268 (ou 3269) indique l’utilisation de l’annuaire restreint du catalogue global. Par défaut, le port 389 connecte au domaine du DC indiqué. - Recherche en 2 étapes dans le catalogue global (Forêt), puis recherche dans le domaine correspondant de l’objet. • Une requête pour trouver le DN de l’objet (et son domaine d’origine) get-aduser -server localhost:3268 "jdupont" - Puis une autre requête pour récupérer l’objet (à partir du DN) get-aduser "CN=Jean DUPONT,CN=Users,DC=MaSociete,DC=Priv" -property EmployeeNumber Identity Days 2019 24 octobre 2019 - PARIS Exemple de recherche d’une propriété « EmployeeNumber »
  • 8.
    Modification du schémapar la console Schéma • Se créer la console si elle n’existe pas. • regsvr32 schmmgmt.dll • Charger la console (mmc.exe , Ajouter le « Snap-in » Schéma Active directory) • L’avantage de cette console est la recherche facile des noms • Il suffit de cocher la case « répliquer cet attribut… » et d’appliquer • Un événement sera logué sur cette modification avec l’exécutant. Identity Days 2019 24 octobre 2019 - PARIS Exemple de recherche d’une propriété « EmployeeNumber »
  • 9.
    La modification peutaussi se faire en Powershell • Accès à l’objet dans le schéma: $a=get-adobject -searchbase "CN=Schema,CN=Configuration,DC=MaSociete,DC=Priv" -ldapfilter "(lDAPDisplayName=EmployeeNumber)“ • Modification de l’objet dans le schéma set-adobject $a.DistinguishedName -add @{isMemberOfPartialAttributeSet=$true} • Accès direct à l’attribut get-aduser -server localhost:3268 "jdupont" -property EmployeeNumber Identity Days 2019 24 octobre 2019 - PARIS Toutes les commandes AD peuvent se faire aussi bien sur la partition du schéma, comme la partition par défaut
  • 10.
    Liste des champsdu catalogue global • Pour un AD sans Exchange installé : Un objet de type « InetOrgPerson » contient 27 attributs dont 9 sont dans le CG Un objet de type « user » contient 156 attributs dont 21 sont dans le CG • Pour un objet « user » dans un AD avec Exchange et SFB installés 191 attributs dont 57 dans le GC Identity Days 2019 24 octobre 2019 - PARIS Toutes les commandes AD peuvent se faire aussi bien sur la partition du schéma, comme la partition par défaut $a=get-adobject -searchbase "CN=Schema,CN=Configuration,DC=deman,DC=local" -ldapfilter "(&(objectclass=ClassSchema)(name=user))" -properties maycontain,mustcontain,systemmaycontain,systemmustcontain $b=$a.maycontain+$a.mustcontain+$a.systemmaycontain+$a.systemmustcontain; echo $b |measure foreach ($i in $b) { get-adobject -searchbase "CN=Schema,CN=Configuration,DC=deman,DC=local" -ldapfilter "(&(lDAPDisplayName=$i)(isMemberOfPartialAttributeSet=TRUE))" }
  • 11.
    Ajouter un indexsur un attribut Identity Days 2019 24 octobre 2019 - PARIS
  • 12.
    Ajouter un indexsur un attribut • L’indexation est mémorisée dans l’attribut « Searchflags » 0x1 = Index 0x2 = Index spécifique pour chaque conteneur/OU 0x4= Autorise l’ANR 0x10= Copie l’attribut (si copie de l’objet) 0x20 = Tuple Index (Améliore l’index si * en début) 0x40 = VLV Search Identity Days 2019 24 octobre 2019 - PARIS Ajout en mode graphique
  • 13.
    Exemple d’utilisation • Avantcréation de l’index measure-command {foreach ($i in 1..1000) {get-aduser -filter {employeeNumber -like "1234567"}}} TotalMilliseconds : 4764,79 • Après création de l’index measure-command {foreach ($i in 1..1000) {get-aduser -filter {employeeNumber -like "1234567"}}} TotalMilliseconds : 2413,2859 Si l’index est supprimé, on retrouve la durée initiale. Identity Days 2019 24 octobre 2019 - PARIS
  • 14.
    Création/utilisation de partitionsupplémentaire Identity Days 2019 24 octobre 2019 - PARIS
  • 15.
    Création/utilisation de partitionsupplémentaire • Création d’une partition gérée par un premier serveur DNS dnscmd DC2016 /createdirectorypartition MyCustomPartition.MaSociete.com • Ajout d’un 2ème serveur DC/DNS gérant la partition dnscmd DC2 /enlistdirectorypartition MyCustomPartition.MaSociete.com • Créer un point de connexion repadmin /kcc DC2016 Identity Days 2019 24 octobre 2019 - PARIS
  • 16.
    Exemple d’utilisation decette partition • Création d’une OU New-ADOrganizationalUnit -Name Tests -Path "DC=MyCustomPartition,DC=MASOCIETE,DC=PRIV“ • Création d’un contact New-ADObject -type contact -path 'ou=tests,dc=mycustompartition,dc=MaSociete,DC=Priv' -Name "Contact1“ • Recherche dans la partition get-adobject -SearchBase "dc=mycustompartition,dc=MaSociete,DC=Priv" -filter {objectclass -eq "contact"} Identity Days 2019 24 octobre 2019 - PARIS
  • 17.
    Avantages et limitations •Permet de créer un annuaire logiciel accessible et modifiable par les utilisateurs et groupes disposant des autorisations adéquates. • Accès facile par LDAP, et toute application compatible. (mycustompartition.MaSociete.Priv est résolu par le DNS) • On peut créer tout type d’objets sauf les « security principals, donc pas d’utilisateurs » avec mots de passe Identity Days 2019 24 octobre 2019 - PARIS
  • 18.
    Affichage et Nettoyagesdes permissions dans AD Identity Days 2019 24 octobre 2019 - PARIS
  • 19.
    Nettoyage des permissionsdans AD • Le même type de problème existe dans les fichiers et les registres. • Il peut se cacher dans toutes les partitions AD (Domain, Configuration, Schéma, …) • Pas d’outil pour parcourir et nettoyer ce type d’information Identity Days 2019 24 octobre 2019 - PARIS
  • 20.
    Affichage des permissionsdans AD et suppression des ACL inutiles Outil de recherche et nettoyage. • Choix du contexte :[/DOMAIN|/CONF|/SCHEMA|/DOMAINDNS|/FORESTDNS|dn • Affichage des permissions sur chaque OU/CN avec ou sans les objets. • Affichage et recherche de tous les objets non résolus (Attention, il peut s’agir de SID provenant de domaines approuvés non accessibles temporairement) • Suppression uniquement des objets non résolus dans le domaine courant. Seules les opérations sur le domaine courant sont « sures ». Un SID inconnu, non transformé en nom, peut correspondre à un domaine non approuvé, un contrôleur de domaine non accessible, etc… Le script est publié dans la galerie Technet: https://gallery.technet.microsoft.com/How-to-remove-all-unknown- 9d594f3a?redir=0 Identity Days 2019 24 octobre 2019 - PARIS
  • 22.
    Les extensions deschéma Identity Days 2019 24 octobre 2019 - PARIS
  • 23.
    Les extensions deschéma (Exchange, …) • Quels sont les risques? Les risques ne sont jamais au moment de l’ajout, mais de leur 1ère utilisation. (Un seul cas connu) • Pourquoi les faire? Ils sont indispensables à certains logiciels. Ils apportent des classes et des attributs supplémentaires. (ExtensionAttribute…)  Gestion centralisée à partir d’AD pour le mode Hybride verse O365 (Cela permet de synchroniser des informations complémentaires) • On peut aussi créer ses propres extensions au schéma. (Ce n’est pas réservé aux éditeurs de logiciels) Identity Days 2019 24 octobre 2019 - PARIS
  • 24.
    Règles de lacréation de champs supplémentaires (Inscription) • Demander un OID à l’IANA (C’est gratuit) http://pen.iana.org/pen/PenApplication.page • Que ce soit pour une application interne ou diffusée Exemple pour Microsoft https://ldapwiki.com/wiki/1.2.840.113556 Identity Days 2019 24 octobre 2019 - PARIS
  • 25.
    Recherche avancée dansAD, Les recherches personnalisées Identity Days 2019 24 octobre 2019 - PARIS
  • 26.
    Recherche avancée dansAD (DSA.msc), les recherches personnalisées • Permet de rechercher sur tous les attributs existants • Permet de vérifier les conditions utilisées par la suite dans une commande PowerShell • Peuvent être conservées, exportées, importées • La vue sur les résultats a les mêmes propriétés qu’une OU Tous les onglets sont disponibles sur chaque objet (en mode avancé) Identity Days 2019 24 octobre 2019 - PARIS
  • 27.
    Exemple de recherched’un SID Identity Days 2019 24 octobre 2019 - PARIS • Tous les champs AD sont accessibles, mais pas forcément visualisés
  • 28.
    Exemple de récupérationd’un filtre dans une requête Powershell Identity Days 2019 24 octobre 2019 - PARIS • Filtre généré par la requête : (&(&(name=*dupont*))) • Autre filtre plus complexe: (&(&(objectCategory=user)(objectClass=user)( userPrincipalName=*)(name=*dupont*)))
  • 29.
    L’évolution d’AD (Risques,Sécurité) Identity Days 2019 24 octobre 2019 - PARIS
  • 30.
    L’évolution d’AD (risques,…) •Pour le moment, AD est quasiment incontournable • GPO, déploiement, délégation d’administration (Utiliser le Tier-Model) • Azure AD commence seulement à ajouter la notion d’ « Unités Administratives » qui accueille seulement des utilisateurs. • AD est le maillon le plus faible de la chaine • Ouvert en lecture à toute l’entreprise (Et à tous dès qu’un compte est compromis) • En partie accessible depuis Internet si ADFS est utilisé (Configurer Smart lockout) • Peu d’outils de sécurité fournis d’origine. • Pas de « Secure Score for AD, Exchange», • il faut se tourner vers d’autres outils: ALSID, Retina, … • L’authentification basique, cryptages « faibles », doivent disparaître… • Notamment dans Exchange, mais aussi HTTP, IMAP, POP, LDAP, … Identity Days 2019 24 octobre 2019 - PARIS
  • 31.
    Identity Days 2019 24octobre 2019 - PARIS • Quelques Démos en fonction du temps. • Des questions?
  • 32.
    Merci à tousnos partenaires ! 24 octobre 2019 - PARIS @IdentityDays #identitydays2019