Búsqueda de sitios web

Cómo crear políticas de acceso condicional con Microsoft Graph PowerShell


Las políticas de acceso condicional permiten a los administradores configurar y aplicar niveles básicos de seguridad para nuestros inquilinos. Es posible que los administradores a menudo necesiten configurar varias políticas estándar para diferentes inquilinos o simplemente mediante programación con PowerShell.

En este tutorial, le mostraré cómo configurar políticas de acceso condicional utilizando Microsoft Graph PowerShell.

Acerca del cmdlet New-MgIdentityConditionalAccessPolicy

El comando New-MgIdentityConditionalAccessPolicy se encuentra dentro del módulo Microsoft.Graph.Identity.SignIns y se utiliza para crear nuevas políticas de acceso condicional en Microsoft Entra.

Hay parámetros limitados disponibles con este cmdlet, lo que significa que no todas las configuraciones se pueden definir con su propio parámetro. En su lugar, todas las configuraciones deben definirse en una tabla hash que luego se analiza en el parámetro -BodyParameter.

Si no ha instalado los módulos de Microsoft Graph PowerShell, consulte mi tutorial completo para instalar Microsoft Graph PowerShell: https://ourcloudnetwork.com/how-to-install-the-microsoft-graph-powershell-sdk/

Permisos necesarios para crear nuevas políticas de acceso condicional

El permiso principal necesario para crear políticas son los permisos de API Policy.ReadWrite.ConditionalAccess. Sin embargo, no hace exactamente lo que se espera... aunque puede usar este permiso para crear nuevas políticas, no le permitirá leer todas las políticas una vez creadas.

Otras dos políticas brindan niveles adicionales de acceso, lo que le permite leer políticas o configuraciones de políticas, estas son:

  • Política.Leer.Todo
  • Aplicación.Leer.Todo

Se puede ver un desglose completo de los permisos y la configuración del cmdlet New-MgIdentityConditionalAccessPolicy con el siguiente comando:

Find-MgGraphCommand New-MgIdentityConditionalAccessPolicy | fl

Su salida se verá similar a la siguiente:

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}

Para obtener más información sobre cómo encontrar permisos para usar con Microsoft Graph PowerShell, consulte mi tutorial detallado aquí: https://ourcloudnetwork.com/how-to-find-permissions-for-microsoft-graph-powershell/

Ejemplo de política de acceso condicional de New-MgIdentityConditionalAccessPolicy

Comience conectándose a Microsoft Graph PowerShell utilizando los alcances de permisos necesarios para permitirle crear nuevas políticas y leer toda la información de las políticas:

Connect-MgGraph -scopes Policy.Read.All, Policy.ReadWrite.ConditionalAccess

Luego puede utilizar el siguiente código de ejemplo para crear una nueva política denominada "MFA para todos los usuarios" con algunas configuraciones básicas:

  • Dirigirse a todos los usuarios
  • Apunte a todas las aplicaciones en la nube
  • Requerir MFA
  • Habilitado solo para informes
$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

Todas las configuraciones para New-MgIdentityConditionalAccessPolicy

Hay muchas configuraciones diferentes que puede usar con las políticas de acceso condicional, por lo que el siguiente código representa todas las configuraciones disponibles que puede definir en sus parámetros de acceso condicional:

Condiciones

Todas las condiciones deben estar contenidas en la tabla hash de condiciones:

Conditions = {
    #Conditions here
}

usuarios

Todas las configuraciones para las condiciones del usuario se encuentran a continuación:

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
		}

Recursos objetivo

Todas las configuraciones para las condiciones de los recursos de destino se encuentran a continuación:

	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
		}

Plataformas

Todas las configuraciones para las condiciones de la plataforma se encuentran a continuación:

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
		}

Ubicaciones

Todas las configuraciones para las condiciones de ubicación se encuentran a continuación:

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
		}

Riesgo del usuario y riesgo de inicio de sesión

Todas las configuraciones para el riesgo del usuario y las condiciones de riesgo de inicio de sesión se encuentran a continuación:

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

Aplicaciones cliente

Todas las configuraciones para las condiciones de la aplicación cliente se encuentran a continuación:

clientAppTypes = @(
	"browser"
	"mobileAppsAndDesktopClients"
	"exchangeActiveSync"
	"other"
) #Select on or all of the above app types

Controles de subvenciones

Todas las configuraciones para el control de subvenciones se encuentran a continuación:

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)
}

Controles de sesión

Todas las configuraciones para los controles de sesiones se encuentran a continuación:

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
}

Estado

Utilice las siguientes opciones para controlar el estado de la política:

state = "enabled"
        "disabled"
        "enabledForReportingButNotEnforced"

Artículos relacionados