Поиск по сайту:

[PowerShell] Включить MFA для пользователей Office 365


Если у вас нет лицензии Azure AD Premium, у вас есть только два варианта включить MFA для пользователей Office 365: включить его для всех пользователей с помощью стандартных настроек безопасности или вручную для каждого пользователя в Центре администрирования > Активные пользователи > Многофакторная аутентификация.

Включение MFA для каждого пользователя вручную может быть ужасной задачей, и это то, что вам придется делать каждый раз, когда вы создаете нового пользователя. С помощью PowerShell мы можем легко выбрать группу пользователей и включить для них MFA.

Если вы даже объедините это со сценарием для поиска пользователей без включенной MFA, вы сможете автоматизировать весь процесс.

Включите многофакторную аутентификацию для пользователей Office 365 с помощью PowerShell

Прежде чем мы начнем включать MFA в Office 365 с помощью PowerShell, нам нужно подключиться к службе Microsoft Online:

Connect-MsolService

Чтобы включить MFA с помощью PowerShell, сначала необходимо создать объект StrongAuthenticationRequirement с необходимыми параметрами. Затем мы можем установить этот объект для каждого пользователя, для которого хотим включить MFA.

Create the StrongAuthenticationRequirement Object
$sa = New-Object -TypeName Microsoft.Online.Administration.StrongAuthenticationRequirement
$sa.RelyingParty = "*"
$sa.State = "Enabled"
$sar = @($sa)

Enable MFA for the user
Set-MsolUser -UserPrincipalName $user -StrongAuthenticationRequirements $sar

Я обернул это в функцию, чтобы мы могли легко подключить это к другому командлету (для выбора пользователей или на основе CSV файла). Функция попытается включить MFA для каждого пользователя и выведет объект с пользователями и статусом MFA.

Function Set-MFAforUser {
<#
  .Synopsis
    Enables MFA for an Office 365 User

  .DESCRIPTION
    Enable MFA for a user, you can turn it on for a single user or input a list of users

  .NOTES
    Name: Set-MFAforUser
    Author: R. Mens - LazyAdmin.nl
    Version: 1.0
    DateCreated: jan 2021
    Purpose/Change: Initial script development

  .LINK
    https://a-d.site

  .EXAMPLE
    Set-MFAforUser -UserPrincipalName johndoe@contoso.com

    Enable MFA for the user John Doe

  .EXAMPLE
	  Import-Csv -Delimiter ";" -Path ("path\to\file\users-to-enable.csv") | Foreach-Object { Set-MFAforUser $_.UserPrincipalName }

    Enable MFA for all users in a CSV file
#>
 [CmdletBinding(DefaultParameterSetName="Default")]
  param(
    [Parameter(
      Mandatory = $true,
      ValueFromPipeline = $true,
      ValueFromPipelineByPropertyName = $true,
      ParameterSetName  = "UserPrincipalName",
      Position = 0
      )]
    # Enter a single UserPrincipalName or a comma separted list of UserPrincipalNames
    [string[]]$UserPrincipalName
	)

Begin {}

Process {
	if ($PSBoundParameters.ContainsKey('UserPrincipalName')) {
		foreach ($user in $UserPrincipalName) {
			try {
		    # Src: https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-mfa-userstates
		    $sa = New-Object -TypeName Microsoft.Online.Administration.StrongAuthenticationRequirement
		    $sa.RelyingParty = "*"
		    $sa.State = "Enabled"
		    $sar = @($sa)

		    # Change the following UserPrincipalName to the user you wish to change state
		    Set-MsolUser -UserPrincipalName $user -StrongAuthenticationRequirements $sar -ErrorAction Stop

		    [PSCustomObject]@{
			    UserPrincipalName = $user
			    MFAEnabled        = $true
		    }
	    }
	    catch {
		    [PSCustomObject]@{
			    UserPrincipalName = $user
			    MFAEnabled        = $false
		    }
	    }
	 }
	}else{
		Write-Verbose "No UserPrincipalName given"
	}
  }
}

Вы также можете найти полный скрипт здесь, на моем GitHub.

Исключая пользователей

Если вам нужно исключить пользователей или аккаунты из скрипта, вы можете добавить к нему следующий фрагмент:

Create a list of excluded accounts
$exclusions = @("archive@a-d.site",
                "info@a-d.onmicrosoft.com")

Replace the following line (160 in the complete script above)
$MsolUsers = Get-MsolUser -EnabledFilter EnabledOnly -MaxResults $MaxResults | Where-Object {$_.IsLicensed -eq $isLicensed} | Sort-Object UserPrincipalName

With this
$MsolUsers = Get-MsolUser -EnabledFilter EnabledOnly -MaxResults $MaxResults | 
            Where-Object {$_.IsLicensed -eq $true -and $_.UserPrincipalName -notin $exclusions -and !$_.StrongAuthenticationMethods -and !$_.StrongAuthenticationRequirements} | 
            Sort-Object UserPrincipalName

Завершение

Включение многофакторной аутентификации (MFA) действительно важно для обеспечения безопасности вашей среды. Стандартные настройки безопасности являются отличным решением для небольших арендаторов, но они не работают, когда у вас есть системные учетные записи, например. Используя PowerShell и запланированную задачу, вы все равно можете автоматизировать MFA в Office 365, сохраняя безопасность ваших учетных записей.

Если у вас есть вопросы, просто оставьте комментарий ниже.