Azure AD条件付きアクセスとMFAによるセキュリティ強化

Tech

本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。

Azure AD条件付きアクセスとMFAによるセキュリティ強化

Microsoft Entra ID(旧称Azure Active Directory、以下Entra ID)の条件付きアクセスと多要素認証(MFA)は、ゼロトラストセキュリティモデルを実現する上で不可欠な要素です。これらの機能を組み合わせることで、ユーザーがどこから、どのデバイスで、どのようなアプリケーションにアクセスしようとしているかに基づいて、動的なアクセス制御ポリシーを適用し、セキュリティを大幅に強化できます。本稿では、クラウドアーキテクトの視点から、そのアーキテクチャ、設定手順、運用監視、セキュリティの考慮事項、コスト、および導入時の落とし穴について解説します。

1. アーキテクチャ

Entra IDの条件付きアクセスは、ユーザー、デバイス、アプリケーション、場所、リスクレベルなどの複数のシグナルを評価し、アクセスの許可、ブロック、MFAの要求、パスワード変更の要求などの制御を適用するポリシーエンジンとして機能します。MFAは、条件付きアクセスが適用できる最も一般的な制御の一つであり、ユーザーが2つ以上の要素(例: パスワードとスマートフォンアプリの承認)で身元を証明することを義務付けます。

構成要素

  • ユーザー: Entra IDに登録されたユーザーアカウント。

  • アプリケーション: Entra IDに登録されたクラウドアプリケーション(SaaSアプリ、カスタムアプリなど)。

  • デバイス: Entra IDに参加または登録されたデバイス(Windows、macOS、iOS、Androidなど)。

  • Microsoft Entra ID: ユーザー認証、認可、ディレクトリサービスを提供する中核サービス。

  • 条件付きアクセス ポリシー: ユーザー、クラウドアプリ、条件(場所、デバイス、リスクなど)、およびアクセス制御(MFA、準拠デバイスなど)を定義するルールセット。

  • MFAプロバイダー: Entra IDの一部として提供されるMFAサービス(Microsoft Authenticator、FIDO2キーなど)。

  • Microsoft Defender for Cloud Apps / Identity Protection: ユーザーおよびセッションのリスク評価情報を提供し、条件付きアクセスの判断に利用される。

アクセスフロー

以下に、条件付きアクセスとMFAの一般的なアクセスフローを示します。

flowchart TD
    A["ユーザー"] --> |アクセス要求 (アプリケーションへ)| B("Microsoft Entra ID");
    B --> |認証情報確認| C{"認証成功?"};
    C -- 認証成功 --> D["条件付きアクセス ポリシーエンジン"];
    D --> |シグナル収集 (ユーザー, デバイス, 場所, アプリ, リスク)| E{"ポリシー評価"};
    E -- ポリシー一致 (MFA要求) --> F["MFAプロバイダー"];
    F --> |MFAチャレンジ| G("ユーザーによるMFA応答");
    G -- MFA成功 --> H["アクセス許可"];
    E -- ポリシー一致 (アクセスブロック) --> I["アクセス拒否"];
    C -- 認証失敗 --> J["アクセス拒否"];
    H --> |リソースへのアクセス| K["アプリケーション/リソース"];

出典: Microsoft Learn, 「Microsoft Entra Conditional Accessの概要」 (2024年4月11日更新) [2]

2. 設定手順

条件付きアクセス ポリシーの基本的な設定は、Microsoft Entra管理センターまたはMicrosoft Graph APIを利用して行います。ここでは、すべてのユーザーとクラウドアプリケーションに対してMFAを必須とするポリシーを、Graph APIとPowerShellを使って設定する例を示します。

前提条件

  • Microsoft Entra ID Premium P1以上のライセンス [3]

  • Microsoft Graph PowerShell SDKのインストール

  • 適切なアクセス権限(条件付きアクセス管理者、セキュリティ管理者など)

設定手順 (PowerShell と Graph API)

