MFA によって保護されていない Azure AD 管理者アカウントを報告する方法
MSOL コマンドレットの代わりにグラフ API を使用する
このブログの定期的な読者が知っているように、Microsoft 365テナントが多要素認証(MFA)、特にAzure AD管理者ロールでユーザーアカウントを保護することを切望しています。テナントを保護する製品に関してセキュリティベンダーが約束したすべての約束にもかかわらず、組織が実行できる最も効果的な手順は、アカウントが MFA を使用して Microsoft 365 にサインインすることを確認することです。数年前、マイクロソフトはMFAがアカウント侵害攻撃の99.9%をブロックすると報告しました。その統計は疑問の余地がないままです。
長年にわたり、テナント管理者がユーザー アカウント内での MFA の使用を理解できるように、いくつかのスクリプトを作成しました。元の 2018 年の記事では、アカウントが MFA を使用できるようにすることの報告に焦点を当てていました。私は2019年に、管理者の役割を持つ保護されていないアカウントを見つける方法を説明する記事でフォローアップしました。両方の記事の欠点は、テキストで説明されているPowerShellコードが、マイクロソフトが非推奨化を進めている古いMicrosoft Online Services (MSOL)モジュールのコマンドレットを使用していることです。コードはまだ動作しますが、記事は昨日議論したように、インターネット上で見つけることができるアドバイスの良い例であり、品位を傷つけており、すぐに時代遅れになります。
マイクロソフトは、すべてのユーザーが PowerShell スクリプトを書き直して、Graph API 要求または Microsoft Graph PowerShell SDK のコマンドレットを使用することを望んでいます。同等のAPIサポートが利用できないことは、マイクロソフトの願望を弱体化させました。Azure AD アカウントで使用されている認証方法をレポートすることは可能でしたが、管理者アカウントとその MFA 状態を示すレポートをレプリケートすることはより困難でした。
グラフ登録の詳細
入力 Microsoft Graph ユーザー登録詳細リソースの種類.これはベータ API で、以前よりも処理しやすい方法でユーザーの認証方法の一覧を返します。次の 2 つの要求を使用できます。
- リスト: 組織内のすべての Azure AD アカウントの認証方法を返します。返されるデータには、会議室メールボックスなどの目的で使用されるゲスト アカウントとライセンスのないメンバー アカウントが含まれているため、これは思ったほど役に立ちません。
- 取得: 1 つの Azure AD アカウントの認証方法を返します。実際には、この API の方がはるかに便利です。
ユーザー アカウントに対して返される認証方法のデータを以下に示します。この場合、アカウントは MFA に対応していません。
Name Value ---- ----- userPrincipalName Andy.Ruth@office365itpros.com defaultMfaMethod none isMfaCapable False isSsprCapable False @odata.context https://graph.microsoft.com/beta/$metadata#reports/authenticationMethods/userRegistrationDetails/$entity isSsprEnabled False id fdc6b121-44b8-4262-9ca7-3603a16caa3e methodsRegistered {email} isMfaRegistered False isPasswordlessCapable False isSsprRegistered True userDisplayName Andy Ruth (Director)
Microsoft Graph PowerShell SDK には、 Get-MgReportAuthenticationMethodUserRegistrationDetail コマンドレット (自動的に生成されたコマンドレット名を気に入るはずです)。パラメーターを指定せずにコマンドレットを実行すると、List API によって返されるのと同じデータが得られます。個々のアカウントのデータを返すには、ユーザー プリンシパル名を指定するフィルターを含めます。例えば:
Get-MgReportAuthenticationMethodUserRegistrationDetail -Filter "UserPrincipalName eq 'Sean.Landy@office365itpros.com'" | Fl DefaultMfaMethod : mobilePhone Id : 08dda855-5dc3-4fdc-8458-cbc494a5a774 IsMfaCapable : True IsMfaRegistered : True IsPasswordlessCapable : False IsSsprCapable : False IsSsprEnabled : False IsSsprRegistered : True MethodsRegistered : {mobilePhone} UserDisplayName : Sean Landy UserPrincipalName : Sean.Landy@office365itpros.com AdditionalProperties : {}
レポートの作成
個々のアカウントに関する情報を取得する方法を知っているので、1つ以上の管理者ロールを持つユーザーに特別な注意を払ってすべてのユーザーアカウントをチェックする方法を検討できます。Microsoft Graph PowerShell SDK からの Graph API 要求とコマンドレットを組み合わせて使用して、次の手順を実行しました。
- Microsoft Graph SDK に接続します。指定する必要があります。 UserAuthenticationMethod.Read.All そして AuditLog.Read.All 権限。
- 走る Get-MgDirectoryRole をクリックして、使用可能なロールのセットを検索します。
- ロールごとに、 Get-MgDirectoryRoleMember をクリックして、ロールの現在の所有者を検索します。
- 管理者ロールを保持するアカウントの配列を作成します。
- 走る Get-MgUser をクリックして、ライセンスを取得したユーザー アカウントのセットを検索します (管理者アカウントには少なくとも 1 つのライセンスがあると考えるのが妥当です)。
- アカウントごとに、認証方法を取得します。グラフ API 要求または Get-MgReportAuthenticationMethodUserRegistrationDetail コマンドレット。
- アカウントが管理者ロールを保持しているかどうかを確認し、保持している場合は、アカウントが保持しているロールを取得します。
- Excel ワークシートでレポートを生成します (Excel のインポート モジュールを使用)。
- スクリプトが保護されていない管理者アカウントを検出した場合、警告メッセージを出力します(図1)。

Excel ワークシート (図 2) は、データをスライスしてダイスし、必要なレポートを生成できるという点で特に便利です。たとえば、あなたはcリストされているアカウントの多くは、2番目の認証方法に携帯電話(SMSメッセージ)を使用していることがわかります。Microsoft 認証アプリはより優れたオプションであるため、現在携帯電話を使用しているアカウントに関するデータを取得して、認証アプリへの移行を促すことができます。

GitHub からスクリプトをダウンロードする
できます GitHub から Azure AD 管理者ロールと保護されていないアカウントを報告するための完全なスクリプトをダウンロードします。.これは、既製のソリューションではなくプリンシパルを示すために記述されたコードであることに注意してください。コードは基本的な PowerShell であり、ニーズに合わせて変更できます。楽しむ!
ディスカッション
コメント一覧
まだ、コメントがありません