今回はMicrosoft 365の多要素認証(二要素認証)について検証してみました。
1.多要素認証について
2.GUIでの設定方法
3.CUIによる一括設定方法
実際に使用する際には、管理者側で多要素認証を有効化し、ユーザーがログインする際に上記の内どちらかを設定させる形となります。
※ユーザー側の詳しい設定手順については以前投稿していますので、よかったらどうぞ
(Microsoft 365)二要素認証を設定する方法を再確認してみた 〜SMS〜
(Microsoft 365)二要素認証を設定する方法を再確認してみた 〜Microsoft Authenticatorアプリ〜
つまり基本的にはユーザー側で任意の携帯電話番号の登録やスマートフォンアプリの設定が必要になります。
ですが、最近確認したところSMS(携帯電話番号)については、事前に管理者側で登録することが出来るようだったので、この手順について確認・検証をしてみました!!
<検証環境>
クライアントOS:Windows 10 Pro 21H1
手順としては以下のサイトを参考にしました。
Azure AD Multi-factor Authentication のユーザー認証方法を管理する
設定はAzure Active Directory Admin センターから設定するようです。
設定するユーザーを選択し、「認証方法」-「認証方法の追加」から設定します。
※「方法の選択」で「電話番号」、「電話の種類」で「モバイル」を選択します。

(注)日本の場合には「+81〜」形式になります!

以上で登録が完了となります。
登録確認画面では先頭の0(ゼロ)は表記されなくなりますが、問題ありません。
※先頭の0(ゼロ)は国内を表すものなので、本来は不要です。
その為、登録の時点で先頭の0(ゼロ)を記載しなくとも正常に登録されます。
この辺りは親切設計になってますね(^o^)!
登録する際に「以前のユーザー認証方法エクスペリエンス」画面の場合には以下のような感じとなります。

ここまでで電話番号の設定が完了しましたので、後は多要素認証を有効化するとSMSに確認用メッセージが飛ぶような動きとなります。
<多要素認証 有効化画面>
「Microsoft 365管理センター」-「ユーザー」-「アクティブなユーザー」の「多要素認証」から設定

GUIの設定方法が確認出来たので、本題であるCUIによる一括設定方法を確認していきたいと思います!
※事前にモジュールのインストール等も必要になります。
コマンド自体は以下を使用します。
↓↓実際に使用した参考画面↓↓

スクリプトの実行ポリシーを変更するのを忘れていましたので、エラーが出てますね(^_^;)
その為、実行ポリシーの変更とスクリプトのインポートを実行しています。
Powershellで接続する際にサインイン画面が表示されます。


一番最初のみ「アクセス許可」を付与する画面が表示されます。
そのまま「承諾」で問題ありません。

正常に接続された後は実際に確認コマンドと電話認証方法の作成コマンドを使用してみます。


正常に追加されましたね!!(^o^)!!
ちなみにコマンド実行後にAzure AD Admin センターを確認すると「Microsoft Graph Powershell」アプリケーションに対して、アクセス許可が付与されているのが確認出来ます。


では、実際に各コマンドが確認出来たので一括で設定するスクリプトを作成していきます。
↓↓作成したスクリプトと準備するCSVファイルはこんな感じになりました↓↓
<CSVファイルの例>

(注)「Import-CSV」コマンド時に文字コードを「Shift-JIS」で指定してますので、エクセルで作成・編集したものを使用可能です。ただし、日本語が入っていなければ「UTF-8」でも問題ないような気がします。
<実際に実行した画面>

作成したスクリプトとCSVファイルを同一フォルダ内に配置して、Powershellとして実行します。


実行完了後は同じフォルダに設定確認用ログが出力されます。
<出力された確認ログ(Add-AuthenticationPhone.log)>