この手順では、Graph APIを介して条件付きアクセス ポリシーをJSON形式で定義し、PowerShellからデプロイします。

  1. 接続と認証: まず、Graph APIに接続し、適切なスコープで認証を行います。

    # モジュールがインストールされていない場合はインストール
    
    
    # Install-Module Microsoft.Graph -Scope CurrentUser
    
    Connect-MgGraph -Scopes "Policy.ReadWrite.ConditionalAccess"
    
  2. ポリシー定義 (JSON): すべてのユーザーが任意のクラウドアプリにアクセスする際にMFAを要求するポリシーをJSONで定義します。レポート専用モードで開始し、影響を評価した後に「On」に切り替えるのがベストプラクティスです。

    {
      "displayName": "すべてのユーザー、すべてのクラウドアプリでMFAを要求 (レポート専用)",
      "state": "reportOnly",
      "conditions": {
        "users": {
          "includeUsers": [
            "All"
          ]
        },
        "applications": {
          "includeApplications": [
            "All"
          ]
        },
        "clientAppTypes": [
          "all"
        ],
        "signInRiskLevels": [],
        "userRiskLevels": [],
        "locations": {},
        "devices": {}
      },
      "grantControls": {
        "operator": "AND",
        "builtInControls": [
          "mfa"
        ]
      },
      "sessionControls": null
    }
    
  3. ポリシーの作成/更新: 上記JSONを $policyDefinition 変数に格納し、New-MgIdentityConditionalAccessPolicy コマンドレットで作成します。既にポリシーがある場合は Update-MgIdentityConditionalAccessPolicy を使用します。

    # ポリシーJSON定義 (上記内容をファイルまたは文字列で用意)
    
    $policyJson = @'
    {
      "displayName": "すべてのユーザー、すべてのクラウドアプリでMFAを要求 (レポート専用)",
      "state": "reportOnly",
      "conditions": {
        "users": {
          "includeUsers": [
            "All"
          ]
        },
        "applications": {
          "includeApplications": [
            "All"
          ]
        },
        "clientAppTypes": [
          "all"
        ],
        "signInRiskLevels": [],
          "userRiskLevels": [],
        "locations": {},
        "devices": {}
      },
      "grantControls": {
        "operator": "AND",
        "builtInControls": [
          "mfa"
        ]
      },
      "sessionControls": null
    }
    '@ | ConvertFrom-Json
    
    # 新規ポリシーの作成
    
    $newPolicy = New-MgIdentityConditionalAccessPolicy -Body $policyJson
    Write-Host "Conditional Access Policy created with ID: $($newPolicy.Id)"
    
    # 既存ポリシーの更新例 (ポリシーIDを指定)
    
    
    # $policyIdToUpdate = "your_policy_id_here"
    
    
    # Update-MgIdentityConditionalAccessPolicy -ConditionalAccessPolicyId $policyIdToUpdate -Body $policyJson
    

    出典: Microsoft Learn, 「Microsoft Graph API conditionalAccessPolicyリソースタイプ」 (2024年4月26日更新) [5]

重要な注意点: すべての管理者に影響を与えることなくポリシーをテストできるよう、ブレークグラスアカウントをポリシーから除外することが強く推奨されます。また、最初はレポート専用モードでポリシーをデプロイし、影響を監視することが重要です [1]。

3. 運用監視

条件付きアクセスの運用監視は、ポリシーの効果を評価し、問題が発生した場合に迅速に対処するために不可欠です。

ログとレポート

  • サインインログ: Entra IDのサインインログは、各サインインイベントの条件付きアクセスの結果(ポリシーが適用されたか、MFAが要求されたか、アクセスがブロックされたかなど)を提供します。Microsoft Entra管理センターの「監視と正常性」→「サインインログ」で確認できます [4]。

  • 条件付きアクセス レポート: 特定のポリシーの影響を評価するための専用レポート機能が提供されています。ポリシーを「レポート専用」モードでデプロイすることで、実際のユーザーへの影響なしに結果をシミュレーションできます [1]。

  • Microsoft Sentinel / Azure Monitor: Entra IDのサインインログや監査ログをAzure MonitorのLog Analyticsワークスペースに送信し、Microsoft Sentinelと連携することで、高度な脅威検出、SIEM/SOAR機能を実現できます。

可観測性

  • カスタムダッシュボード: Azure MonitorとLog Analyticsクエリを使用して、条件付きアクセス関連のサインイン失敗、MFA拒否、ブロックされたアクセス試行などを視覚化するカスタムダッシュボードを構築します。

  • アラート: 異常なサインイン試行や特定の条件付きアクセス ポリシーによる大量のブロックが発生した場合に、Azure Monitorアラートを設定して関係者に通知します。

SLAとDR

  • SLA: Microsoft Entra IDは、月間アップタイム99.9%のサービス品質保証(SLA)を提供しており、ID認証基盤として高い可用性を誇ります [6]。

  • DR (Disaster Recovery): 条件付きアクセス ポリシー自体はEntra IDサービス内に保存され、Microsoftのグローバルインフラストラクチャによって冗長化されています。しかし、ポリシーの「設定」データはIaCとして管理し、Gitリポジトリなどでバージョン管理することで、設定ミスからのリカバリや複数環境への展開が容易になります。

4. セキュリティ

条件付きアクセスとMFAは、Entra IDにおける主要なセキュリティ対策です。

