<p>本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。
<!--META
{
"title": "Azure AD条件付きアクセス(Microsoft Entra ID Conditional Access)設計とMFAの実践",
"primary_category": "クラウド>Azure",
"secondary_categories": ["セキュリティ","アイデンティティ管理"],
"tags": ["Microsoft Entra ID", "Conditional Access", "MFA", "Graph API", "Azure AD"],
"summary": "Microsoft Entra IDの条件付きアクセスとMFA設計について、アーキテクチャ、設定、運用、セキュリティ、コスト、落とし穴をクラウドアーキテクト視点で解説します。",
"mermaid": true,
"verify_level": "L0",
"tweet_hint": {"text":"Microsoft Entra IDの条件付きアクセスとMFA設計について、アーキテクチャ、設定、運用、セキュリティ、コスト、落とし穴をクラウドアーキテクト視点で解説。Graph APIでのポリシー管理やコスト最適化のヒントも。 #Azure
#EntraID","hashtags":["#Azure","#EntraID","#ConditionalAccess"]},
"link_hints": ["https://learn.microsoft.com/ja-jp/azure/active-directory/conditional-access/","https://learn.microsoft.com/ja-jp/microsoft-365/business/set-up-multi-factor-authentication"]
}
--></p>
<h1 class="wp-block-heading">Azure AD条件付きアクセス(Microsoft Entra ID Conditional Access)設計とMFAの実践</h1>
<p>クラウド環境におけるセキュリティの根幹をなすのが、適切なアイデンティティとアクセス管理です。Microsoft Entra ID(旧Azure AD)の条件付きアクセス(Conditional Access: CA)は、Zero Trustの原則に基づき、特定の条件が満たされた場合にのみリソースへのアクセスを許可する強力な機能です。本記事では、クラウドアーキテクトの視点から、Microsoft Entra IDにおけるCAポリシーと多要素認証(MFA)の設計、実装、運用について実践的なアプローチを解説します。</p>
<h2 class="wp-block-heading">1. アーキテクチャの概要</h2>
<p>Microsoft Entra IDの条件付きアクセスは、ユーザー、デバイス、場所、アプリケーション、リスクレベルなどの多様なシグナル(条件)に基づいて、リソースへのアクセスを許可または拒否するアクセス制御ポリシーエンジンです。これにより、組織はセキュリティ体制を強化し、規制要件に準拠することができます。MFAは、CAポリシーの最も一般的なアクセス制御の一つであり、ユーザー認証の強度を大幅に向上させます。</p>
<h3 class="wp-block-heading">条件付きアクセスフローの概念図</h3>
<p>ユーザーがMicrosoft Entra IDで保護されたアプリケーションにアクセスしようとすると、Entra IDは設定されたCAポリシーを評価します。この評価は、以下のようなフローで実行されます。</p>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph TD
A["ユーザー/デバイス"] --> |1. アクセス要求| B("Microsoft Entra ID")
B --> |2. 認証実行| C{"認証情報提示"}
C --> |3. ポリシー評価シグナル収集| D("条件付きアクセス ポリシーエンジン")
D --> |4. 条件評価| E{"ポリシーの条件に一致?"}
E -- "Yes" --> F{"アクセス制御の適用"}
F -- "MFA要求" --> G["MFAプロンプト"]
G --> |5. MFA成功| H["アクセス許可"]
F -- "アクセスブロック" --> I["アクセス拒否"]
E -- "No" --> H
H --> J["対象アプリケーション"]
I --> J
</pre></div>
<p><strong>図1:条件付きアクセスの概要フロー</strong></p>
<p>このフローでは、ユーザーからのアクセス要求に対し、Microsoft Entra IDはCAポリシーエンジンを通じて、ユーザー、デバイス、場所などのシグナルを収集し、定義された条件に照らし合わせてアクセス制御(MFA要求、アクセスブロックなど)を適用します。</p>
<h3 class="wp-block-heading">アイデンティティと権限境界</h3>
<ul class="wp-block-list">
<li><p><strong>Microsoft Entra ID</strong>: アイデンティティプロバイダーとして、ユーザーアカウント、グループ、アプリケーションを管理します。CAポリシーの評価と強制の中核を担います。</p></li>
<li><p><strong>ロール</strong>: Microsoft Entra IDには、グローバル管理者、条件付きアクセス管理者などの組み込みロールがあります。CAポリシーの管理には、「条件付きアクセス管理者」ロールが推奨されます。</p></li>
<li><p><strong>条件付きアクセス (CA)</strong>: アクセス要求が特定の条件を満たす場合に、MFAの強制、デバイスの準拠、セッション制御などの追加要件を課すためのポリシー定義層です。</p></li>
<li><p><strong>Microsoft Defender for Cloud Apps (MDCA)</strong>: CAポリシーと連携し、リアルタイムのセッション制御や異常検出を提供し、クラウドアプリケーションへのアクセスをさらに保護します。</p></li>
</ul>
<h2 class="wp-block-heading">2. 設定手順</h2>
<p>ここでは、Graph APIを用いてMFAを要求するシンプルな条件付きアクセスポリシーを作成する手順を示します。このポリシーは、特定のグループのユーザーがクラウドアプリケーションにアクセスする際にMFAを強制するものです。</p>
<h3 class="wp-block-heading">前提条件</h3>
<ul class="wp-block-list">
<li><p>Microsoft Entra ID P1またはP2ライセンス</p></li>
<li><p>Microsoft Graph PowerShell SDKのインストール</p>
<div class="codehilite">
<pre data-enlighter-language="generic">Install-Module Microsoft.Graph -Scope CurrentUser
</pre>
</div></li>
<li><p>適切な権限を持つアカウントでの認証(例: 条件付きアクセス管理者ロール)</p>
<div class="codehilite">
<pre data-enlighter-language="generic">Connect-MgGraph -Scopes "Policy.ReadWrite.ConditionalAccess"
</pre>
</div></li>
</ul>
<h3 class="wp-block-heading">CAポリシーの作成 (Graph API)</h3>
<p>MFAを強制するCAポリシーを作成するには、以下のPowerShellスクリプトを実行します。この例では、「営業部」グループのメンバーが「すべてのクラウドアプリ」にアクセスする際にMFAを要求します。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"># ポリシーに含めるユーザーグループのオブジェクトIDを取得(例として「営業部」グループ)
# 実際の環境に合わせてオブジェクトIDを調査してください。
$groupId = (Get-MgGroup -Filter "DisplayName eq '営業部'").Id
# 条件付きアクセスポリシー定義のJSONボディ
$policyJson = @'
{
"displayName": "営業部MFA強制ポリシー",
"state": "enabled", # または "enabledForReportingButNotEnforced" でレポート専用モード
"conditions": {
"users": {
"includeGroups": ["{groupId}"],
"excludeUsers": [
"a1b2c3d4-e5f6-7890-1234-567890abcdef" # 例: 緊急アクセスアカウントの除外
]
},
"applications": {
"includeApplications": ["All"]
},
"clientAppTypes": {
"includeClientAppTypes": ["all"]
},
"locations": {
"includeLocations": ["All"]
}
},
"grantControls": {
"operator": "OR",
"builtInControls": ["mfa"]
}
}
'@
# グループIDをJSON文字列に埋め込む
$policyBody = $policyJson.Replace("{groupId}", $groupId) | ConvertFrom-Json
# Graph APIを使用して条件付きアクセスポリシーを作成
try {
New-MgIdentityConditionalAccessPolicy -BodyParameter $policyBody | Format-List
Write-Host "条件付きアクセスポリシー '営業部MFA強制ポリシー' が正常に作成されました。"
} catch {
Write-Host "ポリシーの作成中にエラーが発生しました: $($_.Exception.Message)"
}
# MFAの認証方法ポリシーの確認/設定(ユーザーがMFAを登録できるようにする)
# これはCAポリシーとは別に設定します。
Write-Host "MFA認証方法ポリシーの確認と設定は、Microsoft Entra管理センターの [保護] > [認証方法] > [ポリシー] で行います。"
Write-Host "または、Graph APIの 'beta' エンドポイントで構成可能です。"
</pre>
</div>
<p><strong>コメント:</strong></p>
<ul class="wp-block-list">
<li><p><strong>前提条件</strong>: Microsoft Entra ID P1/P2ライセンスとGraph SDKのインストール、適切な認証スコープが必要です。</p></li>
<li><p><strong>入力</strong>: <code>$groupId</code> にはMFAを強制したいユーザーグループのオブジェクトIDを指定します。</p></li>
<li><p><strong>出力</strong>: 作成されたポリシーの詳細が出力されます。エラー時にはエラーメッセージが表示されます。</p></li>
<li><p><strong>計算量</strong>: API呼び出し1回(O(1))。</p></li>
<li><p><strong>メモリ条件</strong>: 小規模なJSONボディとAPIレスポンスを処理するため、特段のメモリ要件はありません。</p></li>
</ul>
<p><code>state</code> を <code>enabledForReportingButNotEnforced</code> に設定することで、ポリシーを運用環境に展開する前に、影響をレポートで確認する「レポート専用モード」でテストできます。これにより、意図しないアクセスブロックを防げます。</p>
<h2 class="wp-block-heading">3. 運用監視</h2>
<p>条件付きアクセスとMFAの運用監視は、セキュリティ体制の維持と問題発生時の迅速な対応に不可欠です。</p>
<h3 class="wp-block-heading">可観測性</h3>
<ul class="wp-block-list">
<li><p><strong>サインインログ</strong>: Microsoft Entra IDは、すべての認証試行の詳細なログを記録します。CAポリシーがどのように評価され、MFAが要求されたか、アクセスが許可または拒否されたかを確認できます。</p>
<ul>
<li><p>管理センター: <code>Microsoft Entra 管理センター</code> > <code>Identity</code> > <code>監視と正常性</code> > <code>サインインログ</code></p></li>
<li><p>ログエントリには、ユーザー、アプリケーション、場所、デバイスの状態、ポリシーの結果などが含まれます。</p></li>
</ul></li>
<li><p><strong>監査ログ</strong>: CAポリシーの作成、変更、削除などの管理操作が記録されます。</p>
<ul>
<li>管理センター: <code>Microsoft Entra 管理センター</code> > <code>Identity</code> > <code>監視と正常性</code> > <code>監査ログ</code></li>
</ul></li>
</ul>
<h3 class="wp-block-heading">ログの出力と分析</h3>
<p>これらのログは、Log Analyticsワークスペースに診断設定として転送することで、高度なクエリ(KQL)やアラート設定が可能になります。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"># Microsoft Entra サインインログと監査ログをLog Analyticsワークスペースに転送する診断設定の例
# 事前にLog Analyticsワークスペースを作成しておく必要があります。
$workspaceId = "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroup}/providers/Microsoft.OperationalInsights/workspaces/{workspaceName}" # ワークスペースIDを指定
$resourceId = "/providers/Microsoft.Aadiam/diagnosticSettings/serviceLogs"
New-AzDiagnosticSetting -Name "EntraID-Logs-to-LogAnalytics" `
-ResourceId "/providers/Microsoft.Aadiam/diagnosticSettings/serviceLogs" ` # Entra IDの特定のリソースID
-WorkspaceId $workspaceId `
-Categories "SignInLogs", "AuditLogs" ` # 転送するログカテゴリ
-MetricCategory "AllMetrics" `
-Enabled $true
Write-Host "Microsoft Entra IDのサインインログと監査ログの診断設定が完了しました。"
</pre>
</div>
<p><strong>コメント:</strong></p>
<ul class="wp-block-list">
<li><p><strong>前提条件</strong>: Azureサブスクリプション、Log Analyticsワークスペース、<code>Az.Monitor</code>モジュール(<code>Install-Module Az.Monitor</code>)。</p></li>
<li><p><strong>入力</strong>: <code>$workspaceId</code> にLog AnalyticsワークスペースのリソースIDを正確に指定する必要があります。<code>resourceId</code>はMicrosoft Entra IDの診断設定における特殊なIDです。</p></li>
<li><p><strong>出力</strong>: 診断設定の成功メッセージ。</p></li>
<li><p><strong>計算量</strong>: API呼び出し1回(O(1))。</p></li>
</ul>
<p>KQLクエリ例(過去24時間でMFAが要求され、かつ失敗したサインインを検索):</p>
<div class="codehilite">
<pre data-enlighter-language="generic">SigninLogs
| where TimeGenerated > ago(24h)
| where ConditionalAccessPolicies has "MFA was required"
| where Status.errorCode != 0
| project TimeGenerated, UserDisplayName, UserPrincipalName, AppDisplayName, Status, ConditionalAccessPolicies, Location
| sort by TimeGenerated desc
</pre>
</div>
<h3 class="wp-block-heading">SLA/バックアップ/DR</h3>
<ul class="wp-block-list">
<li><p><strong>SLA</strong>: Microsoft Entra IDは、Microsoftによって高可用性とパフォーマンスのSLAが提供されています(通常99.9%)。条件付きアクセスを含むサービス全体がこのSLAの対象です。</p></li>
<li><p><strong>バックアップ/DR</strong>: Entra IDのデータ(ユーザー、グループ、ポリシーなど)のバックアップと災害復旧はMicrosoftによって管理されており、顧客側での具体的なバックアップ操作は不要です。ポリシー設定の変更は監査ログに記録され、以前の設定に戻すことは可能ですが、定期的なポリシー設定のコード化(IaC)がベストプラクティスです。</p></li>
</ul>
<h2 class="wp-block-heading">4. セキュリティ強化</h2>
<p>条件付きアクセスとMFAは、エンタープライズセキュリティにおいて不可欠な要素です。</p>
<ul class="wp-block-list">
<li><p><strong>Zero Trust原則の実現</strong>: 「決して信頼せず、常に検証する」というZero Trustの考え方をCAポリシーで具現化します。すべてのアクセス要求を明示的に検証し、最小特権の原則を適用します。</p></li>
<li><p><strong>レガシー認証のブロック</strong>: CAポリシーを使用してExchange ActiveSyncなどのレガシー認証プロトコルをブロックすることで、MFAを回避されるリスクを低減できます。これは一般的な攻撃ベクトルです。</p></li>
<li><p><strong>リスクベース条件付きアクセス</strong>: Microsoft Entra Identity Protectionと連携し、ユーザーやサインインのリスクレベルに基づいてMFAを要求したり、パスワード変更を強制したりするポリシーを適用できます。</p></li>
<li><p><strong>Microsoft Defender for Cloud Apps (MDCA) との連携</strong>: CAポリシーでMDCAをセッション制御プロバイダーとして利用することで、アクセス後にセッションを監視し、機密情報のダウンロードブロックや特定の操作の制限を行うことができます。</p></li>
</ul>
<h2 class="wp-block-heading">5. コスト最適化</h2>
<p>条件付きアクセスを利用するには、Microsoft Entra IDのP1またはP2ライセンスが必要です。</p>
<ul class="wp-block-list">
<li><p><strong>ライセンスモデル</strong>:</p>
<ul>
<li><p><strong>Microsoft Entra ID P1</strong>: 条件付きアクセス、MFA(Microsoft Authenticatorアプリなど)、Self-Service Password Reset (SSPR) などの基本的なアイデンティティ管理機能を提供します。</p></li>
<li><p><strong>Microsoft Entra ID P2</strong>: P1の全機能に加え、Microsoft Entra Identity Protection(リスクベースCA、リスクイベント検出)、Privileged Identity Management (PIM) などの高度なアイデンティティセキュリティ機能が含まれます。</p></li>
</ul></li>
<li><p><strong>コスト最適化のポイント</strong>:</p>
<ol>
<li><p><strong>適切なSKUの選択</strong>: 必要な機能に応じてP1またはP2を選択します。リスクベースCAやPIMが不要であれば、P1で十分な場合があります。</p></li>
<li><p><strong>ライセンスの割り当て</strong>: CAポリシーの対象となるユーザーのみにP1/P2ライセンスを割り当てます。すべてのユーザーにP2を割り当てる必要がないか検討します。</p></li>
<li><p><strong>不要なライセンスの棚卸し</strong>: 定期的に使用されていないP1/P2ライセンスを棚卸しし、割り当てを解除することで無駄なコストを削減します。</p></li>
</ol></li>
</ul>
<p>MFA自体には追加コストは発生しませんが、MFAを強制するためのCAポリシー機能はP1/P2ライセンスが必要です。JST {{jst_today}}現在、P1ライセンスはユーザーあたり月額約800円、P2ライセンスは約1,300円です。正確な価格はMicrosoftの公式価格ページでご確認ください[1]。</p>
<h2 class="wp-block-heading">6. 落とし穴と対策</h2>
<p>CAポリシーの設計と導入には、注意すべき落とし穴がいくつか存在します。</p>
<ul class="wp-block-list">
<li><p><strong>緊急アクセスアカウントの除外忘れ</strong>: すべてのCAポリシーから、最低2つの緊急アクセスアカウント(グローバル管理者など)を必ず除外してください。これにより、ポリシー設定ミスやIDプロバイダーの障害発生時にシステムからロックアウトされる事態を防ぎます。これらのアカウントは厳重に管理し、使用頻度を監視してください。</p></li>
<li><p><strong>広すぎるスコープの初期適用</strong>: 最初から「すべてのユーザー」と「すべてのクラウドアプリ」にCAポリシーを適用すると、大規模なロックアウトを引き起こす可能性があります。最初は小規模なテストグループと特定のアプリケーションから開始し、段階的に適用範囲を拡大してください。</p></li>
<li><p><strong>ポリシー競合と評価順序</strong>: 複数のCAポリシーが存在する場合、評価順序によって意図しない結果が生じることがあります。Microsoft Entra管理センターの「What If」ツールを使用して、特定のユーザーと条件下でどのポリシーが適用され、最終的なアクセス結果がどうなるかをシミュレーションすることが重要です。</p></li>
<li><p><strong>レガシー認証プロトコル</strong>: 一部のアプリケーションやクライアント(古いバージョンのOfficeクライアントなど)は、MFAに対応していないレガシー認証プロトコルを使用する場合があります。これらの認証をブロックしないと、CAポリシーの効果が半減します。CAポリシーでレガシー認証をブロックするルールを早期に導入し、影響を受けるユーザーにはモダン認証への移行を促す必要があります。</p></li>
<li><p><strong>ユーザーエクスペリエンスの考慮</strong>: MFA要求が多すぎるとユーザーの生産性を損ない、MFA疲労を引き起こす可能性があります。信頼できるデバイスや場所からのアクセスではMFA頻度を下げるなど、バランスの取れた設計を検討してください。</p></li>
</ul>
<h2 class="wp-block-heading">7. まとめ</h2>
<p>Microsoft Entra IDの条件付きアクセスとMFAは、現代のクラウド環境におけるセキュリティの要石です。適切なアーキテクチャ設計、Graph APIを活用した自動化された設定、詳細な運用監視、そして潜在的な落とし穴への対策を講じることで、組織は強固なセキュリティ体制を確立し、Zero Trust原則を実践できます。継続的な評価と改善を通じて、変化する脅威に対応し、より安全なデジタル環境を構築しましょう。</p>
<hr/>
<p>[1] Microsoft Entra ID の料金: <a href="https://azure.microsoft.com/ja-jp/pricing/details/active-directory/">https://azure.microsoft.com/ja-jp/pricing/details/active-directory/</a> (JST {{jst_today}} 確認)</p>
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
Azure AD条件付きアクセス(Microsoft Entra ID Conditional Access)設計とMFAの実践
クラウド環境におけるセキュリティの根幹をなすのが、適切なアイデンティティとアクセス管理です。Microsoft Entra ID(旧Azure AD)の条件付きアクセス(Conditional Access: CA)は、Zero Trustの原則に基づき、特定の条件が満たされた場合にのみリソースへのアクセスを許可する強力な機能です。本記事では、クラウドアーキテクトの視点から、Microsoft Entra IDにおけるCAポリシーと多要素認証(MFA)の設計、実装、運用について実践的なアプローチを解説します。
1. アーキテクチャの概要
Microsoft Entra IDの条件付きアクセスは、ユーザー、デバイス、場所、アプリケーション、リスクレベルなどの多様なシグナル(条件)に基づいて、リソースへのアクセスを許可または拒否するアクセス制御ポリシーエンジンです。これにより、組織はセキュリティ体制を強化し、規制要件に準拠することができます。MFAは、CAポリシーの最も一般的なアクセス制御の一つであり、ユーザー認証の強度を大幅に向上させます。
条件付きアクセスフローの概念図
ユーザーがMicrosoft Entra IDで保護されたアプリケーションにアクセスしようとすると、Entra IDは設定されたCAポリシーを評価します。この評価は、以下のようなフローで実行されます。
graph TD
A["ユーザー/デバイス"] --> |1. アクセス要求| B("Microsoft Entra ID")
B --> |2. 認証実行| C{"認証情報提示"}
C --> |3. ポリシー評価シグナル収集| D("条件付きアクセス ポリシーエンジン")
D --> |4. 条件評価| E{"ポリシーの条件に一致?"}
E -- "Yes" --> F{"アクセス制御の適用"}
F -- "MFA要求" --> G["MFAプロンプト"]
G --> |5. MFA成功| H["アクセス許可"]
F -- "アクセスブロック" --> I["アクセス拒否"]
E -- "No" --> H
H --> J["対象アプリケーション"]
I --> J
図1:条件付きアクセスの概要フロー
このフローでは、ユーザーからのアクセス要求に対し、Microsoft Entra IDはCAポリシーエンジンを通じて、ユーザー、デバイス、場所などのシグナルを収集し、定義された条件に照らし合わせてアクセス制御(MFA要求、アクセスブロックなど)を適用します。
アイデンティティと権限境界
Microsoft Entra ID: アイデンティティプロバイダーとして、ユーザーアカウント、グループ、アプリケーションを管理します。CAポリシーの評価と強制の中核を担います。
ロール: Microsoft Entra IDには、グローバル管理者、条件付きアクセス管理者などの組み込みロールがあります。CAポリシーの管理には、「条件付きアクセス管理者」ロールが推奨されます。
条件付きアクセス (CA): アクセス要求が特定の条件を満たす場合に、MFAの強制、デバイスの準拠、セッション制御などの追加要件を課すためのポリシー定義層です。
Microsoft Defender for Cloud Apps (MDCA): CAポリシーと連携し、リアルタイムのセッション制御や異常検出を提供し、クラウドアプリケーションへのアクセスをさらに保護します。
2. 設定手順
ここでは、Graph APIを用いてMFAを要求するシンプルな条件付きアクセスポリシーを作成する手順を示します。このポリシーは、特定のグループのユーザーがクラウドアプリケーションにアクセスする際にMFAを強制するものです。
前提条件
Microsoft Entra ID P1またはP2ライセンス
Microsoft Graph PowerShell SDKのインストール
Install-Module Microsoft.Graph -Scope CurrentUser
適切な権限を持つアカウントでの認証(例: 条件付きアクセス管理者ロール)
Connect-MgGraph -Scopes "Policy.ReadWrite.ConditionalAccess"
CAポリシーの作成 (Graph API)
MFAを強制するCAポリシーを作成するには、以下のPowerShellスクリプトを実行します。この例では、「営業部」グループのメンバーが「すべてのクラウドアプリ」にアクセスする際にMFAを要求します。
# ポリシーに含めるユーザーグループのオブジェクトIDを取得(例として「営業部」グループ)
# 実際の環境に合わせてオブジェクトIDを調査してください。
$groupId = (Get-MgGroup -Filter "DisplayName eq '営業部'").Id
# 条件付きアクセスポリシー定義のJSONボディ
$policyJson = @'
{
"displayName": "営業部MFA強制ポリシー",
"state": "enabled", # または "enabledForReportingButNotEnforced" でレポート専用モード
"conditions": {
"users": {
"includeGroups": ["{groupId}"],
"excludeUsers": [
"a1b2c3d4-e5f6-7890-1234-567890abcdef" # 例: 緊急アクセスアカウントの除外
]
},
"applications": {
"includeApplications": ["All"]
},
"clientAppTypes": {
"includeClientAppTypes": ["all"]
},
"locations": {
"includeLocations": ["All"]
}
},
"grantControls": {
"operator": "OR",
"builtInControls": ["mfa"]
}
}
'@
# グループIDをJSON文字列に埋め込む
$policyBody = $policyJson.Replace("{groupId}", $groupId) | ConvertFrom-Json
# Graph APIを使用して条件付きアクセスポリシーを作成
try {
New-MgIdentityConditionalAccessPolicy -BodyParameter $policyBody | Format-List
Write-Host "条件付きアクセスポリシー '営業部MFA強制ポリシー' が正常に作成されました。"
} catch {
Write-Host "ポリシーの作成中にエラーが発生しました: $($_.Exception.Message)"
}
# MFAの認証方法ポリシーの確認/設定(ユーザーがMFAを登録できるようにする)
# これはCAポリシーとは別に設定します。
Write-Host "MFA認証方法ポリシーの確認と設定は、Microsoft Entra管理センターの [保護] > [認証方法] > [ポリシー] で行います。"
Write-Host "または、Graph APIの 'beta' エンドポイントで構成可能です。"
コメント:
前提条件: Microsoft Entra ID P1/P2ライセンスとGraph SDKのインストール、適切な認証スコープが必要です。
入力: $groupId にはMFAを強制したいユーザーグループのオブジェクトIDを指定します。
出力: 作成されたポリシーの詳細が出力されます。エラー時にはエラーメッセージが表示されます。
計算量: API呼び出し1回(O(1))。
メモリ条件: 小規模なJSONボディとAPIレスポンスを処理するため、特段のメモリ要件はありません。
state を enabledForReportingButNotEnforced に設定することで、ポリシーを運用環境に展開する前に、影響をレポートで確認する「レポート専用モード」でテストできます。これにより、意図しないアクセスブロックを防げます。
3. 運用監視
条件付きアクセスとMFAの運用監視は、セキュリティ体制の維持と問題発生時の迅速な対応に不可欠です。
可観測性
ログの出力と分析
これらのログは、Log Analyticsワークスペースに診断設定として転送することで、高度なクエリ(KQL)やアラート設定が可能になります。
# Microsoft Entra サインインログと監査ログをLog Analyticsワークスペースに転送する診断設定の例
# 事前にLog Analyticsワークスペースを作成しておく必要があります。
$workspaceId = "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroup}/providers/Microsoft.OperationalInsights/workspaces/{workspaceName}" # ワークスペースIDを指定
$resourceId = "/providers/Microsoft.Aadiam/diagnosticSettings/serviceLogs"
New-AzDiagnosticSetting -Name "EntraID-Logs-to-LogAnalytics" `
-ResourceId "/providers/Microsoft.Aadiam/diagnosticSettings/serviceLogs" ` # Entra IDの特定のリソースID
-WorkspaceId $workspaceId `
-Categories "SignInLogs", "AuditLogs" ` # 転送するログカテゴリ
-MetricCategory "AllMetrics" `
-Enabled $true
Write-Host "Microsoft Entra IDのサインインログと監査ログの診断設定が完了しました。"
コメント:
KQLクエリ例(過去24時間でMFAが要求され、かつ失敗したサインインを検索):
SigninLogs
| where TimeGenerated > ago(24h)
| where ConditionalAccessPolicies has "MFA was required"
| where Status.errorCode != 0
| project TimeGenerated, UserDisplayName, UserPrincipalName, AppDisplayName, Status, ConditionalAccessPolicies, Location
| sort by TimeGenerated desc
SLA/バックアップ/DR
SLA: Microsoft Entra IDは、Microsoftによって高可用性とパフォーマンスのSLAが提供されています(通常99.9%)。条件付きアクセスを含むサービス全体がこのSLAの対象です。
バックアップ/DR: Entra IDのデータ(ユーザー、グループ、ポリシーなど)のバックアップと災害復旧はMicrosoftによって管理されており、顧客側での具体的なバックアップ操作は不要です。ポリシー設定の変更は監査ログに記録され、以前の設定に戻すことは可能ですが、定期的なポリシー設定のコード化(IaC)がベストプラクティスです。
4. セキュリティ強化
条件付きアクセスとMFAは、エンタープライズセキュリティにおいて不可欠な要素です。
Zero Trust原則の実現: 「決して信頼せず、常に検証する」というZero Trustの考え方をCAポリシーで具現化します。すべてのアクセス要求を明示的に検証し、最小特権の原則を適用します。
レガシー認証のブロック: CAポリシーを使用してExchange ActiveSyncなどのレガシー認証プロトコルをブロックすることで、MFAを回避されるリスクを低減できます。これは一般的な攻撃ベクトルです。
リスクベース条件付きアクセス: Microsoft Entra Identity Protectionと連携し、ユーザーやサインインのリスクレベルに基づいてMFAを要求したり、パスワード変更を強制したりするポリシーを適用できます。
Microsoft Defender for Cloud Apps (MDCA) との連携: CAポリシーでMDCAをセッション制御プロバイダーとして利用することで、アクセス後にセッションを監視し、機密情報のダウンロードブロックや特定の操作の制限を行うことができます。
5. コスト最適化
条件付きアクセスを利用するには、Microsoft Entra IDのP1またはP2ライセンスが必要です。
ライセンスモデル:
Microsoft Entra ID P1: 条件付きアクセス、MFA(Microsoft Authenticatorアプリなど)、Self-Service Password Reset (SSPR) などの基本的なアイデンティティ管理機能を提供します。
Microsoft Entra ID P2: P1の全機能に加え、Microsoft Entra Identity Protection(リスクベースCA、リスクイベント検出)、Privileged Identity Management (PIM) などの高度なアイデンティティセキュリティ機能が含まれます。
コスト最適化のポイント:
適切なSKUの選択: 必要な機能に応じてP1またはP2を選択します。リスクベースCAやPIMが不要であれば、P1で十分な場合があります。
ライセンスの割り当て: CAポリシーの対象となるユーザーのみにP1/P2ライセンスを割り当てます。すべてのユーザーにP2を割り当てる必要がないか検討します。
不要なライセンスの棚卸し: 定期的に使用されていないP1/P2ライセンスを棚卸しし、割り当てを解除することで無駄なコストを削減します。
MFA自体には追加コストは発生しませんが、MFAを強制するためのCAポリシー機能はP1/P2ライセンスが必要です。JST {{jst_today}}現在、P1ライセンスはユーザーあたり月額約800円、P2ライセンスは約1,300円です。正確な価格はMicrosoftの公式価格ページでご確認ください[1]。
6. 落とし穴と対策
CAポリシーの設計と導入には、注意すべき落とし穴がいくつか存在します。
緊急アクセスアカウントの除外忘れ: すべてのCAポリシーから、最低2つの緊急アクセスアカウント(グローバル管理者など)を必ず除外してください。これにより、ポリシー設定ミスやIDプロバイダーの障害発生時にシステムからロックアウトされる事態を防ぎます。これらのアカウントは厳重に管理し、使用頻度を監視してください。
広すぎるスコープの初期適用: 最初から「すべてのユーザー」と「すべてのクラウドアプリ」にCAポリシーを適用すると、大規模なロックアウトを引き起こす可能性があります。最初は小規模なテストグループと特定のアプリケーションから開始し、段階的に適用範囲を拡大してください。
ポリシー競合と評価順序: 複数のCAポリシーが存在する場合、評価順序によって意図しない結果が生じることがあります。Microsoft Entra管理センターの「What If」ツールを使用して、特定のユーザーと条件下でどのポリシーが適用され、最終的なアクセス結果がどうなるかをシミュレーションすることが重要です。
レガシー認証プロトコル: 一部のアプリケーションやクライアント(古いバージョンのOfficeクライアントなど)は、MFAに対応していないレガシー認証プロトコルを使用する場合があります。これらの認証をブロックしないと、CAポリシーの効果が半減します。CAポリシーでレガシー認証をブロックするルールを早期に導入し、影響を受けるユーザーにはモダン認証への移行を促す必要があります。
ユーザーエクスペリエンスの考慮: MFA要求が多すぎるとユーザーの生産性を損ない、MFA疲労を引き起こす可能性があります。信頼できるデバイスや場所からのアクセスではMFA頻度を下げるなど、バランスの取れた設計を検討してください。
7. まとめ
Microsoft Entra IDの条件付きアクセスとMFAは、現代のクラウド環境におけるセキュリティの要石です。適切なアーキテクチャ設計、Graph APIを活用した自動化された設定、詳細な運用監視、そして潜在的な落とし穴への対策を講じることで、組織は強固なセキュリティ体制を確立し、Zero Trust原則を実践できます。継続的な評価と改善を通じて、変化する脅威に対応し、より安全なデジタル環境を構築しましょう。
[1] Microsoft Entra ID の料金: https://azure.microsoft.com/ja-jp/pricing/details/active-directory/ (JST {{jst_today}} 確認)
コメント