Recherche de site Web

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 | fl

Votre 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.ConditionalAccess

Vous 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 $body

Tous 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 = $null

Applications 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 types

Accorder 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"

Articles connexes