アイデンティティと権限境界

  • ゼロトラスト原則: 条件付きアクセスは、「決して信頼せず、常に検証する」というゼロトラストの原則の中核をなします。すべてのアクセス要求は、明示的に検証されなければなりません。

  • きめ細かなアクセス制御: アプリケーション、場所、デバイスの状態、ユーザーのリスクレベルといった複数の要素に基づいて、動的で詳細なアクセス制御を適用できます。

  • Microsoft Defender for Cloud Apps (MDCA): セッション制御とリアルタイム監視を提供し、条件付きアクセス ポリシーを補完します。例えば、機密データへのダウンロードをブロックしたり、アップロードを制限したりすることが可能です。

  • Microsoft Entra Identity Protection: ユーザーとサインインのリスクをリアルタイムで検出し、これらのリスクシグナルを条件付きアクセス ポリシーに統合することで、高リスクのサインインに対してMFAの強制やパスワードリセットを自動的に実行できます。

  • 継続的アクセス評価 (CAE): 従来のアクセストークンの有効期限を待たずに、Entra IDが検出したポリシー違反(例えば、ユーザーの無効化、場所の変更、デバイスの非準拠化)をほぼリアルタイムで適用します [7]。これにより、セッションハイジャックなどのリスクを大幅に低減します。

5. コスト

条件付きアクセス機能を利用するには、Microsoft Entra ID Premium P1以上のライセンスが必要です [3]。

  • Microsoft Entra ID Free / Microsoft 365 Business Basic: 条件付きアクセスは利用できません。

  • Microsoft Entra ID Premium P1: 条件付きアクセスの基本機能が利用可能。MFAの適用、デバイスの準拠性チェック、場所ベースの制御などが含まれます。

  • Microsoft Entra ID Premium P2: P1の全機能に加え、Microsoft Entra Identity Protectionが提供するリスクベースの条件付きアクセスが利用可能になります。ユーザーやサインインのリスクレベルに基づいて動的にMFAを要求したり、アクセスをブロックしたりできます。

コスト最適化

  • 適切なライセンスの選択: すべてのユーザーにP2ライセンスが必要とは限りません。Identity Protectionが必要な管理者や高リスクユーザーにはP2、それ以外の一般ユーザーにはP1を適用するなど、必要に応じてライセンスを組み合わせることでコストを最適化できます。

  • 利用状況の監視: サインインログやレポートを活用し、実際にMFAや条件付きアクセスが利用されているユーザー数を把握することで、不要なライセンスの購入を避けることができます。

6. 落とし穴

導入時に注意すべき一般的な落とし穴と対策を以下に示します。

  • ブレークグラスアカウントの欠如: すべてのポリシーが誤ってロックアウトされても、アクセスできる「ブレークグラス(緊急アクセス)アカウント」を用意しないと、管理者がEntra IDにアクセスできなくなる可能性があります。少なくとも2つの専用のクラウドオンリーアカウントを作成し、ポリシーから除外することを強く推奨します [1]。

  • レポート専用モードの無視: ポリシーをいきなり「オン」にすると、予期せぬユーザーがブロックされる可能性があります。必ず「レポート専用」モードで開始し、影響を慎重に評価してから有効化してください [1]。

  • レガシー認証の考慮不足: POP3、IMAP、SMTPなどのレガシー認証プロトコルはMFAに対応しておらず、条件付きアクセスでブロックしないとセキュリティホールになる可能性があります。これらのプロトコルからのアクセスを条件付きアクセス ポリシーで明示的にブロックすることを検討してください。

  • 対象外のユーザー/グループ: テスト中に自分自身が対象外になっていないか、あるいは特定の管理者グループが誤って対象外になっていないかを確認してください。

  • ポリシーの複雑化: あまりに多くの条件や制御を持つ複雑なポリシーは、管理が難しく、意図しない結果を招く可能性があります。シンプルで明確なポリシーを推奨します。

  • 段階的な導入: 影響範囲の小さいユーザーグループやアプリケーションから段階的にポリシーを適用し、検証とフィードバックのサイクルを回すことが成功の鍵です。

7. まとめ

Microsoft Entra IDの条件付きアクセスとMFAは、現代のサイバー脅威から組織を保護するために不可欠なセキュリティ基盤です。ゼロトラストの原則に基づき、ユーザー、デバイス、場所、アプリケーション、リスクといった多様なシグナルを組み合わせることで、動的でインテリジェントなアクセス制御を実現します。適切なライセンス(Premium P1/P2)の選択、段階的な導入、レポート専用モードでの検証、そしてブレークグラスアカウントの準備といったベストプラクティスに従うことで、組織はセキュリティ体制を大幅に強化し、同時にユーザーエクスペリエンスを最適化することが可能となります。2024年6月19日現在、Microsoft Entra IDは継続的に進化しており、最新の機能と推奨事項を常に把握することが重要です。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました