Principe de moindre privilège

  • Principe de moindre privilège : Il s’agit de n’accorder aux utilisateurs que le niveau minimal de permissions dont ils ont besoin pour effectuer leurs tâches. Entra ID vous aide à appliquer ce principe en proposant un large éventail de rôles intégrés et en vous permettant de créer des rôles personnalisés et de les attribuer à des utilisateurs ou à des groupes en fonction de leurs responsabilités et de leurs besoins d’accès.
  • Audit et surveillance des rôles : Il est important de vérifier régulièrement les attributions de rôles et de générer des alertes sur les nouvelles attributions de rôles pour suivre et gérer les attributions de rôles privilégiés. Vous pouvez également utiliser Entra ID pour réviser et révoquer les attributions de rôles qui ne sont plus nécessaires ou appropriées.
  • Permissions privilégiées : Il s’agit des permissions qui peuvent être utilisées pour déléguer la gestion des ressources de l’annuaire à d’autres utilisateurs, modifier les informations d’identification, les politiques d’authentification ou d’autorisation, ou accéder à des données restreintes. Les rôles Entra ID ont chacun une liste de permissions qui leur sont définies. Lorsqu’une identité se voit attribuer un rôle, elle hérite également des permissions définies dans le rôle.
  • Analyse des journaux d’audit : Vous pouvez utiliser les journaux d’audit Entra ID pour interroger et identifier les utilisateurs qui ont des rôles inutiles et sur privilégiés. Vous pouvez ensuite trouver un rôle alternatif approprié pour eux. Vous pouvez envoyer les journaux d’audit Entra ID à un espace de travail Log Analytics ou les connecter à une instance Sentinel.

    Pour ingérer les journaux d’audit d’ID Entra dans Microsoft Sentinel, le connecteur de données d’ID Microsoft Entra doit être activé et les journaux d’audit doivent être cochés comme indiqué ci-dessous.

La requête ci-dessous donne une liste unique des activités qu’un compte a effectuées, ainsi que les rôles qui lui ont été attribués : 

AuditLogs 
| where TimeGenerated > ago(90d) 
| extend ActorName = iif( 
                         isnotempty(tostring(InitiatedBy["user"])),  
                         tostring(InitiatedBy["user"]["userPrincipalName"]), 
                         tostring(InitiatedBy["app"]["displayName"]) 
                     ) 
| extend ActorID = iif( 
                       isnotempty(tostring(InitiatedBy["user"])),  
                       tostring(InitiatedBy["user"]["id"]), 
                       tostring(InitiatedBy["app"]["id"]) 
                   ) 
| where isnotempty(ActorName) 
| join (IdentityInfo 
    | where TimeGenerated > ago(7d) 
    | where strlen(tostring(AssignedRoles)) > 2 
    | summarize arg_max(TimeGenerated, *) by AccountUPN 
    | project AccountObjectId, AssignedRoles) 
    on $left.ActorID == $right.AccountObjectId 
| summarize Operations = make_set(OperationName) by ActorName, ActorID, Identity, tostring(AssignedRoles) 
| extend OperationsCount = array_length(Operations) 
| project ActorName, AssignedRoles, Operations, OperationsCount, ActorID, Identity 
| sort by OperationsCount desc 

Cela donnera des résultats pour tous les comptes qui ont effectué des tâches dans Entra ID et peut générer trop d’opérations qui n’étaient pas privilégiées. Pour filtrer des rôles d’ID d’entrée spécifiques, la requête suivante peut être exécutée à l’endroit où les rôles sont définis dans une liste. Trois rôles ont été ajoutés à titre d’exemple, mais cette liste peut et doit être élargie pour inclure d’autres rôles :

let PrivilegedRoles = dynamic(["Global Administrator", 
                               "Security Administrator", 
                               "Compliance Administrator" 
                              ]); 
AuditLogs 
| where TimeGenerated > ago(90d) 
| extend ActorName = iif( 
                         isnotempty(tostring(InitiatedBy["user"])),  
                         tostring(InitiatedBy["user"]["userPrincipalName"]), 
                         tostring(InitiatedBy["app"]["displayName"]) 
                     ) 
| extend ActorID = iif( 
                       isnotempty(tostring(InitiatedBy["user"])),  
                       tostring(InitiatedBy["user"]["id"]), 
                       tostring(InitiatedBy["app"]["id"]) 
                   ) 
| where isnotempty(ActorName) 
| join (IdentityInfo 
    | where TimeGenerated > ago(7d) 
    | where strlen(tostring(AssignedRoles)) > 2 
    | summarize arg_max(TimeGenerated, *) by AccountUPN 
    | project AccountObjectId, AssignedRoles) 
    on $left.ActorID == $right.AccountObjectId 
| where AssignedRoles has_any (PrivilegedRoles) 
| summarize Operations = make_set(OperationName) by ActorName, ActorID, Identity, tostring(AssignedRoles) 
| extend OperationsCount = array_length(Operations) 
| project ActorName, AssignedRoles, Operations, OperationsCount, ActorID, Identity 
| sort by OperationsCount desc 

Une fois la requête exécutée, les résultats donnent un aperçu des activités effectuées dans votre locataire Entra ID et des rôles de ces comptes

Étant donné qu’il n’existe pas de table contenant les rôles qui ont été attribués à une identité, vous devez ajouter la liste des utilisateurs à la requête et les filtrer. Il existe plusieurs façons d’obtenir une liste des utilisateurs auxquels un rôle d’ID Entra spécifique a été attribué. Un moyen rapide de le faire est d’accéder à Entra ID, puis de sélectionner Rôles et administrateurs. À partir de là, sélectionnez le rôle et exportez les identités qui lui ont été attribuées. Il est important d’avoir les noms d’utilisateur principaux (UPN) des utilisateurs privilégiés. Vous devez ajouter ces UPN, ainsi que les rôles de l’utilisateur, à la requête

datatable(UserPrincipalName:string, Roles:dynamic) [ 
    "admin@contoso.com", dynamic(["Global Administrator"]), 
    "admin2@contoso.com", dynamic(["Global Administrator", "Security Administrator"]), 
    "admin3@contoso.com", dynamic(["Compliance Administrator"]) 
] 
| join (AuditLogs 
        | where TimeGenerated > ago(90d) 
        | extend ActorName = iif( 
                                isnotempty(tostring(InitiatedBy["user"])),  
                                tostring(InitiatedBy["user"]["userPrincipalName"]), 
                                tostring(InitiatedBy["app"]["displayName"]) 
                            ) 
        | extend ActorID = iif( 
                            isnotempty(tostring(InitiatedBy["user"])),  
                            tostring(InitiatedBy["user"]["id"]), 
                            tostring(InitiatedBy["app"]["id"]) 
                        ) 
        | where isnotempty(ActorName) ) on $left.UserPrincipalName == $right.ActorName 
| summarize Operations = make_set(OperationName) by ActorName, ActorID, tostring(Roles) 
| extend OperationsCount = array_length(Operations) 
| project ActorName, Operations, OperationsCount, Roles, ActorID 
| sort by OperationsCount desc 

Une fois que vous avez exécuté la requête, les résultats donnent un aperçu des activités effectuées dans votre locataire Entra ID par les utilisateurs que vous avez filtrés.


Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *