2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

株式会社クラスアクトAdvent Calendar 2022

Day 13

Microsoft365でユーザー単位MFA認証の有効無効をPowershellで操作する

Last updated at Posted at 2022-12-12

(2023/04/18 追記)
メモに記載しましたが、Powershellを利用したユーザー単位のMFA有効/無効の切り替えは今後サポートされないようです。
代替策としては、条件付きアクセス等を用いた操作になります。(コマンドでは出来なさそう)

前書き

Google Workspace(旧G Suite)やMicrosoft365(旧Office365)などの、クラウドグループウェアサービスを導入する企業が増加傾向にあるのは、特にしっかりとデータなどを用意しなくても、昨今のクラウドファーストやDXの声などから窺い知ることが出来そうな物です。
こういったサービスを企業に導入していくには様々な課題が生じますが、その中の「セキュリティ」「多要素認証」あたりからちょっとコアな記事です。
コアと言っても、タイトルの通りのことをするのですが、一部クセがあったのでその備忘録になります。

準備

Microsoft365で全体管理者権限のユーザを用意する

今回の操作は、Microsoft365の全体管理者(または、グローバル管理者)の権限を持ったユーザーが必要です。
Microsoft365管理センターの左メニューから、「役割」>「役割の割り当て」を選ぶと、おすすめの項目に目的の権限が見つかります。
権限を選んだ後に、ユーザーの追加を選びます。
image.png

ユーザーの追加ページでは、追加したいユーザーを検索なりしたあとに、ユーザーを選択して「追加」を選択。
image.png

これで全体管理者にユーザーを追加できました。

Powershellでパッケージのインストールをする

Powershellで操作したいので、Powershellに必要なパッケージをインストールしていきます。

Install-Module MSOnline

環境によってはインストール時に、「NuGetプロバイダーが必要です」とか「信頼していないリポジトリからモジュールのインストールです」とか言われます。
大体Y押してEnterで解決します。(もちろん、インストールする前に何をインストールしているのかを理解してから実施するべきです。)
モジュールインストールがされているかも念のため確認しておきます。

Get-InstalledModule -Name MSOnline

大体以下のような出力になると思います。

PS C:\> Get-InstalledModule -Name MSOnline

Version    Name                                Repository           Description
-------    ----                                ----------           -----------
1.1.183.66 MSOnline                            PSGallery            Microsoft Azure Active Directory Module for Wind...

PowerShellでMFA設定を操作する

Azure ADに接続する

ここから本番。設定の操作をするには、まずAzure ADに接続する必要がありますので、以下のコマンドで接続をします。

Connect-MsolService

コマンド実行後、小さいウィンドウが立ち上がってMicrosoft365のサインインを求められます。
ここでは全体管理者を付与したユーザーでサインインします。
image.png

サインインに完了すると、特にログが出ないですがAzure ADに接続された状態になります。

MFAの「状態」

有効以外にも共通するのですが、「特定のユーザー」の「StrongAuthenticationRequirement」オブジェクトの値を弄ることでMFAの状態を操作します。
MFAの状態は以下の3つがあります。

  • 有効(Enable)
  • 強制(Enforce)
  • 無効(Disable)

有効と強制はどう違うの?って話ですが、基本的に「有効」になるようにしておけば良いかと思います。
「有効」になったユーザーは次のサインイン時にMFAのセットアップを行いますが、そのセットアッププロセスが完了すると自動的に「強制」に切り替わります。
また、Microsoftの公開文書では、MFA登録済みだったり、レガシー認証が突然使えなくなることを許容できる場合を除いて、「強制」に手動変更しない方が良いと記載があり、リスクが生じるようです。

MFAを有効にする

有効にするには、以下のコマンドを実行します。

# StrongAuthenticationRequirementをもつオブジェクトを作って値を入れる
$MFA = New-Object -TypeName Microsoft.Online.Administration.StrongAuthenticationRequirement
$MFA.RelyingParty = "*"
$MFA.State = "Enable"
$MFArr = @($MFA)
# 作ったオブジェクトをユーザーの設定変更コマンドに配列として渡す
Set-MsolUser -UserPrincipalName test@XXX.onmicrosoft.com -StrongAuthenticationRequirements $MFArr

MFAを有効にすると、そのユーザーは次回サインイン時にMFAのセットアップを求められます。

MFAを強制にする

StateがEnableからEnforcedに変わるだけです。

# StrongAuthenticationRequirementをもつオブジェクトを作って値を入れる
$MFA = New-Object -TypeName Microsoft.Online.Administration.StrongAuthenticationRequirement
$MFA.RelyingParty = "*"
$MFA.State = "Enforced"
$MFArr = @($MFA)
# 作ったオブジェクトをユーザーの設定変更コマンドに配列として渡す
Set-MsolUser -UserPrincipalName test@XXX.onmicrosoft.com -StrongAuthenticationRequirements $MFArr

MFAを無効にする

ここだけクセあります。
StateにDisableを入れると思いきや、StrongAuthenticationRequirementsに空の配列を与えます。

# 空の配列をユーザーの設定変更コマンドに配列として渡す
Set-MsolUser -UserPrincipalName test@XXX.onmicrosoft.com -StrongAuthenticationRequirements @()

メモ

  • 条件付きアクセスポリシーが要件上利用出来ない、ある日「我が社はこれから全社員MFAを使いなさい!」って時に使えそう。
  • テナント全体のセキュリティ規定値機能によってMFAを有効にしている場合、この手段は通用しないかも。
  • 条件付きアクセス機能を使っている場合も、あまり利用しないことだと思います。
  • MSOnlineモジュールはMicrosoftの公開情報によると廃止予定です。

参考資料

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?