Comment créer des stratégies d'accès conditionnel avec Microsoft Graph PowerShell
Les politiques d'accès conditionnel permettent aux administrateurs de configurer et d'appliquer des niveaux de sécurité de base pour nos locataires. Les administrateurs peuvent souvent avoir besoin de configurer plusieurs stratégies standard pour différents locataires ou simplement par programmation avec PowerShell.
Dans ce didacticiel, je vais vous montrer comment configurer des politiques d'accès conditionnel à l'aide de Microsoft Graph PowerShell.
À propos de l'applet de commande New-MgIdentityConditionalAccessPolicy
La commande New-MgIdentityConditionalAccessPolicy se trouve dans le module Microsoft.Graph.Identity.SignIns et est utilisée pour créer de nouvelles stratégies d'accès conditionnel dans Microsoft Entra.
Les paramètres disponibles avec cette applet de commande sont limités, ce qui signifie que chaque paramètre ne peut pas être défini avec son propre paramètre. Au lieu de cela, tous les paramètres doivent être définis dans une table de hachage qui est ensuite analysée dans le paramètre -BodyParameter.
Si vous n'avez pas installé les modules Microsoft Graph PowerShell, consultez mon tutoriel complet pour installer Microsoft Graph PowerShell : https://ourcloudnetwork.com/how-to-install-the-microsoft-graph-powershell-sdk/
Autorisations requises pour créer de nouvelles stratégies d'accès conditionnel
L'autorisation principale nécessaire pour créer des stratégies est les autorisations de l'API Policy.ReadWrite.ConditionalAccess. Cependant, il ne fait pas exactement ce qui est attendu… bien que vous puissiez utiliser cette autorisation pour créer de nouvelles politiques, elle ne vous permettra pas de lire toutes les politiques une fois créées.
Deux autres stratégies fournissent des niveaux d'accès supplémentaires, vous permettant de lire les stratégies ou les paramètres de stratégie, à savoir :
- Politique.Lire.Tout
- Application.Read.All
Une analyse complète des autorisations et des paramètres de la cmdlet New-MgIdentityConditionalAccessPolicy peut être consultée avec la commande suivante :
Find-MgGraphCommand New-MgIdentityConditionalAccessPolicy | flVotre résultat ressemblera à ce qui suit :
Command : New-MgIdentityConditionalAccessPolicy
Module : Identity.SignIns
APIVersion : v1.0
Method : POST
URI : /identity/conditionalAccess/policies
OutputType : IMicrosoftGraphConditionalAccessPolicy
Variants : {Create, CreateExpanded}
Permissions : {Application.Read.All, Policy.Read.All, Policy.ReadWrite.ConditionalAccess}Pour plus d'informations sur la recherche d'autorisations à utiliser avec Microsoft Graph PowerShell, consultez mon didacticiel détaillé ici : https://ourcloudnetwork.com/how-to-find-permissions-for-microsoft-graph-powershell/
Exemple de stratégie d’accès conditionnel New-MgIdentityConditionalAccessPolicy
Commencez par vous connecter à Microsoft Graph PowerShell en utilisant les étendues d’autorisation nécessaires pour vous permettre de créer de nouvelles stratégies et de lire toutes les informations sur les stratégies :
Connect-MgGraph -scopes Policy.Read.All, Policy.ReadWrite.ConditionalAccessVous pouvez ensuite utiliser l'exemple de code suivant pour créer une nouvelle stratégie nommée « MFA pour tous les utilisateurs » avec quelques paramètres de base :
- Cibler tous les utilisateurs
- Ciblez toutes les applications cloud
- Exiger l'authentification multifacteur
- Activé pour la création de rapports uniquement
$body = @{
displayName = "MFA for all users "
state = "enabledForReportingButNotEnforced"
conditions = @{
applications = @{
includeApplications = @(
"All"
)
}
users = @{
includeUsers = @(
"All"
)
}
clientAppTypes = @(
"all"
)
}
grantControls = @{
operator = "AND"
builtInControls = @(
"mfa"
)
}
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $bodyTous les paramètres pour New-MgIdentityConditionalAccessPolicy
Il existe de nombreux paramètres différents que vous pouvez utiliser avec les stratégies d'accès conditionnel. Le code ci-dessous représente tous les paramètres disponibles que vous pouvez définir dans vos paramètres d'accès conditionnel :
Conditions
Toutes les conditions doivent être contenues dans la table de hachage des conditions :
Conditions = {
#Conditions here
}utilisateurs
Tous les paramètres des conditions d'utilisation se trouvent ci-dessous :
users = @{
includeUsers = @(
"All Users" #use "All user" or define mulitple user IDs
)
excludeUsers = @(
"UserID" #Define the excluded users IDs
)
includeGroups = @(
"GroupID" #Define the included groups IDs
)
excludeGroups = @(
"GroupID" #Define the excluded groups IDs
)
includeRoles = @(
"9b895d92-2cd3-44c7-9d02-a6ac2d5ea5c3" #Define the role IDs
)
excludeRoles = @(
"b0f54661-2d74-4c50-afa3-1ec803f12efe" #Define the role IDs
)
includeGuestsOrExternalUsers = @{
guestOrExternalUserTypes = "B2bCollaborationGuest,B2bCollaborationMember,B2bDirectConnectUser,InternalGuest,ServiceProvider,OtherExternalUser"
externalTenants = @{
membershipKind = "all"
}
} #Define the enternal and guest user types
excludeGuestsOrExternalUsers = @{
guestOrExternalUserTypes = "B2bCollaborationGuest,B2bCollaborationMember,B2bDirectConnectUser,InternalGuest,ServiceProvider,OtherExternalUser"
externalTenants = @{
membershipKind = "all"
} #Define the enternal and guest user types
} #Define the enternal and guest user types
}Ressources ciblées
Tous les paramètres pour les conditions de ressources cibles se trouvent ci-dessous :
applications = @{
includeApplications = @(
"All" #Define all applications or the application IDs
)
applicationFilter = @{
mode = "include"
rule = "CustomSecurityAttribute.DanielWasHere_Test -eq \"Yes\""
} #Use the web portal to create the rule syntax
excludeApplications = @(
"499b84ac-1321-427f-aa17-267ca6975798"
) #Define applications by the application IDs
includeUserActions = @(
"urn:user:registersecurityinfo"
"urn:user:registerdevice"
) #Define either of both user actions
includeAuthenticationContextClassReferences = @(
"c1"
"c2"
) #Define authentication context by the ID
globalSecureAccess = @{
includeTrafficProfiles = "M365"
} #Define Global secure access profile by the profile name
}Plateformes
Tous les paramètres pour les conditions de la plateforme se trouvent ci-dessous :
platforms = @{
includePlatforms = @(
"all"
"adroid"
"iOS"
"WindowsPhones"
"Windows"
"macOS"
"linux"
) #Define each platform or all platforms
excludePlatforms = @(
"all"
"adroid"
"iOS"
"WindowsPhones"
"Windows"
"macOS"
"linux"
) #Define each platform or all platforms
}Emplacements
Tous les paramètres pour les conditions de localisation se trouvent ci-dessous :
locations = @{
includeLocations = @(
"all"
"AllTrusted"
"3d46dbda-8382-466a-856d-eb00cbc6b910" #all compliant network locations
"Custom network location ID"
) #Define one of the above options
excludeLocations = @(
"AllTrusted"
"Custom network location ID"
) #Define one of the above options
}Risque utilisateur et risque de connexion
Tous les paramètres relatifs aux risques liés aux utilisateurs et aux conditions de risque de connexion se trouvent ci-dessous :
signInRiskLevels = @(
"high"
"medium"
"low"
"none"
) #Select one or all of the above options
UserRiskLevels = @(
"high"
"medium"
) #Select one or all of the above options
signInRiskDetections = $nullApplications clientes
Tous les paramètres pour les conditions de l'application client se trouvent ci-dessous :
clientAppTypes = @(
"browser"
"mobileAppsAndDesktopClients"
"exchangeActiveSync"
"other"
) #Select on or all of the above app typesAccorder des contrôles
Tous les paramètres de contrôle des autorisations se trouvent ci-dessous :
grantControls = @{
operator = "OR" #Select the AND or OR operator
builtInControls = @(
"mfa"
"compliantDevice"
"domainJoinedDevice"
"approvedApplication"
"compliantApplication"
) #Chose from the above options
customAuthenticationFactors = @(
)
termsOfUse = @(
"ce580154-086a-40fd-91df-8a60abac81a0"
"7f29d675-caff-43e1-8a53-1b8516ed2075"
) #Define ID of the terms of use policy
authenticationStrength = @{
id = "db443b3a-6c4e-45f5-aa9a-7819e56d2987"
} #Define the ID of your authentication stenght (built-in or custom works)
}Contrôles de session
Tous les paramètres des contrôles de sessions se trouvent ci-dessous :
sessionControls = @{
applicationEnforcedRestrictions = $null
persistentBrowser = @{
mode = "always" # or "never"
isEnabled = "true"
} #Define persistent browser settings
cloudAppSecurity = @{
cloudAppSecurityType = "blockDownloads" # or "MonitorOnly"
isEnabled = $true
} #Define cloud app security policy
continuousAccessEvaluation = @{
mode = "strictLocation"
} #remove is not needed
secureSignInSession = @{
isEnabled = $true
secureAppSessionMode = "notEnforced"
} #Define token protection settings
disableResilienceDefaults = $true
signInFrequency = @{
value = 4
type = "hours"
isEnabled = $true
} #Define sign-in frequency settings
globalSecureAccessFilteringProfile = $null
}État
Utilisez les options suivantes pour contrôler l'état de la stratégie :
state = "enabled"
"disabled"
"enabledForReportingButNotEnforced"