[PowerShell] Office 365 Kullanıcıları için MFA'yı Etkinleştirin


Azure AD Premium lisansınız yoksa Office 365 kullanıcılarınız için MFA'yı etkinleştirmek için yalnızca iki seçeneğiniz vardır; bunu tüm kullanıcılar için güvenlik varsayılanlarıyla veya Yönetim Merkezi > Etkin Kullanıcılar > Çoklu'da her kullanıcı için manuel olarak açın. -faktör Kimlik Doğrulaması.

MFA'yı her kullanıcı için manuel olarak etkinleştirmek korkunç bir görev olabilir ve her yeni kullanıcı oluşturduğunuzda yapmanız gereken bir şeydir. PowerShell ile kolaylıkla bir kullanıcı grubunu seçip onlar için MFA'yı etkinleştirebiliyoruz.

MFA'nın etkin olmadığı kullanıcıları bulmak için bunu komut dosyasıyla birleştirirseniz tüm süreci otomatikleştirebilirsiniz.

PowerShell ile Office 365 Kullanıcıları için Çok Faktörlü Kimlik Doğrulamayı Etkinleştirin

PowerShell ile Office 365'te MFA'yı etkinleştirmeye başlamadan önce Microsoft Çevrimiçi Hizmetine bağlanmamız gerekir:

Connect-MsolService

MFA'yı PowerShell ile etkinleştirmek için öncelikle gerekli parametrelere sahip bir StrongAuthenticationRequirement nesnesi oluşturmamız gerekir. Daha sonra bu nesneyi MFA'yı etkinleştirmek istediğimiz her kullanıcı için ayarlayabiliriz.

# 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

Bunu başka bir cmdlet'in arkasına kolayca yönlendirebilmemiz için bunu bir fonksiyona sardım (kullanıcıları seçmek için veya bir CSV dosyasına dayalı olarak). İşlev, her kullanıcı için MFA'yı etkinleştirmeye çalışacak ve kullanıcıları ve MFA durumunu içeren bir nesnenin çıktısını alacaktır.

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://lazyadmin.nl

  .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"
	}
  }
}

Ayrıca betiğin tamamını GitHub'ımda bulabilirsiniz.

Kullanıcıları hariç tutma

Kullanıcıları veya hesapları komut dosyasından hariç tutmanız gerekiyorsa, komut dosyasına aşağıdaki bölümü ekleyebilirsiniz:

# Create a list of excluded accounts
$exclusions = @("archive@lazyadmin.nl",
                "info@lazyadmin.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

Kapanıyor

Ortamınızın güvenliğini sağlamak söz konusu olduğunda MFA'yı açmak gerçekten önemlidir. Güvenlik varsayılanları daha küçük kiracılar için harika bir çözümdür ancak örneğin sistem hesaplarınız olduğunda işe yaramaz. PowerShell'i ve zamanlanmış bir görevi kullanarak Office 365'te MFA'yı hâlâ otomatikleştirerek hesaplarınızı güvende tutabilirsiniz.

Herhangi bir sorunuz varsa aşağıya bir yorum bırakmanız yeterli.

İlgili makaleler