<!DOCTYPE html>
<html lang="fr" data-theme="light">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Module 04 — Conditional Access · Formation Entra ID · Atoo Next</title>
  <meta name="description" content="Politiques d'accès conditionnel Entra ID : anatomie, signaux, contrôles, déploiement sûr.">
  <meta name="color-scheme" content="light dark">
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Instrument+Serif:ital@0;1&family=JetBrains+Mono:wght@400;500&display=swap">
  <link rel="stylesheet" href="assets/shared.css">
</head>
<body class="layout-module">
  <a href="#main-content" class="skip-link">Aller au contenu principal</a>

  <!-- Sprite SVG (inline pour file://) -->
  <svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
    <symbol id="icon-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></symbol>
    <symbol id="icon-book-open" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 7v14"/><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></symbol>
    <symbol id="icon-trending-up" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 7 13.5 15.5 8.5 10.5 2 17"/><polyline points="16 7 22 7 22 13"/></symbol>
    <symbol id="icon-award" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M15.477 12.89 17 22l-5-3-5 3 1.523-9.11"/><circle cx="12" cy="8" r="6"/></symbol>
    <symbol id="icon-settings" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/></symbol>
    <symbol id="icon-help-circle" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><path d="M12 17h.01"/></symbol>
    <symbol id="icon-menu" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><line x1="4" x2="20" y1="12" y2="12"/><line x1="4" x2="20" y1="6" y2="6"/><line x1="4" x2="20" y1="18" y2="18"/></symbol>
    <symbol id="icon-shield-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/><path d="m9 12 2 2 4-4"/></symbol>
    <symbol id="icon-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/></symbol>
    <symbol id="icon-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></symbol>
    <symbol id="icon-check-circle" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></symbol>
    <symbol id="icon-x" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><line x1="18" x2="6" y1="6" y2="18"/><line x1="6" x2="18" y1="6" y2="18"/></symbol>
    <symbol id="icon-refresh-cw" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"/><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10"/></symbol>
    <symbol id="icon-star" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></symbol>
    <symbol id="icon-chevron-right" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></symbol>
    <symbol id="icon-arrow-left" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><line x1="19" x2="5" y1="12" y2="12"/><polyline points="12 19 5 12 12 5"/></symbol>
    <symbol id="icon-arrow-right" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><line x1="5" x2="19" y1="12" y2="12"/><polyline points="12 5 19 12 12 19"/></symbol>
    <symbol id="icon-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/></symbol>
    <symbol id="icon-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2"/><path d="M12 20v2"/><path d="m4.93 4.93 1.41 1.41"/><path d="m17.66 17.66 1.41 1.41"/><path d="M2 12h2"/><path d="M20 12h2"/><path d="m6.34 17.66-1.41 1.41"/><path d="m19.07 4.93-1.41 1.41"/></symbol>
    <symbol id="icon-alert-triangle" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><path d="M12 9v4"/><path d="M12 17h.01"/></symbol>
    <symbol id="icon-info" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></symbol>
    <symbol id="icon-key-round" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z"/></symbol>
    <symbol id="icon-lightbulb" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"/><path d="M9 18h6"/><path d="M10 22h4"/></symbol>
    <symbol id="icon-sparkles" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"/><path d="M20 3v4"/><path d="M22 5h-4"/><path d="M4 17v2"/><path d="M5 18H3"/></symbol>
    <symbol id="icon-server" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><rect width="20" height="8" x="2" y="2" rx="2"/><rect width="20" height="8" x="2" y="14" rx="2"/><line x1="6" x2="6.01" y1="6" y2="6"/><line x1="6" x2="6.01" y1="18" y2="18"/></symbol>
    <symbol id="icon-graduation-cap" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M22 10v6M2 10l10-5 10 5-10 5z"/><path d="M6 12v5c3 3 9 3 12 0v-5"/></symbol>
    <symbol id="icon-flask-conical" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2"/><path d="M6.453 15h11.094"/><path d="M8.5 2h7"/></symbol>
    <symbol id="icon-target" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/></symbol>
    <symbol id="icon-clock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></symbol>
    <symbol id="icon-list" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><line x1="8" x2="21" y1="6" y2="6"/><line x1="8" x2="21" y1="12" y2="12"/><line x1="8" x2="21" y1="18" y2="18"/><line x1="3" x2="3.01" y1="6" y2="6"/><line x1="3" x2="3.01" y1="12" y2="12"/><line x1="3" x2="3.01" y1="18" y2="18"/></symbol>
    <symbol id="icon-external-link" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" x2="21" y1="14" y2="3"/></symbol>
    <symbol id="icon-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol>
    <symbol id="icon-map-pin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z"/><circle cx="12" cy="10" r="3"/></symbol>
    <symbol id="icon-eye" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/></symbol>
  </svg>

  <button class="hamburger-btn" aria-label="Ouvrir le menu">
    <svg width="24" height="24"><use href="#icon-menu"/></svg>
  </button>

  <!-- Sidebar iconique -->
  <aside class="sidebar-icons" role="navigation" aria-label="Menu principal">
    <a href="javascript:void(0)" class="sidebar-icons__logo" aria-label="Accueil Atoo Next">
      <img src="assets/atoo-next-logo.svg" alt="Atoo Next">
    </a>
    <nav class="sidebar-icons__nav" aria-label="Navigation principale">
      <a href="javascript:void(0)" class="sidebar-icons__item" aria-label="Tableau de bord" title="Tableau de bord">
        <svg><use href="#icon-home"/></svg>
      </a>
      <a href="#module-content" class="sidebar-icons__item is-active" aria-label="Ce module" title="Ce module">
        <svg><use href="#icon-book-open"/></svg>
      </a>
      <a href="javascript:void(0)" class="sidebar-icons__item" aria-label="Progression" title="Progression">
        <svg><use href="#icon-trending-up"/></svg>
      </a>
      <a href="javascript:void(0)" class="sidebar-icons__item" aria-label="Certificat" title="Certificat">
        <svg><use href="#icon-award"/></svg>
      </a>
    </nav>
    <div class="sidebar-icons__footer">
      <a href="#" class="sidebar-icons__item" aria-label="Aide" title="Aide">
        <svg><use href="#icon-help-circle"/></svg>
      </a>
      <a href="#" class="sidebar-icons__item" aria-label="Paramètres" title="Paramètres">
        <svg><use href="#icon-settings"/></svg>
      </a>
    </div>
  </aside>

  <main class="module-main" id="main-content">
    <header class="module-topbar">
      <a href="javascript:void(0)" class="back-link">
        <svg><use href="#icon-arrow-left"/></svg>
        Retour au tableau de bord
      </a>
      <div class="module-topbar__actions">
        <button id="theme-toggle" class="btn-icon" aria-label="Basculer thème" aria-pressed="false">
          <svg width="20" height="20"><use href="#icon-moon"/></svg>
        </button>
      </div>
    </header>

    <div class="module-layout" id="module-content">
      <article class="module-content">
        <header class="module-header">
          <div class="module-header__visual module-header__visual--peach">
            <span class="module-header__number-huge">04</span>
            <div class="module-header__icon-large">
              <svg><use href="#icon-shield-check"/></svg>
            </div>
          </div>
          <div class="module-header__meta">
            <span class="module-header__label">MODULE 04 · COURS</span>
            <h1 class="module-header__title">Conditional Access</h1>
            <p class="module-header__subtitle">Politiques d'accès conditionnel, contrôles, report-only.</p>
            <div class="module-header__stats">
              <div class="stat-mini"><span class="stat-mini__value">5h</span><span class="stat-mini__label">durée</span></div>
              <div class="stat-mini"><span class="stat-mini__value" id="module-sections-count">13</span><span class="stat-mini__label">sections</span></div>
              <div class="stat-mini"><span class="stat-mini__value">10</span><span class="stat-mini__label">questions</span></div>
            </div>
          </div>
        </header>

        <!-- Section OBJECTIFS -->
        <section class="module-section module-section--objectifs" data-section-id="s-objectifs">
          <div class="section-header">
            <div class="icon-circle icon-circle--lg icon-circle--lavender">
              <svg><use href="#icon-target"/></svg>
            </div>
            <div class="section-header__content">
              <span class="section-header__label">OBJECTIFS</span>
              <h2 class="section-header__title">Ce que vous saurez faire</h2>
              <p class="section-header__meta">5 objectifs · ~5 min</p>
            </div>
          </div>
          <ul class="task-list">
            <li class="task-list__item"><span><strong>Décomposer</strong> une politique CA : affectations (utilisateurs, apps, conditions) → contrôles (grant / session).</span></li>
            <li class="task-list__item"><span><strong>Utiliser</strong> les named locations et l'exigence d'appareil conforme (lien Intune).</span></li>
            <li class="task-list__item"><span><strong>Déployer sûrement</strong> : report-only mode, What If, comptes break-glass exclus.</span></li>
            <li class="task-list__item"><span><strong>Construire</strong> 5 politiques types : blocage legacy auth, MFA admins, MFA tous, appareil conforme pour apps sensibles, geo-blocking.</span></li>
            <li class="task-list__item"><span><strong>Situer</strong> les templates baseline recommandés par Microsoft.</span></li>
          </ul>
          <div class="content-block animate-on-scroll" style="margin-top:var(--space-6)">
            <h3>Compétences transférées depuis l'AD classique</h3>
            <div class="table-wrapper">
              <table>
                <thead><tr><th>L'admin AD réutilise</th><th>L'admin AD doit désapprendre</th></tr></thead>
                <tbody>
                  <tr><td>Logique de règles et d'exceptions</td><td>« La sécurité vient du réseau/pare-feu » — ici, elle vient de l'identité + du contexte</td></tr>
                  <tr><td>Rigueur sur les comptes admins</td><td>Aucun équivalent GPO au CA : c'est un moteur de décision par connexion</td></tr>
                  <tr><td>Notion de « conditions »</td><td>« Bloquer une fois = bloqué partout » — le CA évalue <strong>chaque</strong> connexion</td></tr>
                </tbody>
              </table>
            </div>
          </div>
        </section>

        <!-- Section COURS -->
        <section class="module-section module-section--cours">
          <div class="section-header">
            <div class="icon-circle icon-circle--lg icon-circle--sky">
              <svg><use href="#icon-book-open"/></svg>
            </div>
            <div class="section-header__content">
              <span class="section-header__label">COURS</span>
              <h2 class="section-header__title">Le moteur de décision par connexion</h2>
              <p class="section-header__meta">6 sections · lecture ~45 min</p>
            </div>
          </div>

          <!-- Sous-section 1 -->
          <div class="content-block animate-on-scroll" data-section-id="s-cours-1">
            <h3>1. Anatomie d'une politique CA</h3>
            <div class="section-hook">
              <span class="section-hook__label">Contexte</span>
              Un utilisateur se plaint : « Je dois refaire la MFA à chaque connexion depuis le siège, c'est pénible. » Vous ouvrez le portail CA. Encore faut-il comprendre comment une politique se lit — et où l'intervenir sans tout casser. C'est ce que couvre cette section.
            </div>
            <p>Le Conditional Access (CA) est le <strong>cœur</strong> de la sécurité Entra. À <strong>chaque tentative de connexion</strong>, il évalue un contexte (qui, quoi, où, comment, quel risque) et décide : autoriser, bloquer, ou autoriser sous condition (MFA, appareil conforme…).</p>
            <p>Une politique CA se lit comme une phrase : <strong>SI</strong> [affectations] <strong>ALORS</strong> [contrôles].</p>
            <pre><code>SI   utilisateurs = [qui]
     ET application/action = [quoi]
     ET conditions = [plateforme, emplacement, risque, état de l'appareil...]
ALORS accorder l'accès EN EXIGEANT [MFA / appareil conforme / app approuvée...]
     OU bloquer l'accès</code></pre>
            <p>Deux grands blocs :</p>
            <ul>
              <li><strong>Affectations (assignments)</strong> — à qui / quoi / dans quel contexte la politique s'applique.</li>
              <li><strong>Contrôles d'accès (access controls)</strong> :
                <ul>
                  <li><strong>Grant</strong> : bloquer, ou accorder sous exigence(s) (MFA, appareil conforme, app cliente approuvée, conditions d'utilisation). Combinables en ET/OU.</li>
                  <li><strong>Session</strong> : limiter la session (fréquence de ré-authentification, restrictions app imposées, contrôle par Defender for Cloud Apps).</li>
                </ul>
              </li>
            </ul>
            <div class="ad-entra-grid">
              <div class="ad-entra-card ad-entra-card--ad">
                <div class="ad-entra-card__label"><svg width="14" height="14"><use href="#icon-server"/></svg> AD CLASSIQUE</div>
                <div class="ad-entra-card__body"><p>Rien en AD DS n'évalue le contexte d'une connexion pour exiger de la MFA. Le plus proche (et très partiel) : restrictions d'horaires ou de postes de connexion.</p></div>
              </div>
              <div class="ad-entra-card ad-entra-card--entra">
                <div class="ad-entra-card__label"><svg width="14" height="14"><use href="#icon-shield-check"/></svg> ENTRA</div>
                <div class="ad-entra-card__body"><p>Le CA est un concept <strong>nouveau</strong> à intégrer : moteur de décision, dynamique, évalué à chaque connexion.</p></div>
              </div>
            </div>
          </div>

          <!-- Sous-section 2 -->
          <div class="content-block animate-on-scroll" data-section-id="s-cours-2">
            <h3>2. Signaux &amp; conditions</h3>
            <p>Les <strong>affectations</strong> combinent identité, ressource et contexte. C'est la richesse de la donnée disponible qui rend le CA puissant.</p>
            <div class="table-wrapper">
              <table>
                <thead><tr><th>Affectation</th><th>Exemples</th></tr></thead>
                <tbody>
                  <tr><td><strong>Utilisateurs / groupes / rôles</strong></td><td>Tous, un groupe, un rôle d'annuaire (ex : tous les rôles admin), invités</td></tr>
                  <tr><td><strong>Ressources cibles</strong></td><td>Applications cloud (M365, une app SaaS), actions utilisateur (enregistrement d'infos de sécurité), contextes d'authentification</td></tr>
                  <tr><td><strong>Conditions — plateformes</strong></td><td>Windows, iOS, Android, macOS</td></tr>
                  <tr><td><strong>Conditions — emplacements</strong></td><td>Named locations (IP / pays)</td></tr>
                  <tr><td><strong>Conditions — client apps</strong></td><td>Navigateur, apps mobiles / desktop, <strong>clients d'authentification legacy</strong></td></tr>
                  <tr><td><strong>Conditions — état de l'appareil</strong></td><td>Conforme (Intune), joint hybride Entra</td></tr>
                  <tr><td><strong>Conditions — risque (P2)</strong></td><td>Risque utilisateur, risque de connexion (module 07)</td></tr>
                </tbody>
              </table>
            </div>
            <div class="reveal-card">
              <button class="reveal-card__trigger" aria-controls="ade-cours2">
                <div class="icon-circle icon-circle--sm icon-circle--sky"><svg><use href="#icon-server"/></svg></div>
                <span class="reveal-card__title">Équivalent AD DS</span>
                <svg class="reveal-card__chevron" width="20" height="20"><use href="#icon-chevron-right"/></svg>
              </button>
              <div class="reveal-card__content" id="ade-cours2" role="region"><p>Aucun équivalent direct. Les GPO ciblent des postes/utilisateurs mais n'évaluent pas dynamiquement le contexte d'une connexion (risque, appareil conforme, geo). Il faut vraiment intégrer un modèle mental différent.</p></div>
            </div>
          </div>

          <!-- Sous-section 3 -->
          <div class="content-block animate-on-scroll" data-section-id="s-cours-3">
            <h3>3. Named locations &amp; device compliance</h3>
            <div class="section-hook">
              <span class="section-hook__label">À retenir</span>
              L'<strong>emplacement</strong> et l'<strong>état de l'appareil</strong> deviennent des <strong>signaux d'identité</strong>. C'est un déplacement conceptuel : l'AD classique déléguait ces sujets au pare-feu et au VPN. Entra les intègre au moteur de décision.
            </div>
            <ul>
              <li><strong>Named locations</strong> : plages IP publiques ou pays que vous nommez (« Siège », « France »). Servent à conditionner ou exclure (ex : ne pas redemander la MFA depuis le siège — à manier avec prudence).</li>
              <li><strong>Appareil conforme</strong> : la conformité est évaluée par <strong>Intune</strong> (module 06) et <strong>consommée</strong> par le CA via le contrôle « Require device to be marked as compliant ». C'est le pont identité ↔ poste.</li>
            </ul>
            <aside class="callout callout--warning">
              <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--peach"><svg><use href="#icon-alert-triangle"/></svg></div></div>
              <div class="callout__content">
                <span class="callout__label">PIÈGE FRÉQUENT</span>
                <p>Se reposer sur le seul <strong>geo-blocking</strong>. Un VPN contourne la géolocalisation en quelques secondes. Le CA doit <strong>combiner</strong> les signaux (MFA + appareil conforme + blocage legacy), pas s'appuyer sur un seul.</p>
              </div>
            </aside>
            <div class="ad-entra-grid">
              <div class="ad-entra-card ad-entra-card--ad">
                <div class="ad-entra-card__label"><svg width="14" height="14"><use href="#icon-server"/></svg> AD CLASSIQUE</div>
                <div class="ad-entra-card__body"><p>Filtrer par IP relevait du pare-feu / VPN, séparé de l'identité.</p></div>
              </div>
              <div class="ad-entra-card ad-entra-card--entra">
                <div class="ad-entra-card__label"><svg width="14" height="14"><use href="#icon-shield-check"/></svg> ENTRA</div>
                <div class="ad-entra-card__body"><p>Emplacement et conformité de poste = <strong>signaux</strong> parmi d'autres, combinés dans une même règle.</p></div>
              </div>
            </div>

            <div class="quickquestion animate-on-scroll" data-id="qq-combiner-signaux">
              <div class="quickquestion__label"><svg width="14" height="14"><use href="#icon-sparkles"/></svg> Question rapide</div>
              <p class="quickquestion__question">Votre direction propose : « on bloque simplement les connexions depuis l'étranger, ça devrait suffire ». Que répondez-vous ?</p>
              <button class="btn btn--soft-violet quickquestion__btn" type="button">Voir la réponse</button>
              <div class="quickquestion__answer">
                <strong>Non — le geo-blocking seul n'est pas une protection.</strong>
                <p class="quickquestion__explanation">Un VPN place l'attaquant dans un pays autorisé en quelques secondes. Le geo est un signal parmi d'autres. Il faut le <strong>combiner</strong> avec MFA, blocage de la legacy auth et exigence d'appareil conforme. La défense en profondeur repose sur plusieurs contrôles indépendants, pas sur un seul filtre facile à contourner.</p>
              </div>
            </div>
          </div>

          <!-- Sous-section 4 -->
          <div class="content-block animate-on-scroll" data-section-id="s-cours-4">
            <h3>4. Contrôles disponibles</h3>
            <p>Les contrôles sont l'action que la politique déclenche quand ses conditions sont réunies.</p>
            <div class="table-wrapper">
              <table>
                <thead><tr><th>Contrôle</th><th>Effet</th><th>Cas typique</th></tr></thead>
                <tbody>
                  <tr><td><strong>Bloquer</strong></td><td>Interdiction sèche</td><td>Legacy auth, pays non autorisés</td></tr>
                  <tr><td><strong>Exiger la MFA</strong></td><td>Second facteur demandé</td><td>Le plus courant, pour admins ou tous</td></tr>
                  <tr><td><strong>Appareil conforme / joint hybride</strong></td><td>Réserve l'accès aux postes gérés</td><td>Apps sensibles, messagerie</td></tr>
                  <tr><td><strong>App cliente approuvée / MAM</strong></td><td>Mobile : app approuvée uniquement</td><td>Outlook mobile, protection d'app</td></tr>
                  <tr><td><strong>Session (sign-in frequency)</strong></td><td>Force la ré-auth périodique</td><td>Postes partagés, invités</td></tr>
                </tbody>
              </table>
            </div>
            <p>Les contrôles se combinent : <em>« exiger la MFA <strong>ET</strong> un appareil conforme »</em>. La combinaison ET est plus forte que OU — à manier selon la criticité de la ressource.</p>
          </div>

          <!-- Sous-section 5 -->
          <div class="content-block animate-on-scroll" data-section-id="s-cours-5">
            <h3>5. Déploiement sûr</h3>
            <p>Le CA peut <strong>verrouiller tout le monde dehors</strong> en une politique mal calibrée. Trois garde-fous <strong>obligatoires</strong> :</p>

            <figure class="mermaid-container animate-on-scroll" data-mermaid-source='flowchart LR
  A["Politique&nbsp;créée"] --> B["Report-only<br>(évaluée, non appliquée)"]
  B --> C{"What If<br>+ sign-in logs<br>OK ?"}
  C -- Non --> D["Ajuster<br>affectations / exclusions"]
  D --> B
  C -- Oui --> E["Passer en On<br>+ break-glass exclus"]
  E --> F["Surveillance<br>+ ajustements"]
  classDef start fill:#A78BD9,color:#fff,stroke:#6B4FA0
  classDef safe fill:#B8E0C8,stroke:#5DAA7A,color:#2C2438
  classDef watch fill:#FCEBD9,stroke:#C88458,color:#2C2438
  classDef live fill:#E8DFF5,stroke:#A78BD9,color:#2C2438
  class A start
  class B,D watch
  class C,F live
  class E safe'>
              <div class="mermaid-render"><em class="text-muted">Chargement du schéma…</em></div>
              <figcaption class="mermaid-caption">Cycle de déploiement d'une politique CA : jamais directement en « On ».</figcaption>
            </figure>

            <ol>
              <li><strong>Report-only</strong> : la politique est <strong>évaluée mais pas appliquée</strong>. Les sign-in logs indiquent ce qu'elle <strong>aurait</strong> fait. On démarre <strong>toujours</strong> une nouvelle politique en report-only.</li>
              <li><strong>What If</strong> : outil qui simule le résultat pour un utilisateur / app / contexte donné, sans attendre une vraie connexion.</li>
              <li><strong>Comptes break-glass</strong> : 2 comptes d'urgence (Global Admin cloud-only, mot de passe long, <strong>exclus de toutes les politiques CA</strong>), pour ne jamais se verrouiller dehors. Surveillés par alerte.</li>
            </ol>
            <aside class="callout callout--warning">
              <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--peach"><svg><use href="#icon-alert-triangle"/></svg></div></div>
              <div class="callout__content">
                <span class="callout__label">PIÈGE À ÉVITER</span>
                <p>Activer une politique « MFA pour tous » en <em>On</em> d'emblée, sans exclusion break-glass. Si la MFA se casse (ou qu'un admin n'est pas enrôlé), plus personne n'entre. Toujours : <strong>report-only → What If → exclusions → puis On</strong>.</p>
              </div>
            </aside>
          </div>

          <!-- Sous-section 6 -->
          <div class="content-block animate-on-scroll" data-section-id="s-cours-6">
            <h3>6. Templates recommandés (baseline Microsoft)</h3>
            <p>Microsoft fournit des <strong>templates</strong> de politiques (dans le portail, à la création) et une baseline « Zero Trust » à viser. Les incontournables :</p>
            <ul>
              <li><strong>Bloquer l'authentification legacy</strong> — POP, IMAP, SMTP AUTH, anciens clients : protocoles qui ne supportent pas la MFA.</li>
              <li><strong>MFA pour les administrateurs</strong> — tous les rôles à privilèges. Non négociable.</li>
              <li><strong>MFA pour tous les utilisateurs</strong>.</li>
              <li><strong>Exiger un appareil conforme</strong> pour les applications sensibles (messagerie, RH, finance).</li>
              <li><strong>Bloquer l'accès depuis des pays non autorisés</strong> (geo-blocking, en complément).</li>
              <li><strong>Exiger la MFA pour l'enregistrement des méthodes de sécurité</strong> (security info registration).</li>
            </ul>
            <aside class="callout callout--info">
              <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--sky"><svg><use href="#icon-info"/></svg></div></div>
              <div class="callout__content">
                <span class="callout__label">SECURITY DEFAULTS vs CA EXPLICITES</span>
                <p>Microsoft pousse aussi des <strong>Security Defaults</strong> (gratuit, tenant sans P1) et des <strong>politiques CA gérées par Microsoft</strong> en préversion. En E3+P2, on <strong>désactive</strong> les Security Defaults au profit de politiques CA explicites, plus granulaires.</p>
              </div>
            </aside>
          </div>

          <!-- Sources -->
          <div class="content-block animate-on-scroll" data-section-id="s-cours-sources">
            <h3>Sources Microsoft Learn</h3>
            <ul>
              <li><a href="https://learn.microsoft.com/entra/identity/conditional-access/overview" target="_blank" rel="noopener">Vue d'ensemble Conditional Access <svg width="12" height="12" style="display:inline"><use href="#icon-external-link"/></svg></a></li>
              <li><a href="https://learn.microsoft.com/entra/identity/conditional-access/concept-conditional-access-policies" target="_blank" rel="noopener">Composants d'une politique <svg width="12" height="12" style="display:inline"><use href="#icon-external-link"/></svg></a></li>
              <li><a href="https://learn.microsoft.com/entra/identity/conditional-access/concept-conditional-access-report-only" target="_blank" rel="noopener">Report-only mode <svg width="12" height="12" style="display:inline"><use href="#icon-external-link"/></svg></a></li>
              <li><a href="https://learn.microsoft.com/entra/identity/conditional-access/what-if-tool" target="_blank" rel="noopener">Outil What If <svg width="12" height="12" style="display:inline"><use href="#icon-external-link"/></svg></a></li>
              <li><a href="https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access" target="_blank" rel="noopener">Comptes break-glass <svg width="12" height="12" style="display:inline"><use href="#icon-external-link"/></svg></a></li>
              <li><a href="https://learn.microsoft.com/entra/identity/conditional-access/policy-block-legacy-authentication" target="_blank" rel="noopener">Bloquer la legacy auth <svg width="12" height="12" style="display:inline"><use href="#icon-external-link"/></svg></a></li>
              <li><a href="https://learn.microsoft.com/entra/identity/conditional-access/concept-conditional-access-policy-common" target="_blank" rel="noopener">Templates courants <svg width="12" height="12" style="display:inline"><use href="#icon-external-link"/></svg></a></li>
            </ul>
            <p class="text-muted" style="font-size:var(--fs-sm);margin-top:var(--space-3)"><em>Rappel : en cas d'écart entre ce support et le portail, le portail fait foi.</em></p>
          </div>
        </section>

        <!-- Section LAB -->
        <section class="module-section module-section--lab">
          <div class="section-header">
            <div class="icon-circle icon-circle--lg icon-circle--mint">
              <svg><use href="#icon-flask-conical"/></svg>
            </div>
            <div class="section-header__content">
              <span class="section-header__label">LAB</span>
              <h2 class="section-header__title">Construire 3 politiques CA en report-only</h2>
              <p class="section-header__meta">3 parties · TP guidé ~2h30 · Portail : entra.microsoft.com</p>
            </div>
          </div>

          <aside class="callout callout--license animate-on-scroll">
            <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--lavender"><svg><use href="#icon-key-round"/></svg></div></div>
            <div class="callout__content">
              <span class="callout__label">LICENCES REQUISES EN PRODUCTION</span>
              <p><strong>Inclus dans Entra ID P1 :</strong> création de politiques CA, report-only, What If, named locations, exigence MFA / appareil conforme, blocage legacy auth.</p>
              <p><strong>Nécessite P2 :</strong> conditions basées sur le <strong>risque</strong> utilisateur / de connexion (vu au module 07).</p>
              <p><strong>Prérequis Intune :</strong> l'exigence « appareil conforme » suppose des postes enrôlés et évalués par Intune (module 06). Sans ça, la politique bloque tout le monde.</p>
            </div>
          </aside>

          <div class="content-block animate-on-scroll" data-section-id="s-lab-a">
            <h3>Partie A — Créer les comptes break-glass (30 min)</h3>
            <h4>1. Créer 2 utilisateurs cloud-only</h4>
            <p><strong>Portail :</strong> <code>Entra admin center &gt; Users &gt; New user &gt; Create new user</code></p>
            <ul>
              <li><code>break-glass-01@votretenant.onmicrosoft.com</code></li>
              <li><code>break-glass-02@votretenant.onmicrosoft.com</code></li>
            </ul>
            <p>Mot de passe long (16+ caractères) généré et <strong>stocké hors ligne</strong> (coffre physique, KeePass air-gapped). Pas de MFA imposée à ces comptes.</p>
            <h4>2. Attribuer le rôle Global Administrator</h4>
            <p><strong>Portail :</strong> <code>Roles &amp; admins &gt; Global Administrator &gt; Add assignments</code></p>
            <h4>3. Poser une alerte de connexion</h4>
            <p><strong>Portail :</strong> <code>Microsoft Sentinel</code> ou <code>Entra ID Audit logs</code>. Toute connexion break-glass doit générer un mail à l'équipe sécurité.</p>
          </div>

          <div class="content-block animate-on-scroll" data-section-id="s-lab-b">
            <h3>Partie B — Créer 3 politiques CA en report-only (90 min)</h3>
            <p>Pour chaque politique : <strong>affectations</strong> claires, <strong>exclusion</strong> des 2 break-glass, <strong>Enable policy = Report-only</strong>.</p>

            <h4>Politique 1 — CA-Block-LegacyAuth</h4>
            <ul>
              <li><strong>Users :</strong> All users, <strong>exclude</strong> break-glass-01, break-glass-02.</li>
              <li><strong>Cloud apps :</strong> All cloud apps.</li>
              <li><strong>Conditions &gt; Client apps :</strong> Exchange ActiveSync clients + Other clients.</li>
              <li><strong>Grant :</strong> Block access.</li>
            </ul>

            <h4>Politique 2 — CA-MFA-Admins</h4>
            <ul>
              <li><strong>Users :</strong> Directory roles = <em>Global Administrator, Security Administrator, Exchange Administrator</em> (et autres rôles à privilèges), <strong>exclude</strong> break-glass.</li>
              <li><strong>Cloud apps :</strong> All cloud apps.</li>
              <li><strong>Grant :</strong> Require multi-factor authentication.</li>
            </ul>

            <h4>Politique 3 — CA-MFA-AllUsers</h4>
            <ul>
              <li><strong>Users :</strong> All users, <strong>exclude</strong> break-glass.</li>
              <li><strong>Cloud apps :</strong> All cloud apps.</li>
              <li><strong>Conditions :</strong> aucune (MFA partout).</li>
              <li><strong>Grant :</strong> Require multi-factor authentication.</li>
            </ul>

            <h4>Valider avec What If</h4>
            <p><strong>Portail :</strong> <code>Conditional Access &gt; Policies &gt; What If</code>. Testez au moins 3 scénarios : un admin, un utilisateur standard, un break-glass. Vérifiez que les break-glass ne sont jamais bloqués et n'ont pas de MFA imposée.</p>
          </div>

          <div class="content-block animate-on-scroll" data-section-id="s-lab-c">
            <h3>Partie C — Analyser et basculer (30 min)</h3>
            <p><strong>Portail :</strong> <code>Sign-in logs &gt; Conditional Access</code>. Après quelques connexions test (via un navigateur privé, un compte non-admin), examinez ce qui aurait été bloqué / demandé en MFA. Cochez qu'aucun break-glass n'est concerné et qu'aucun utilisateur légitime n'aurait été verrouillé.</p>
            <p>Une fois convaincu, passez <strong>une seule</strong> politique (la plus prioritaire : legacy auth) de Report-only à <strong>On</strong>. Attendez 24-48h. Puis la suivante.</p>
            <aside class="callout callout--info">
              <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--sky"><svg><use href="#icon-info"/></svg></div></div>
              <div class="callout__content">
                <span class="callout__label">RÉSULTAT ATTENDU</span>
                <ul style="margin:var(--space-2) 0 0">
                  <li>J'ai 2 comptes break-glass documentés, alertés, exclus de toutes les politiques.</li>
                  <li>Mes 3 politiques CA sont créées en report-only.</li>
                  <li>What If confirme le comportement attendu pour au moins 3 profils.</li>
                  <li>Je sais lire les sign-in logs filtrés par politique CA.</li>
                  <li>J'ai un plan de bascule progressif (une politique à la fois).</li>
                </ul>
              </div>
            </aside>
          </div>
        </section>

        <!-- Section PIÈGES -->
        <section class="module-section module-section--pieges" data-section-id="s-pieges">
          <div class="section-header">
            <div class="icon-circle icon-circle--lg icon-circle--peach">
              <svg><use href="#icon-alert-triangle"/></svg>
            </div>
            <div class="section-header__content">
              <span class="section-header__label">PIÈGES CLASSIQUES</span>
              <h2 class="section-header__title">5 réflexes qui verrouillent tout le monde dehors</h2>
              <p class="section-header__meta">Lecture ~10 min</p>
            </div>
          </div>

          <aside class="callout callout--warning animate-on-scroll">
            <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--peach"><svg><use href="#icon-alert-triangle"/></svg></div></div>
            <div class="callout__content">
              <span class="callout__label">PIÈGE 1 — ACTIVER UNE POLITIQUE DIRECTEMENT EN « ON »</span>
              <p><strong>Le réflexe :</strong> créer la politique et l'activer tout de suite, « pour que ça protège ».</p>
              <p><strong>Pourquoi c'est faux :</strong> une politique mal calibrée (ou une MFA non enrôlée sur certains comptes) peut verrouiller tout le monde dehors, admins compris.</p>
              <p><strong>La bonne pratique :</strong> <strong>report-only → What If → sign-in logs → puis On</strong>. Toujours dans cet ordre.</p>
            </div>
          </aside>

          <aside class="callout callout--warning animate-on-scroll">
            <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--peach"><svg><use href="#icon-alert-triangle"/></svg></div></div>
            <div class="callout__content">
              <span class="callout__label">PIÈGE 2 — OUBLIER LES COMPTES BREAK-GLASS</span>
              <p><strong>Le réflexe :</strong> appliquer les politiques à « All users » sans exclusion.</p>
              <p><strong>Pourquoi c'est faux :</strong> si la MFA ou le CA se cassent, il n'y a plus de porte de secours.</p>
              <p><strong>La bonne pratique :</strong> 2 comptes break-glass (Global Admin cloud-only, mot de passe long), <strong>exclus de toutes les politiques</strong>, documentés hors ligne et surveillés par alerte.</p>
            </div>
          </aside>

          <aside class="callout callout--warning animate-on-scroll">
            <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--peach"><svg><use href="#icon-alert-triangle"/></svg></div></div>
            <div class="callout__content">
              <span class="callout__label">PIÈGE 3 — CROIRE QUE LE GEO-BLOCKING SUFFIT</span>
              <p><strong>Le réflexe :</strong> « je bloque les pays étrangers, c'est réglé ».</p>
              <p><strong>Pourquoi c'est faux :</strong> un VPN place l'attaquant dans un pays autorisé en quelques secondes. La géo est un signal <strong>parmi d'autres</strong>, pas une barrière.</p>
              <p><strong>La bonne pratique :</strong> combiner les signaux (MFA + appareil conforme + legacy bloquée). Défense en profondeur.</p>
            </div>
          </aside>

          <aside class="callout callout--warning animate-on-scroll">
            <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--peach"><svg><use href="#icon-alert-triangle"/></svg></div></div>
            <div class="callout__content">
              <span class="callout__label">PIÈGE 4 — EXIGER « APPAREIL CONFORME » SANS INTUNE</span>
              <p><strong>Le réflexe :</strong> activer « require compliant device » avant d'avoir enrôlé les postes.</p>
              <p><strong>Pourquoi c'est faux :</strong> sans Intune, <strong>aucun</strong> appareil n'est marqué conforme → la politique bloque tout le monde.</p>
              <p><strong>La bonne pratique :</strong> déployer Intune (module 06) d'abord, vérifier que des postes remontent « compliant », puis activer la politique (d'abord en report-only).</p>
            </div>
          </aside>

          <aside class="callout callout--warning animate-on-scroll">
            <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--peach"><svg><use href="#icon-alert-triangle"/></svg></div></div>
            <div class="callout__content">
              <span class="callout__label">PIÈGE 5 — NE PAS BLOQUER LA LEGACY AUTH</span>
              <p><strong>Le réflexe :</strong> laisser POP / IMAP / SMTP AUTH actifs « au cas où une vieille app en a besoin ».</p>
              <p><strong>Pourquoi c'est faux :</strong> ces protocoles <strong>ne supportent pas la MFA</strong> et sont la cible n°1 du password spraying. Toute votre MFA est contournable tant qu'ils sont ouverts.</p>
              <p><strong>La bonne pratique :</strong> politique de <strong>blocage de la legacy auth</strong> en priorité (après inventaire des rares apps qui en dépendent, à migrer). C'est souvent la première politique à passer en <em>On</em>.</p>
            </div>
          </aside>
        </section>

        <!-- Section ÉVALUATION -->
        <section class="module-section module-section--eval" data-section-id="s-eval">
          <div class="section-header">
            <div class="icon-circle icon-circle--lg icon-circle--peach">
              <svg><use href="#icon-graduation-cap"/></svg>
            </div>
            <div class="section-header__content">
              <span class="section-header__label">ÉVALUATION</span>
              <h2 class="section-header__title">Testez vos acquis</h2>
              <p class="section-header__meta">10 questions QCM · cas pratique · ~30 min</p>
            </div>
          </div>

          <div class="content-block animate-on-scroll" style="text-align:center;padding:var(--space-8)">
            <p style="font-size:var(--fs-lg);color:var(--text-secondary);margin-bottom:var(--space-3)">Une évaluation interactive qui vous donne le badge <strong>Acquis</strong> (≥60%) ou <strong>Maîtrisé</strong> (≥80%).</p>
            <div class="eval-status" style="max-width:400px;margin:0 auto var(--space-4)">Évaluation non tentée.</div>
            <button class="btn btn--primary btn--lg qcm-launcher" type="button">
              <svg width="18" height="18"><use href="#icon-sparkles"/></svg>
              Lancer l'évaluation
            </button>
          </div>

          <div class="caspratique animate-on-scroll" data-id="cp-04-ca-baseline">
            <h3 class="caspratique__title">
              <svg width="24" height="24"><use href="#icon-graduation-cap"/></svg>
              Cas pratique — La demande de la direction
            </h3>
            <div class="caspratique__statement">
              <p><strong>Contexte :</strong> la direction demande : « Tous les administrateurs doivent faire de la MFA, la vieille authentification doit être coupée, et l'accès à la messagerie doit être réservé aux postes gérés. On ne veut surtout pas se retrouver bloqués dehors. »</p>
              <p><strong>Questions :</strong></p>
              <ol>
                <li>Quelles politiques CA créez-vous (nom + contrôle) ?</li>
                <li>Dans quel <strong>ordre de déploiement</strong> et avec quels <strong>garde-fous</strong> ?</li>
                <li>Quelle dépendance technique conditionne la politique « messagerie sur postes gérés » ?</li>
              </ol>
            </div>
            <label class="caspratique__label" for="cp-textarea">Votre réponse :</label>
            <textarea id="cp-textarea" class="caspratique__textarea" placeholder="Rédigez votre démarche ici. Elle est sauvegardée automatiquement dans votre navigateur."></textarea>
            <div class="caspratique__actions">
              <button class="btn btn--soft-peach caspratique__reveal-btn" type="button">Voir la correction type</button>
              <button class="btn btn--ghost btn--sm caspratique__clear-btn" type="button">Effacer ma réponse</button>
            </div>
            <div class="caspratique__correction">
              <h4>Démarche attendue</h4>
              <ol>
                <li><strong>Trois politiques :</strong>
                  <ul>
                    <li><strong>CA-MFA-Admins</strong> — require MFA, ciblée sur les rôles d'annuaire à privilèges.</li>
                    <li><strong>CA-Block-LegacyAuth</strong> — block, client apps = <em>Exchange ActiveSync + Other clients</em>.</li>
                    <li><strong>CA-CompliantDevice-Exchange</strong> — require compliant device, ciblée sur Exchange Online.</li>
                  </ul>
                </li>
                <li><strong>Ordre &amp; garde-fous :</strong> créer d'abord <strong>2 comptes break-glass</strong> exclus de toutes les politiques. Déployer chaque politique en <strong>report-only</strong>, valider avec <strong>What If</strong> et les sign-in logs, vérifier l'enrôlement MFA des admins, <strong>puis</strong> basculer en <em>On</em> une par une (jamais toutes d'un coup).</li>
                <li><strong>Dépendance :</strong> la politique « messagerie sur postes gérés » exige des postes <strong>enrôlés et évalués conformes par Intune</strong> (module 06). Sans Intune, aucun appareil n'est « compliant » et la politique bloquerait tout le monde — d'où le report-only jusqu'à ce qu'Intune soit en place.</li>
              </ol>
              <h4>Grille d'auto-évaluation</h4>
              <ul class="caspratique__checklist">
                <li><input type="checkbox" id="cp-1"> <label for="cp-1">A proposé les 3 politiques attendues (MFA admins, block legacy, compliant device)</label></li>
                <li><input type="checkbox" id="cp-2"> <label for="cp-2">A cité les <strong>break-glass</strong> comme prérequis, avec exclusion</label></li>
                <li><input type="checkbox" id="cp-3"> <label for="cp-3">A explicité le mode <strong>report-only</strong> comme point de départ</label></li>
                <li><input type="checkbox" id="cp-4"> <label for="cp-4">A mentionné <strong>What If</strong> comme outil de validation avant bascule</label></li>
                <li><input type="checkbox" id="cp-5"> <label for="cp-5">A déployé une politique à la fois, pas toutes d'un coup</label></li>
                <li><input type="checkbox" id="cp-6"> <label for="cp-6">A identifié la <strong>dépendance Intune</strong> pour « appareil conforme »</label></li>
                <li><input type="checkbox" id="cp-7"> <label for="cp-7">A évoqué la vérification de l'enrôlement MFA des admins avant bascule</label></li>
              </ul>
            </div>
          </div>
        </section>
      </article>

      <!-- Sidebar droite -->
      <aside class="module-sidebar-right" aria-label="Progression et sommaire">
        <div class="module-progress-card">
          <div class="module-progress-card__title">Ma progression</div>
          <div class="progress-donut progress-donut--module" data-value="0">
            <svg viewBox="0 0 120 120">
              <circle class="progress-donut__track" cx="60" cy="60" r="50"/>
              <circle class="progress-donut__fill" cx="60" cy="60" r="50" stroke-dasharray="314" stroke-dashoffset="314"/>
            </svg>
            <div class="progress-donut__label">
              <span class="progress-donut__value">0</span>
              <span class="progress-donut__unit">%</span>
            </div>
          </div>
          <div class="module-progress-card__stats">
            <div><strong class="module-progress-card__count">0 / 13</strong><br><span>sections lues</span></div>
          </div>
        </div>

        <nav class="module-toc" aria-label="Sommaire du module">
          <div class="module-toc__title">Sommaire</div>
          <ul class="module-toc__list">
            <li class="module-toc__item"><a class="module-toc__link" href="#s-objectifs" data-target="s-objectifs">Objectifs</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-cours-1" data-target="s-cours-1">1. Anatomie d'une politique</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-cours-2" data-target="s-cours-2">2. Signaux &amp; conditions</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-cours-3" data-target="s-cours-3">3. Named locations &amp; conformité</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-cours-4" data-target="s-cours-4">4. Contrôles</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-cours-5" data-target="s-cours-5">5. Déploiement sûr</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-cours-6" data-target="s-cours-6">6. Templates baseline</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-cours-sources" data-target="s-cours-sources">Sources</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-lab-a" data-target="s-lab-a">Lab · Break-glass</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-lab-b" data-target="s-lab-b">Lab · 3 politiques</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-lab-c" data-target="s-lab-c">Lab · Bascule</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-pieges" data-target="s-pieges">Pièges classiques</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-eval" data-target="s-eval">Évaluation</a></li>
          </ul>
        </nav>

        <div class="module-actions">
          <button class="btn btn--primary btn--full qcm-launcher" type="button">
            <svg width="16" height="16"><use href="#icon-sparkles"/></svg>
            Passer l'évaluation
          </button>
          <a class="btn btn--ghost btn--full" href="javascript:void(0)" onclick="if(window.ScormAPI){ScormAPI.terminate();}try{window.parent.location.reload();}catch(e){alert('Retournez sur Moodle pour le module suivant.');}return false;">
            <svg width="16" height="16"><use href="#icon-arrow-left"/></svg>
            Module précédent
          </a>
          <a class="btn btn--soft-violet btn--full" href="javascript:void(0)" onclick="if(window.ScormAPI){ScormAPI.terminate();}try{window.parent.location.reload();}catch(e){alert('Retournez sur Moodle pour le module suivant.');}return false;">
            Module suivant
            <svg width="16" height="16"><use href="#icon-arrow-right"/></svg>
          </a>
        </div>
      </aside>
    </div>
  </main>

  <footer class="site-footer">
    <div class="site-footer__brand">
      <img src="assets/atoo-next-logo.svg" alt="Atoo Next">
      <span class="site-footer__tag">La connexion commence ici</span>
    </div>
    <div>Module 04 · Formation Microsoft Entra ID</div>
  </footer>

  <!-- Modale QCM -->
  <div class="modal-overlay" id="qcm-modal" role="dialog" aria-modal="true" aria-labelledby="qcm-modal-title">
    <div class="modal" tabindex="-1">
      <header class="modal__header">
        <h2 id="qcm-modal-title" style="margin:0;font-size:var(--fs-xl)">Évaluation — Conditional Access</h2>
        <button class="modal__close" aria-label="Fermer">
          <svg><use href="#icon-x"/></svg>
        </button>
      </header>
      <div class="modal__body"></div>
      <footer class="modal__footer"></footer>
    </div>
  </div>

  <script>window.__SCORM_CONTEXT__ = true;</script>
  <script>
    window.MODULE_ID = '04-conditional-access';
    window.MODULE_NUM = '04';
    window.MODULE_STORAGE_KEY = 'formation-entra:module-04';
    window.MODULE_TITLE = 'Conditional Access';

    window.QCM_DATA = {
      module: '04-conditional-access',
      titre: 'Évaluation — Conditional Access',
      seuils: { acquis: 60, maitrise: 80 },
      questions: [
        { id: 'q1', type: 'single', enonce: 'Dans quel état crée-t-on **toujours** une nouvelle politique CA en premier ?', reference_cours: 'Section 5 — Déploiement sûr',
          choix: [
            { id: 'a', texte: 'Enabled (On)', correct: false, feedback_si_choisi: 'Activer directement en On est le premier réflexe à corriger : une politique mal calibrée peut verrouiller tout le monde dehors.' },
            { id: 'b', texte: 'Report-only', correct: true },
            { id: 'c', texte: 'Off', correct: false, feedback_si_choisi: 'Off ne l\'évalue pas du tout : vous perdez la donnée qui sert à valider la politique avant bascule.' },
            { id: 'd', texte: 'Peu importe', correct: false, feedback_si_choisi: 'Le choix est loin d\'être indifférent : c\'est ce qui différencie un déploiement sûr d\'un incident de production.' }
          ],
          explication: 'Report-only permet d\'évaluer la politique sans l\'appliquer. Les sign-in logs indiquent ce qu\'elle aurait fait — de quoi valider avant de passer en On. C\'est le premier des 3 garde-fous obligatoires.'
        },
        { id: 'q2', type: 'single', enonce: 'À quoi servent les comptes break-glass ?', reference_cours: 'Section 5 + Piège 2',
          choix: [
            { id: 'a', texte: 'À tester la MFA', correct: false, feedback_si_choisi: 'Les tests MFA se font avec des comptes de test dédiés. Le break-glass est réservé à l\'urgence : sa surveillance repose sur le fait qu\'il ne sert quasi jamais.' },
            { id: 'b', texte: 'À garder un accès admin d\'urgence, exclu de toutes les politiques CA', correct: true },
            { id: 'c', texte: 'À synchroniser l\'AD', correct: false, feedback_si_choisi: 'La synchronisation d\'annuaire est faite par Entra Connect / Cloud Sync (module 03), pas par des comptes.' },
            { id: 'd', texte: 'À enrôler des appareils', correct: false, feedback_si_choisi: 'L\'enrôlement d\'appareils passe par Intune (module 06), pas par des comptes break-glass.' }
          ],
          explication: 'Break-glass = 2 comptes Global Admin cloud-only, mot de passe long, exclus de toutes les politiques CA, documentés hors ligne et surveillés par alerte. Filet de sécurité en cas de panne MFA / CA.'
        },
        { id: 'q3', type: 'single', enonce: 'Quel contrôle bloque les protocoles qui ne supportent pas la MFA (POP, IMAP, SMTP AUTH) ?', reference_cours: 'Section 6 + Piège 5',
          choix: [
            { id: 'a', texte: 'Une politique bloquant la **legacy authentication**', correct: true },
            { id: 'b', texte: 'Le geo-blocking', correct: false, feedback_si_choisi: 'Le geo-blocking filtre par pays, pas par protocole. Un client legacy depuis un pays autorisé passerait sans MFA.' },
            { id: 'c', texte: 'L\'appareil conforme', correct: false, feedback_si_choisi: 'L\'exigence d\'appareil conforme suppose une conformité Intune, mais les protocoles legacy ne présentent pas ces signaux.' },
            { id: 'd', texte: 'La sign-in frequency', correct: false, feedback_si_choisi: 'La sign-in frequency force une ré-auth périodique. Elle ne bloque pas les protocoles legacy qui n\'ont même pas de session MFA.' }
          ],
          explication: 'Politique CA « Block legacy authentication » (client apps = Exchange ActiveSync + Other clients). Ces protocoles ne portent pas la MFA — les laisser ouverts contourne toute votre stratégie MFA.'
        },
        { id: 'q4', type: 'single', enonce: 'L\'exigence « appareil conforme » dans une politique CA s\'appuie sur :', reference_cours: 'Section 3',
          choix: [
            { id: 'a', texte: 'Une GPO', correct: false, feedback_si_choisi: 'Les GPO ciblent les postes joints AD, elles ne remontent pas un état « compliant » vers Entra ID.' },
            { id: 'b', texte: 'L\'évaluation de conformité faite par **Intune**', correct: true },
            { id: 'c', texte: 'Le pare-feu', correct: false, feedback_si_choisi: 'Le pare-feu filtre du trafic réseau, il n\'évalue pas la conformité d\'un poste (chiffrement, antivirus à jour, etc.).' },
            { id: 'd', texte: 'ADFS', correct: false, feedback_si_choisi: 'ADFS est une infrastructure d\'authentification (federation), pas un moteur de conformité de poste.' }
          ],
          explication: 'La conformité est évaluée par Intune (module 06) selon des politiques de conformité que vous définissez (chiffrement disque, code PIN, OS à jour…). Le CA consomme ce signal via « Require device to be marked as compliant ».'
        },
        { id: 'q5', type: 'single', enonce: 'À quoi sert l\'outil **What If** ?', reference_cours: 'Section 5',
          choix: [
            { id: 'a', texte: 'Appliquer la politique', correct: false, feedback_si_choisi: 'L\'application se fait via l\'état Enable policy = On. What If ne change rien à la politique elle-même.' },
            { id: 'b', texte: 'Simuler quelles politiques s\'appliqueraient à un utilisateur / app / contexte donné', correct: true },
            { id: 'c', texte: 'Créer un compte', correct: false, feedback_si_choisi: 'La création de comptes se fait dans Users, pas dans les outils de Conditional Access.' },
            { id: 'd', texte: 'Chiffrer les logs', correct: false, feedback_si_choisi: 'Le chiffrement des logs relève de la plateforme Azure / Sentinel, pas du CA.' }
          ],
          explication: 'What If simule à froid : pour un utilisateur donné, sur une app donnée, dans un contexte donné (plateforme, emplacement, client app, risque), il liste les politiques qui s\'appliqueraient et le résultat attendu.'
        },
        { id: 'q6', type: 'single', enonce: 'Une politique « MFA pour tous » passée directement en **On** sans exclusion, alors que la MFA n\'est pas encore enrôlée partout, produit quel risque ?', reference_cours: 'Piège 1 + Piège 2',
          choix: [
            { id: 'a', texte: 'Aucun', correct: false, feedback_si_choisi: 'C\'est le scénario type de l\'incident : les comptes non enrôlés (dont potentiellement des admins) ne peuvent plus s\'authentifier.' },
            { id: 'b', texte: 'Un verrouillage : plus personne (y compris les admins) ne peut entrer', correct: true },
            { id: 'c', texte: 'Une perte de logs', correct: false, feedback_si_choisi: 'Les sign-in logs continuent d\'être collectés, indépendamment de la politique CA.' },
            { id: 'd', texte: 'Une double facturation', correct: false, feedback_si_choisi: 'Le CA n\'a pas de facturation à la connexion — il est inclus dans P1.' }
          ],
          explication: 'Si un admin n\'est pas enrôlé MFA et qu\'aucun break-glass n\'est exclu de la politique, personne ne peut plus entrer pour corriger. C\'est pour ça que les 3 garde-fous (report-only, What If, break-glass) sont non négociables.'
        },
        { id: 'q7', type: 'single', enonce: 'Le geo-blocking seul est-il une protection suffisante ?', reference_cours: 'Section 3 + Piège 3',
          choix: [
            { id: 'a', texte: 'Oui', correct: false, feedback_si_choisi: 'Un attaquant utilise un VPN commercial en quelques secondes pour se placer dans un pays autorisé. Le geo seul ne protège pas.' },
            { id: 'b', texte: 'Non : un VPN contourne la géolocalisation ; il faut combiner les signaux (MFA, appareil conforme)', correct: true }
          ],
          explication: 'La géolocalisation est un signal parmi d\'autres, pas une barrière. Elle ajoute de la friction pour un attaquant occasionnel, mais ne bloque pas un attaquant motivé. La défense repose sur la combinaison MFA + appareil conforme + blocage legacy + geo.'
        },
        { id: 'q8', type: 'multi', enonce: 'Quels éléments composent les **affectations** d\'une politique CA ? (plusieurs)', reference_cours: 'Section 2',
          choix: [
            { id: 'a', texte: 'Utilisateurs / groupes / rôles', correct: true },
            { id: 'b', texte: 'Applications / actions cibles', correct: true },
            { id: 'c', texte: 'Conditions (plateforme, emplacement, risque, état d\'appareil)', correct: true },
            { id: 'd', texte: 'La couleur du portail', correct: false, feedback_si_choisi: 'La couleur du portail n\'a aucune incidence sur l\'application d\'une politique.' }
          ],
          explication: 'Les affectations = users/groups/roles + cloud apps ou actions + conditions (plateforme, emplacement, client app, état de l\'appareil, risque). Ce sont les 3 volets du SI de la politique.'
        },
        { id: 'q9', type: 'single', enonce: 'Les conditions **basées sur le risque** (risque de connexion / utilisateur) exigent quelle licence ?', reference_cours: 'Section 2 + Lab licences',
          choix: [
            { id: 'a', texte: 'Free', correct: false, feedback_si_choisi: 'Free ne donne accès qu\'aux Security Defaults, pas au CA granulaire ni au risque.' },
            { id: 'b', texte: 'P1', correct: false, feedback_si_choisi: 'P1 donne accès au CA (règles classiques), mais pas aux signaux de risque Identity Protection — c\'est le seuil P2.' },
            { id: 'c', texte: 'P2', correct: true },
            { id: 'd', texte: 'E5 obligatoire', correct: false, feedback_si_choisi: 'E5 inclut P2, mais ce n\'est pas E5 lui-même qui est requis : c\'est bien la brique Entra ID P2 (achetable seule ou incluse dans E5).' }
          ],
          explication: 'Les conditions basées sur le risque (Identity Protection) exigent Entra ID P2. Elles sont couvertes en détail au module 07.'
        },
        { id: 'q10', type: 'single', enonce: 'En E3+P2, que fait-on généralement des **Security Defaults** ?', reference_cours: 'Section 6',
          choix: [
            { id: 'a', texte: 'On les garde activés en plus des politiques CA', correct: false, feedback_si_choisi: 'Cumuler Security Defaults et CA crée des conflits (deux moteurs de décision superposés) et complique le diagnostic.' },
            { id: 'b', texte: 'On les désactive au profit de politiques CA explicites, plus granulaires', correct: true },
            { id: 'c', texte: 'Ils sont obligatoires', correct: false, feedback_si_choisi: 'Les Security Defaults ne sont pas obligatoires ; ils sont proposés par défaut aux tenants sans P1 et peuvent être désactivés dès qu\'on passe au CA.' },
            { id: 'd', texte: 'Ils remplacent Intune', correct: false, feedback_si_choisi: 'Les Security Defaults sont un mode simplifié de MFA — ils n\'ont rien à voir avec la gestion de postes qui reste le rôle d\'Intune.' }
          ],
          explication: 'Security Defaults = mode simplifié destiné aux petits tenants sans P1. Dès qu\'on a P1/P2, on les désactive pour piloter finement via CA (granularité utilisateur/app/condition, report-only, exclusions).'
        }
      ]
    };
  </script>
  <script src="assets/shared.js"></script>

  <script src="scorm2004-api.js"></script>
  <script src="scorm-bridge.js"></script>
</body>
</html>