注意点としては、既に電話認証方法(電話番号)が作成済みの場合にはエラーとなります。
また今回は4件しか実行してませんので発生しませんでしたが、数が多くなると処理の間にウェイトを入れないとAPIエラー?が発生するかもしれません。
⇒その場合にはforeachの最後に適切な秒数ウェイトを入れればいいと思われます。
今回準備したCSVファイルですが、以下の検証時に作成したCSVファイルを使い回すのも一つの手かもしれませんね。
その際には先頭に「+81 」を忘れずに追加しましょうね!
(Office365)Powershellにてユーザーを一括登録する方法を検証してみた 〜New-MsolUser〜
長くなりましたが、今回の検証はこんなところで終わりたいと思いますっ( ´ー`)フゥー...
今回はあくまで登録作業のみで実際の多要素認証の有効化は未実施ですので、
次回はこの辺りを検証してみたいと思いますっ(^o^)
<追記>
「[Microsoft 365]多要素認証(二要素認証)の有効化をコマンドで一括設定する方法を検証してみた 〜Set-MsolUser〜」で多要素認証の有効化をコマンドで実施する検証を載せています。
1.多要素認証について
2.GUIでの設定方法
3.CUIによる一括設定方法
1.多要素認証について
Microsoft 365標準機能では、多要素認証として主に「SMSメッセージ」と「Microsoft Authenticatorアプリ」が存在します。実際に使用する際には、管理者側で多要素認証を有効化し、ユーザーがログインする際に上記の内どちらかを設定させる形となります。
※ユーザー側の詳しい設定手順については以前投稿していますので、よかったらどうぞ
(Microsoft 365)二要素認証を設定する方法を再確認してみた 〜SMS〜
(Microsoft 365)二要素認証を設定する方法を再確認してみた 〜Microsoft Authenticatorアプリ〜
つまり基本的にはユーザー側で任意の携帯電話番号の登録やスマートフォンアプリの設定が必要になります。
ですが、最近確認したところSMS(携帯電話番号)については、事前に管理者側で登録することが出来るようだったので、この手順について確認・検証をしてみました!!
<検証環境>
クライアントOS:Windows 10 Pro 21H1
手順としては以下のサイトを参考にしました。
Azure AD Multi-factor Authentication のユーザー認証方法を管理する
2.GUIでの設定方法
CUIによる一括設定の前に、まずはGUIで設定する手順を確認していきます。設定はAzure Active Directory Admin センターから設定するようです。
設定するユーザーを選択し、「認証方法」-「認証方法の追加」から設定します。
※「方法の選択」で「電話番号」、「電話の種類」で「モバイル」を選択します。

(注)日本の場合には「+81〜」形式になります!

以上で登録が完了となります。
登録確認画面では先頭の0(ゼロ)は表記されなくなりますが、問題ありません。
※先頭の0(ゼロ)は国内を表すものなので、本来は不要です。
その為、登録の時点で先頭の0(ゼロ)を記載しなくとも正常に登録されます。
この辺りは親切設計になってますね(^o^)!
登録する際に「以前のユーザー認証方法エクスペリエンス」画面の場合には以下のような感じとなります。

ここまでで電話番号の設定が完了しましたので、後は多要素認証を有効化するとSMSに確認用メッセージが飛ぶような動きとなります。
<多要素認証 有効化画面>
「Microsoft 365管理センター」-「ユーザー」-「アクティブなユーザー」の「多要素認証」から設定

GUIの設定方法が確認出来たので、本題であるCUIによる一括設定方法を確認していきたいと思います!
3.CUIによる一括設定方法
まずはCUI(Powershell)コマンドの確認をしていきます。※事前にモジュールのインストール等も必要になります。
コマンド自体は以下を使用します。
モジュールのインストール
> Install-module Microsoft.Graph.Identity.Signins
PowershellでAzure ADへ接続
> Connect-MgGraph -Scopes UserAuthenticationMethod.ReadWrite.All
> Select-MgProfile -Name beta
電話認証方法を作成
> New-MgUserAuthenticationPhoneMethod -UserId <ユーザーID> -phoneType "mobile" -phoneNumber <電話番号>
確認コマンド
> Get-MgUserAuthenticationPhoneMethod -UserId <ユーザーID>
切断コマンド
> Disconnect-MgGraph
> Install-module Microsoft.Graph.Identity.Signins
PowershellでAzure ADへ接続
> Connect-MgGraph -Scopes UserAuthenticationMethod.ReadWrite.All
> Select-MgProfile -Name beta
電話認証方法を作成
> New-MgUserAuthenticationPhoneMethod -UserId <ユーザーID> -phoneType "mobile" -phoneNumber <電話番号>
確認コマンド
> Get-MgUserAuthenticationPhoneMethod -UserId <ユーザーID>
切断コマンド
> Disconnect-MgGraph
↓↓実際に使用した参考画面↓↓

スクリプトの実行ポリシーを変更するのを忘れていましたので、エラーが出てますね(^_^;)
その為、実行ポリシーの変更とスクリプトのインポートを実行しています。
Powershellで接続する際にサインイン画面が表示されます。


一番最初のみ「アクセス許可」を付与する画面が表示されます。
そのまま「承諾」で問題ありません。

正常に接続された後は実際に確認コマンドと電話認証方法の作成コマンドを使用してみます。


正常に追加されましたね!!(^o^)!!
ちなみにコマンド実行後にAzure AD Admin センターを確認すると「Microsoft Graph Powershell」アプリケーションに対して、アクセス許可が付与されているのが確認出来ます。


では、実際に各コマンドが確認出来たので一括で設定するスクリプトを作成していきます。
↓↓作成したスクリプトと準備するCSVファイルはこんな感じになりました↓↓
Add-AuthenticationPhoneMethod.ps1
#環境変数の設定
$CurrentFolder = Split-Path $MyInvocation.MyCommand.Path -Parent
$CSVFilePath = $CurrentFolder + "\AuthenticationPhoneInfo.csv"
$OutputLogFilePath = $CurrentFolder + "\Add-AuthenticationPhone.log"
#CSVファイルの読み込み
$AllPhoneInfo = Import-Csv -Path $CSVFilePath -Encoding Default
#Graph Powershellで接続
Connect-MgGraph -Scopes UserAuthenticationMethod.ReadWrite.All
Select-MgProfile -Name beta
#確認用ログの為にハッシュテーブル作成
$Array1 = @()
$ht1 = @{UserPrincipalName=""; PhoneNumber=""; SmsSignInState=""}
$i = 0
#一括設定
foreach($PhoneInfo in $AllPhoneInfo){
$UserInfo = $PhoneInfo.UserPrincipalName
$UserPhoneInfo = $PhoneInfo.PhoneNumber
Write-Host "${UserInfo}にて「${UserPhoneInfo}」を追加します. `r`n" -ForegroundColor Yellow
New-MgUserAuthenticationPhoneMethod -UserId $UserInfo -phoneType "mobile" -phoneNumber $UserPhoneInfo
#確認用ログの為にハッシュテーブルに値を入力
$AuthenticationPhoneInfo = Get-MgUserAuthenticationPhoneMethod -UserId $UserInfo
$Array1 += New-Object psobject -Property $ht1
$Array1[$i].UserPrincipalName = $UserInfo
$Array1[$i].PhoneNumber = $AuthenticationPhoneInfo.PhoneNumber
$Array1[$i].SmsSignInState = $AuthenticationPhoneInfo.SmsSignInState
$i = $i + 1
}
#確認用ログを出力
$Array1 = $Array1 | Select-Object UserPrincipalName,PhoneNumber,SmsSignInState
$Array1 | Export-Csv -Path $OutputLogFilePath -Encoding UTF8 -NoTypeInformation
Write-Host "処理が完了しました.`r`n" -ForegroundColor Green
pause
#切断コマンド
Disconnect-MgGraph
$CurrentFolder = Split-Path $MyInvocation.MyCommand.Path -Parent
$CSVFilePath = $CurrentFolder + "\AuthenticationPhoneInfo.csv"
$OutputLogFilePath = $CurrentFolder + "\Add-AuthenticationPhone.log"
#CSVファイルの読み込み
$AllPhoneInfo = Import-Csv -Path $CSVFilePath -Encoding Default
#Graph Powershellで接続
Connect-MgGraph -Scopes UserAuthenticationMethod.ReadWrite.All
Select-MgProfile -Name beta
#確認用ログの為にハッシュテーブル作成
$Array1 = @()
$ht1 = @{UserPrincipalName=""; PhoneNumber=""; SmsSignInState=""}
$i = 0
#一括設定
foreach($PhoneInfo in $AllPhoneInfo){
$UserInfo = $PhoneInfo.UserPrincipalName
$UserPhoneInfo = $PhoneInfo.PhoneNumber
Write-Host "${UserInfo}にて「${UserPhoneInfo}」を追加します. `r`n" -ForegroundColor Yellow
New-MgUserAuthenticationPhoneMethod -UserId $UserInfo -phoneType "mobile" -phoneNumber $UserPhoneInfo
#確認用ログの為にハッシュテーブルに値を入力
$AuthenticationPhoneInfo = Get-MgUserAuthenticationPhoneMethod -UserId $UserInfo
$Array1 += New-Object psobject -Property $ht1
$Array1[$i].UserPrincipalName = $UserInfo
$Array1[$i].PhoneNumber = $AuthenticationPhoneInfo.PhoneNumber
$Array1[$i].SmsSignInState = $AuthenticationPhoneInfo.SmsSignInState
$i = $i + 1
}
#確認用ログを出力
$Array1 = $Array1 | Select-Object UserPrincipalName,PhoneNumber,SmsSignInState
$Array1 | Export-Csv -Path $OutputLogFilePath -Encoding UTF8 -NoTypeInformation
Write-Host "処理が完了しました.`r`n" -ForegroundColor Green
pause
#切断コマンド
Disconnect-MgGraph
AuthenticationPhoneInfo.csv
UserPrincipalName,PhoneNumber
testuser01@~,+81 09012345678
test01@~,+81 09098765432
test100@~,+81 08011119999
test101@~,+81 08022228888
testuser01@~,+81 09012345678
test01@~,+81 09098765432
test100@~,+81 08011119999
test101@~,+81 08022228888
<CSVファイルの例>

(注)「Import-CSV」コマンド時に文字コードを「Shift-JIS」で指定してますので、エクセルで作成・編集したものを使用可能です。ただし、日本語が入っていなければ「UTF-8」でも問題ないような気がします。
<実際に実行した画面>

作成したスクリプトとCSVファイルを同一フォルダ内に配置して、Powershellとして実行します。


実行完了後は同じフォルダに設定確認用ログが出力されます。
<出力された確認ログ(Add-AuthenticationPhone.log)>

注意点としては、既に電話認証方法(電話番号)が作成済みの場合にはエラーとなります。
また今回は4件しか実行してませんので発生しませんでしたが、数が多くなると処理の間にウェイトを入れないとAPIエラー?が発生するかもしれません。
⇒その場合にはforeachの最後に適切な秒数ウェイトを入れればいいと思われます。
今回準備したCSVファイルですが、以下の検証時に作成したCSVファイルを使い回すのも一つの手かもしれませんね。
その際には先頭に「+81 」を忘れずに追加しましょうね!
(Office365)Powershellにてユーザーを一括登録する方法を検証してみた 〜New-MsolUser〜
長くなりましたが、今回の検証はこんなところで終わりたいと思いますっ( ´ー`)フゥー...
今回はあくまで登録作業のみで実際の多要素認証の有効化は未実施ですので、
次回はこの辺りを検証してみたいと思いますっ(^o^)
<追記>
「[Microsoft 365]多要素認証(二要素認証)の有効化をコマンドで一括設定する方法を検証してみた 〜Set-MsolUser〜」で多要素認証の有効化をコマンドで実施する検証を載せています。
スポンサードリンク
コメント