<!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 02 — Identités Entra · Formation Entra ID · Atoo Next</title>
  <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>
  <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-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-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-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-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"/></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-cloud" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z"/></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-user-plus" 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"/><line x1="19" x2="19" y1="8" y2="14"/><line x1="22" x2="16" y1="11" y2="11"/></symbol>
  </svg>
  <button class="hamburger-btn" aria-label="Ouvrir le menu"><svg width="24" height="24"><use href="#icon-menu"/></svg></button>
  <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--lavender">
            <span class="module-header__number-huge">02</span>
            <div class="module-header__icon-large"><svg><use href="#icon-users"/></svg></div>
          </div>
          <div class="module-header__meta">
            <span class="module-header__label">MODULE 02 · COURS</span>
            <h1 class="module-header__title">Identités Entra</h1>
            <p class="module-header__subtitle">Utilisateurs, groupes, rôles, applications, provisioning SCIM.</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">12</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 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>Créer et gérer</strong> des utilisateurs (membres / invités B2B, cloud-only / synchronisés).</span></li>
            <li class="task-list__item"><span><strong>Choisir</strong> le bon type de groupe (sécurité vs M365, assigné vs dynamique) et écrire une règle d'appartenance.</span></li>
            <li class="task-list__item"><span><strong>Distinguer</strong> rôles d'annuaire Entra et rôles Azure RBAC (deux plans de contrôle).</span></li>
            <li class="task-list__item"><span><strong>Expliquer</strong> app registration, enterprise application, service principal, managed identity — et savoir lequel remplace un « compte de service ».</span></li>
            <li class="task-list__item"><span><strong>Décrire</strong> le provisioning SCIM et son rôle dans l'automatisation du cycle de vie des comptes.</span></li>
          </ul>
        </section>

        <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">Objets d'annuaire et applications</h2><p class="section-header__meta">5 sections · lecture ~40 min</p></div></div>

          <div class="content-block animate-on-scroll" data-section-id="s-cours-1">
            <h3>1. Utilisateurs</h3>
            <div class="section-hook"><span class="section-hook__label">Contexte</span>Vous recevez une demande : « ajouter Marie du cabinet partenaire à notre site SharePoint, sans lui créer un compte interne ». Réflexe AD : créer un compte externe local. Réflexe Entra : inviter en B2B — deux mondes.</div>
            <p>Un objet utilisateur Entra ressemble à un objet utilisateur AD, mais avec des dimensions nouvelles :</p>
            <ul>
              <li><strong>Type de compte</strong> : <strong>Membre</strong> (personnel interne) ou <strong>Invité</strong> (guest B2B, identité externe invitée).</li>
              <li><strong>Source</strong> : <strong>cloud-only</strong> (créé dans Entra) ou <strong>synchronisé</strong> (répliqué depuis AD DS — module 03).</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><code>Get-ADUser</code>, création dans une OU, mot de passe géré par le DC.</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-cloud"/></svg> ENTRA</div><div class="ad-entra-card__body"><p><code>Get-MgUser</code>, création à plat, UPN aligné sur un domaine vérifié.</p></div></div>
              <div class="ad-entra-card ad-entra-card--danger"><div class="ad-entra-card__label"><svg width="14" height="14"><use href="#icon-alert-triangle"/></svg> PIÈGE</div><div class="ad-entra-card__body"><p>Pour un utilisateur <strong>synchronisé</strong>, les modifications se font <strong>dans l'AD on-prem</strong>. Une modification dans Entra sera écrasée au cycle suivant.</p></div></div>
            </div>
            <p>Le <strong>B2B</strong> (invités) n'a pas vraiment d'équivalent AD simple. Le plus proche serait une approbation de forêt, mais le modèle est très différent — ici, on invite une identité externe par email.</p>
          </div>

          <div class="content-block animate-on-scroll" data-section-id="s-cours-2">
            <h3>2. Groupes — deux axes indépendants</h3>
            <h4>Axe 1 — Type : Sécurité vs Microsoft 365</h4>
            <div class="table-wrapper"><table><thead><tr><th></th><th>Groupe de sécurité</th><th>Microsoft 365 Group</th></tr></thead><tbody>
              <tr><td>Sert à</td><td>Donner des accès (apps, CA, licences)</td><td>Collaboration : Teams, SharePoint, boîte partagée</td></tr>
              <tr><td>Membres</td><td>Users, appareils, groupes, SP</td><td>Users (et invités)</td></tr>
              <tr><td>Crée quoi</td><td>Rien d'autre que le groupe</td><td>Site SharePoint, boîte mail, plan…</td></tr>
              <tr><td>Équivalent AD</td><td>Groupe de sécurité AD</td><td>Pas d'équivalent AD direct</td></tr>
            </tbody></table></div>
            <p><strong>Règle simple :</strong> accès → groupe de sécurité ; collaboration → M365 Group.</p>
            <h4>Axe 2 — Appartenance : Assigné vs Dynamique</h4>
            <ul>
              <li><strong>Assigné</strong> : on ajoute/retire les membres à la main (comme en AD).</li>
              <li><strong>Dynamique</strong> : l'appartenance est calculée par une <strong>règle</strong> sur les attributs.</li>
            </ul>
            <p>Exemple : utilisateurs du service Comptabilité :</p>
            <pre><code>(user.department -eq "Comptabilite")</code></pre>
            <p>Exemple sur les appareils Windows :</p>
            <pre><code>(device.deviceOSType -eq "Windows")</code></pre>
            <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">CONTRAINTES CLÉS</span>
                <p>Un groupe <strong>ne peut pas</strong> être à la fois dynamique-user et dynamique-device. On <strong>ne peut pas</strong> ajouter manuellement un membre à un groupe dynamique. Le choix assigné/dynamique est <strong>figé à la création</strong>.</p>
                <p>Les groupes dynamiques nécessitent <strong>Entra ID P1</strong> — inclus dans la cible E3+P2.</p>
              </div>
            </aside>
          </div>

          <div class="content-block animate-on-scroll" data-section-id="s-cours-3">
            <h3>3. Rôles Entra vs Azure RBAC — la distinction critique</h3>
            <div class="section-hook"><span class="section-hook__label">L'erreur n°1</span>C'est l'erreur n°1 des débutants Entra. <strong>Deux systèmes d'autorisation totalement séparés.</strong> Ne jamais les confondre — donner Global Admin à quelqu'un qui a besoin de gérer des VM Azure est à la fois <strong>excessif</strong> (trop de pouvoir sur Entra) et <strong>inutile</strong> (aucun droit sur les VM).</div>
            <div class="table-wrapper"><table><thead><tr><th></th><th>Rôles d'annuaire Entra</th><th>Rôles Azure RBAC</th></tr></thead><tbody>
              <tr><td>Contrôlent</td><td>L'administration d'<strong>Entra / M365</strong></td><td>L'accès aux <strong>ressources Azure</strong></td></tr>
              <tr><td>Exemples</td><td>Global Admin, User Admin, Groups Admin, Helpdesk Admin</td><td>Owner, Contributor, Reader</td></tr>
              <tr><td>Où on les gère</td><td>entra.microsoft.com &gt; Roles &amp; admins</td><td>portal.azure.com &gt; (ressource) &gt; IAM</td></tr>
              <tr><td>Portée (scope)</td><td>Tenant, ou unité administrative</td><td>Mgmt group / souscription / RG / ressource</td></tr>
              <tr><td>Équivalent AD</td><td>Groupes « Domain Admins », délégation</td><td>Pas d'équivalent AD (Azure = plan distinct)</td></tr>
            </tbody></table></div>
            <p><strong>À retenir :</strong> être Global Administrator ne donne aucun droit sur les ressources Azure par défaut, et être Owner d'une souscription ne donne aucun pouvoir d'administration sur Entra.</p>
            <div class="quickquestion animate-on-scroll" data-id="qq-02-role">
              <div class="quickquestion__label"><svg width="14" height="14"><use href="#icon-sparkles"/></svg> Question rapide</div>
              <p class="quickquestion__question">Un dev doit déployer des VM dans un resource group Azure. Vous lui donnez quel rôle et où ?</p>
              <button class="btn btn--soft-violet quickquestion__btn" type="button">Voir la réponse</button>
              <div class="quickquestion__answer"><strong>Contributor sur le resource group concerné (rôle RBAC Azure, dans portal.azure.com &gt; IAM).</strong><p class="quickquestion__explanation">Le geste juste est un rôle du bon système (RBAC Azure, pas Entra) attribué au bon scope (le resource group, pas le tenant). Global Admin serait à la fois excessif et sans effet sur les VM.</p></div>
            </div>
          </div>

          <div class="content-block animate-on-scroll" data-section-id="s-cours-4">
            <h3>4. Applications d'entreprise & Service Principals</h3>
            <div class="table-wrapper"><table><thead><tr><th>Objet</th><th>C'est quoi</th><th>Analogie</th></tr></thead><tbody>
              <tr><td><strong>App registration</strong></td><td>La <strong>définition</strong> d'une app (identifiants, redirect URI, permissions)</td><td>Le « modèle » / blueprint</td></tr>
              <tr><td><strong>Enterprise application</strong></td><td>L'<strong>instance</strong> d'une app dans votre tenant</td><td>L'app telle que vous la consommez</td></tr>
              <tr><td><strong>Service principal</strong></td><td>L'<strong>identité</strong> de l'app dans votre tenant</td><td>Le « compte » de l'app</td></tr>
              <tr><td><strong>Managed identity</strong></td><td>Un SP <strong>géré automatiquement</strong> par Azure (pas de secret)</td><td>Compte de service sans mot de passe</td></tr>
            </tbody></table></div>
            <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>Un « compte de service » = un utilisateur AD avec mot de passe, souvent partagé et jamais renouvelé.</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-cloud"/></svg> ENTRA</div><div class="ad-entra-card__body"><p>Équivalent moderne : <strong>service principal</strong> (avec secret/certificat) ou, mieux, <strong>managed identity</strong> (aucun secret exposé).</p></div></div>
              <div class="ad-entra-card ad-entra-card--danger"><div class="ad-entra-card__label"><svg width="14" height="14"><use href="#icon-alert-triangle"/></svg> PIÈGE</div><div class="ad-entra-card__body"><p>Créer un vrai <strong>utilisateur</strong> pour un script ou une app. Un utilisateur « robot » contourne la MFA, complique le CA et traîne un mot de passe partagé.</p></div></div>
            </div>
          </div>

          <div class="content-block animate-on-scroll" data-section-id="s-cours-5">
            <h3>5. Provisioning SCIM</h3>
            <p><strong>SCIM</strong> (System for Cross-domain Identity Management) est le standard qui permet à Entra de <strong>créer / mettre à jour / désactiver automatiquement</strong> les comptes dans une application SaaS tierce, en fonction de l'appartenance à un groupe.</p>
            <p><strong>Cas typique :</strong> un utilisateur rejoint <code>grp-commerciaux</code> → Entra provisionne automatiquement son compte dans l'app CRM SaaS ; il quitte le groupe → le compte est désactivé.</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">SCIM ≠ SSO</span><p>Ne pas confondre <strong>provisioning</strong> (gestion du cycle de vie des comptes) et <strong>SSO</strong> (authentification unique). Ce sont deux réglages distincts d'une même enterprise application.</p></div></aside>
          </div>

          <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/fundamentals/how-to-create-delete-users" target="_blank" rel="noopener">Utilisateurs Entra <svg width="12" height="12" style="display:inline"><use href="#icon-external-link"/></svg></a></li>
              <li><a href="https://learn.microsoft.com/entra/fundamentals/concept-learn-about-groups" target="_blank" rel="noopener">Groupes et types <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/users/groups-dynamic-membership" target="_blank" rel="noopener">Règles d'appartenance dynamique <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-platform/app-objects-and-service-principals" target="_blank" rel="noopener">App, SP, managed identity <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/app-provisioning/user-provisioning" target="_blank" rel="noopener">Provisioning SCIM <svg width="12" height="12" style="display:inline"><use href="#icon-external-link"/></svg></a></li>
            </ul>
          </div>
        </section>

        <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">Créer les objets d'annuaire</h2><p class="section-header__meta">4 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 M365 E3 + Entra ID P2 :</strong> utilisateurs, groupes de sécurité et M365, groupes dynamiques (P1), rôles d'annuaire, app registrations, service principals, SCIM.</p><p><strong>⚠️ Nécessite E5 / add-on :</strong> — Néant pour les gestes du lab.</p><p><strong>🔬 Démo uniquement (tenant dev) :</strong> le provisioning SCIM vers une <strong>vraie app SaaS</strong> exige une app côté fournisseur. Sur un tenant dev, on active la fonctionnalité sans app connectée.</p></div></aside>
          <div class="content-block animate-on-scroll" data-section-id="s-lab-a">
            <h3>Partie A — Groupe dynamique (30 min)</h3>
            <p><strong>1. Créer un groupe dynamique par service</strong></p>
            <p><code>entra.microsoft.com &gt; Groups &gt; New group</code>. Type : <em>Security</em>, Membership type : <em>Dynamic User</em>, règle : <code>(user.department -eq "Comptabilite")</code>.</p>
            <p><strong>2. Vérifier l'application de la règle</strong></p>
            <p>Modifiez le <code>department</code> d'un utilisateur test. La membership se met à jour en quelques minutes.</p>
          </div>
          <div class="content-block animate-on-scroll" data-section-id="s-lab-b">
            <h3>Partie B — Rôle Entra à portée limitée (25 min)</h3>
            <p><strong>3. Attribuer un rôle d'annuaire</strong></p>
            <p><code>Roles &amp; admins &gt; Helpdesk Administrator &gt; Add assignments</code>. Cible : un user test. Portée : tenant (ou AU si créée).</p>
            <p><strong>4. Comprendre la séparation avec Azure RBAC</strong></p>
            <p>Ouvrez <code>portal.azure.com &gt; Subscriptions &gt; (sub) &gt; Access control (IAM)</code>. Constatez que les Helpdesk Admin n'y apparaissent PAS.</p>
          </div>
          <div class="content-block animate-on-scroll" data-section-id="s-lab-c">
            <h3>Partie C — Application &amp; Service Principal (35 min)</h3>
            <p><strong>5. Enregistrer une application</strong></p>
            <p><code>App registrations &gt; New registration</code>. Récupérez l'Application (client) ID.</p>
            <p><strong>6. Observer l'enterprise application et le service principal</strong></p>
            <p><code>Enterprise applications</code> → l'app apparaît avec un service principal généré automatiquement.</p>
          </div>
          <div class="content-block animate-on-scroll" data-section-id="s-lab-d">
            <h3>Partie D — Provisioning SCIM (démo, 15 min)</h3>
            <p><strong>7. Explorer l'onglet Provisioning</strong></p>
            <p><code>Enterprise apps &gt; (une app) &gt; Provisioning</code>. Repérez le mode <em>Automatic</em> et le mapping d'attributs.</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 un groupe dynamique qui suit un attribut.</li><li>J'ai attribué un rôle d'annuaire à portée limitée.</li><li>J'ai enregistré une app et vu son service principal.</li><li>Je situe le provisioning SCIM dans Enterprise apps.</li></ul></div></aside>
          </div>
        </section>

        <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 AD à corriger</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 — CONFONDRE RÔLES ENTRA ET RBAC AZURE</span><p><strong>Le réflexe :</strong> « je donne Global Admin, comme ça la personne peut tout faire, y compris sur Azure ».</p><p><strong>Pourquoi c'est faux :</strong> deux plans séparés. Global Admin ne donne aucun droit sur une VM ; Owner d'une souscription ne donne aucun pouvoir sur Entra.</p><p><strong>La bonne pratique :</strong> attribuer le rôle du <strong>bon système</strong> au <strong>bon scope</strong>.</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 — UTILISATEUR ROBOT POUR SCRIPT</span><p><strong>Le réflexe :</strong> reproduire le « compte de service » AD sous forme d'utilisateur Entra avec mot de passe.</p><p><strong>Pourquoi c'est faux :</strong> un utilisateur robot contourne la MFA, casse les politiques CA, et son mot de passe finit partagé.</p><p><strong>La bonne pratique :</strong> <strong>service principal</strong> (app registration + certificat) ou <strong>managed identity</strong> pour Azure.</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 — MEMBRE MANUEL DANS UN GROUPE DYNAMIQUE</span><p><strong>Le réflexe :</strong> ouvrir un groupe dynamique et cliquer « Add member ».</p><p><strong>Pourquoi c'est faux :</strong> l'appartenance est calculée par la règle ; l'ajout manuel est impossible. Le type est figé à la création.</p><p><strong>La bonne pratique :</strong> ajuster la <strong>règle</strong> ; si un ajout ponctuel est nécessaire, c'est le signe qu'il fallait un groupe assigné.</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 — M365 GROUP POUR UN SIMPLE ACCÈS</span><p><strong>Le réflexe :</strong> créer un M365 Group par défaut pour tout.</p><p><strong>Pourquoi c'est faux :</strong> ça crée toute une machinerie (SharePoint, boîte mail, Teams). Surdimensionné pour un simple accès applicatif.</p><p><strong>La bonne pratique :</strong> accès → groupe de <strong>sécurité</strong> ; collaboration → M365 Group.</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 — MODIFIER UN ATTRIBUT SYNC DANS ENTRA</span><p><strong>Le réflexe :</strong> corriger le nom ou l'UPN directement dans le portail Entra pour un compte synchronisé.</p><p><strong>Pourquoi c'est faux :</strong> l'AD on-prem est source de vérité. La modif sera écrasée au cycle suivant.</p><p><strong>La bonne pratique :</strong> modifier <strong>dans l'AD source</strong>. Vérifier <code>onPremisesSyncEnabled</code> avant d'agir.</p></div></aside>
        </section>

        <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 · ~20 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)">Feedback riche par question et 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-02-pme">
            <h3 class="caspratique__title"><svg width="24" height="24"><use href="#icon-graduation-cap"/></svg> Cas pratique — La PME et ses 3 besoins</h3>
            <div class="caspratique__statement">
              <p><strong>Contexte :</strong> la PME veut :</p>
              <ol>
                <li>Que tous les membres du service <strong>Commercial</strong> obtiennent automatiquement l'accès à l'app CRM (SaaS) et une licence M365.</li>
                <li>Qu'un prestataire externe puisse collaborer sur un espace d'équipe temporaire.</li>
                <li>Qu'un script de reporting tourne chaque nuit contre Microsoft Graph.</li>
              </ol>
              <p><strong>Pour chaque besoin, indiquez le(s) type(s) d'objet(s) Entra à utiliser, et pourquoi. Précisez la licence minimale pour le point 1.</strong></p>
            </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>Commercial → CRM + licence :</strong> <strong>groupe de sécurité dynamique</strong> avec règle <code>(user.department -eq "Commercial")</code>. Utilisation : (a) <strong>attribution de licence basée sur le groupe</strong>, (b) <strong>provisioning SCIM</strong> vers l'app CRM (Enterprise applications &gt; Provisioning). <strong>Licence minimale : Entra ID P1</strong> pour groupes dynamiques et licences par groupe — <strong>couvert par E3+P2</strong>.</li>
                <li><strong>Prestataire externe :</strong> <strong>invitation B2B</strong> (guest) ajouté au <strong>Microsoft 365 Group</strong> de l'équipe (site SharePoint). Retirer à la fin de la collaboration (ou piloter via Access Review — module 05).</li>
                <li><strong>Script nocturne :</strong> <strong>service principal</strong> (app registration + certificat) ou <strong>managed identity</strong> si le script tourne sur une ressource Azure. Jamais un utilisateur avec mot de passe. Scopes Graph au moindre privilège.</li>
              </ol>
              <h4>Grille d'auto-évaluation</h4>
              <ul class="caspratique__checklist">
                <li><input type="checkbox" id="cp-1"> <label for="cp-1">A choisi un groupe <strong>dynamique</strong> pour le service Commercial</label></li>
                <li><input type="checkbox" id="cp-2"> <label for="cp-2">A écrit une règle correcte sur <code>user.department</code></label></li>
                <li><input type="checkbox" id="cp-3"> <label for="cp-3">A mentionné SCIM comme mécanisme de provisioning vers l'app CRM</label></li>
                <li><input type="checkbox" id="cp-4"> <label for="cp-4">A cité la licence minimale P1 (couverte par E3+P2)</label></li>
                <li><input type="checkbox" id="cp-5"> <label for="cp-5">A choisi B2B + M365 Group pour le prestataire</label></li>
                <li><input type="checkbox" id="cp-6"> <label for="cp-6">A rejeté l'utilisateur avec mot de passe pour le script</label></li>
                <li><input type="checkbox" id="cp-7"> <label for="cp-7">A évoqué le moindre privilège sur les scopes Graph</label></li>
              </ul>
            </div>
          </div>
        </section>
      </article>

      <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 / 12</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><a class="module-toc__link" href="#s-objectifs" data-target="s-objectifs">Objectifs</a></li>
            <li><a class="module-toc__link" href="#s-cours-1" data-target="s-cours-1">1. Utilisateurs</a></li>
            <li><a class="module-toc__link" href="#s-cours-2" data-target="s-cours-2">2. Groupes</a></li>
            <li><a class="module-toc__link" href="#s-cours-3" data-target="s-cours-3">3. Rôles Entra vs RBAC</a></li>
            <li><a class="module-toc__link" href="#s-cours-4" data-target="s-cours-4">4. Apps &amp; Service Principals</a></li>
            <li><a class="module-toc__link" href="#s-cours-5" data-target="s-cours-5">5. Provisioning SCIM</a></li>
            <li><a class="module-toc__link" href="#s-cours-sources" data-target="s-cours-sources">Sources</a></li>
            <li><a class="module-toc__link" href="#s-lab-a" data-target="s-lab-a">Lab · Partie A</a></li>
            <li><a class="module-toc__link" href="#s-lab-b" data-target="s-lab-b">Lab · Partie B</a></li>
            <li><a class="module-toc__link" href="#s-lab-c" data-target="s-lab-c">Lab · Partie C</a></li>
            <li><a class="module-toc__link" href="#s-lab-d" data-target="s-lab-d">Lab · Partie D</a></li>
            <li><a class="module-toc__link" href="#s-pieges" data-target="s-pieges">Pièges classiques</a></li>
            <li><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--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>
          <a class="btn btn--ghost btn--full btn--sm" 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="14" height="14"><use href="#icon-arrow-left"/></svg> Module précédent</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 02 · Formation Microsoft Entra ID</div>
  </footer>

  <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 — Identités Entra</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 = '02-identites-entra';
    window.MODULE_NUM = '02';
    window.MODULE_STORAGE_KEY = 'formation-entra:module-02';
    window.MODULE_TITLE = 'Identités Entra';
    window.QCM_DATA = {
      module: '02-identites-entra', titre: 'Évaluation — Identités Entra', seuils: { acquis: 60, maitrise: 80 },
      questions: [
        { id: 'q1', type: 'single', enonce: 'Vous devez donner à un prestataire externe l\'accès à un site SharePoint, sans lui créer de compte interne. Quel mécanisme ?', reference_cours: 'Section 1 — Utilisateurs / B2B',
          choix: [
            { id: 'a', texte: 'Un compte membre cloud-only', correct: false, feedback_si_choisi: 'Créer un compte membre revient à internaliser l\'identité et son cycle de vie — surdimensionné pour un accès temporaire à un espace.' },
            { id: 'b', texte: 'Une invitation B2B (compte invité / guest)', correct: true },
            { id: 'c', texte: 'Un service principal', correct: false, feedback_si_choisi: 'Un SP représente une application, pas une personne. Pas adapté à un prestataire humain.' },
            { id: 'd', texte: 'Une managed identity', correct: false, feedback_si_choisi: 'Une managed identity est réservée aux ressources Azure — pas à un humain.' }
          ], explication: 'Le B2B invite une identité externe existante par email. Le prestataire reste géré par son organisation d\'origine ; on peut le retirer facilement en fin de collaboration.' },
        { id: 'q2', type: 'single', enonce: 'Un groupe doit contenir automatiquement tous les utilisateurs du service Commercial. Quel type de groupe ?', reference_cours: 'Section 2 — Groupes dynamiques',
          choix: [
            { id: 'a', texte: 'Groupe de sécurité assigné', correct: false, feedback_si_choisi: 'Un groupe assigné exige une gestion manuelle des membres — pas d\'automatisation basée sur l\'attribut department.' },
            { id: 'b', texte: 'Groupe de sécurité dynamique (règle sur department)', correct: true },
            { id: 'c', texte: 'Microsoft 365 Group assigné', correct: false, feedback_si_choisi: 'Un M365 Group crée un site SharePoint et une boîte partagée — surdimensionné pour un simple ciblage d\'accès.' },
            { id: 'd', texte: 'Unité administrative', correct: false, feedback_si_choisi: 'Une AU sert à déléguer l\'administration, pas à cibler des politiques ou des licences.' }
          ], explication: 'Un groupe dynamique avec règle (user.department -eq "Commercial") maintient automatiquement l\'appartenance à jour. Nécessite Entra ID P1 (inclus dans E3+P2).' },
        { id: 'q3', type: 'single', enonce: 'Vrai ou faux : être Global Administrator (rôle Entra) donne automatiquement les droits Owner sur les souscriptions Azure.', reference_cours: 'Section 3 — Rôles Entra vs RBAC',
          choix: [
            { id: 'a', texte: 'Vrai', correct: false, feedback_si_choisi: 'Deux plans totalement séparés. Global Admin gère l\'annuaire et M365, pas les ressources Azure.' },
            { id: 'b', texte: 'Faux : rôles Entra et RBAC Azure sont deux systèmes séparés', correct: true }
          ], explication: 'C\'est l\'erreur n°1. Les deux plans sont isolés : Global Admin (Entra) ne donne aucun droit sur les VM ; Owner d\'une souscription (RBAC Azure) ne donne aucun pouvoir Entra.' },
        { id: 'q4', type: 'single', enonce: 'Pour donner à une équipe un espace collaboratif avec site SharePoint et boîte partagée, quel objet créez-vous ?', reference_cours: 'Section 2 — M365 Group',
          choix: [
            { id: 'a', texte: 'Un groupe de sécurité', correct: false, feedback_si_choisi: 'Un groupe de sécurité ne crée ni site SharePoint ni boîte partagée. Il sert au ciblage d\'accès.' },
            { id: 'b', texte: 'Un Microsoft 365 Group', correct: true },
            { id: 'c', texte: 'Une unité administrative', correct: false, feedback_si_choisi: 'Une AU est un scope de délégation d\'administration, pas un objet collaboratif.' },
            { id: 'd', texte: 'Un service principal', correct: false, feedback_si_choisi: 'Un SP représente une application, pas un espace de collaboration humaine.' }
          ], explication: 'Un M365 Group crée automatiquement site SharePoint, boîte partagée, et peut être teamifié. Règle : collaboration = M365 Group ; accès = groupe de sécurité.' },
        { id: 'q5', type: 'single', enonce: 'Un script non interactif doit lire l\'annuaire toutes les nuits. Quelle identité ?', reference_cours: 'Section 4 — Service principals',
          choix: [
            { id: 'a', texte: 'Un utilisateur dédié avec mot de passe', correct: false, feedback_si_choisi: 'Utilisateur robot : contourne la MFA, complique le CA, mot de passe partagé et jamais renouvelé. Anti-pattern.' },
            { id: 'b', texte: 'Un service principal (app registration + certificat) ou managed identity', correct: true },
            { id: 'c', texte: 'Le compte Global Admin', correct: false, feedback_si_choisi: 'Partager le Global Admin est un anti-pattern majeur : trop de pouvoir et pas de traçabilité individuelle.' },
            { id: 'd', texte: 'Un M365 Group', correct: false, feedback_si_choisi: 'Un M365 Group est un groupe collaboratif, pas une identité utilisable pour authentifier un script.' }
          ], explication: 'Service principal (avec certificat de préférence, pas secret) ou managed identity si le script tourne sur Azure. Aucun secret exposé côté managed identity.' },
        { id: 'q6', type: 'single', enonce: 'Quelle affirmation sur les groupes dynamiques est correcte ?', reference_cours: 'Section 2 — Contraintes',
          choix: [
            { id: 'a', texte: 'On peut ajouter un membre à la main en complément de la règle', correct: false, feedback_si_choisi: 'Impossible : l\'appartenance est entièrement calculée par la règle. Le type est figé à la création.' },
            { id: 'b', texte: 'L\'appartenance est calculée par la règle ; l\'ajout manuel est impossible', correct: true },
            { id: 'c', texte: 'Ils fonctionnent sans licence', correct: false, feedback_si_choisi: 'Les groupes dynamiques nécessitent Entra ID P1. Sans P1, la règle ne se calcule pas.' },
            { id: 'd', texte: 'Un groupe peut être dynamique-user ET dynamique-device en même temps', correct: false, feedback_si_choisi: 'Un groupe dynamique est soit user, soit device — pas les deux à la fois.' }
          ], explication: 'Le type (assigné/dynamique) et la portée (user/device) sont figés à la création. Pour un ajout manuel ponctuel, prévoir un groupe assigné.' },
        { id: 'q7', type: 'single', enonce: 'Où attribue-t-on le rôle Contributor sur un resource group Azure ?', reference_cours: 'Section 3 — RBAC',
          choix: [
            { id: 'a', texte: 'Entra admin center > Roles & admins', correct: false, feedback_si_choisi: 'Cette console gère les rôles d\'annuaire Entra, pas les rôles RBAC des ressources Azure.' },
            { id: 'b', texte: 'portal.azure.com > (ressource) > Access control (IAM)', correct: true },
            { id: 'c', texte: 'admin.microsoft.com > Roles', correct: false, feedback_si_choisi: 'admin.microsoft.com donne accès à un sous-ensemble simplifié des rôles Entra, sans RBAC Azure.' },
            { id: 'd', texte: 'intune.microsoft.com', correct: false, feedback_si_choisi: 'Intune gère les postes, pas les rôles RBAC sur les ressources Azure.' }
          ], explication: 'RBAC Azure se configure dans le portail Azure, section IAM (Identity and Access Management) de la ressource ciblée. Le scope peut être management group, souscription, resource group ou ressource.' },
        { id: 'q8', type: 'single', enonce: 'Quelle est la différence entre app registration et enterprise application ?', reference_cours: 'Section 4 — Apps',
          choix: [
            { id: 'a', texte: 'Aucune, ce sont des synonymes', correct: false, feedback_si_choisi: 'Ce sont deux objets distincts avec deux rôles bien différents dans Entra.' },
            { id: 'b', texte: 'App registration = définition/blueprint ; enterprise application = instance (SP) dans le tenant', correct: true },
            { id: 'c', texte: 'App registration pour Azure, enterprise app pour M365', correct: false, feedback_si_choisi: 'La distinction n\'est pas Azure vs M365. Une même app peut avoir les deux (définition + instance).' },
            { id: 'd', texte: 'L\'enterprise application est une licence', correct: false, feedback_si_choisi: 'Ce n\'est pas une licence mais un objet d\'annuaire représentant l\'instance d\'une app.' }
          ], explication: 'App registration = le « modèle » ; enterprise application = l\'instance (avec son service principal) dans votre tenant. Une app tierce peut n\'avoir qu\'une enterprise application (venue de la galerie), sans app registration locale.' },
        { id: 'q9', type: 'single', enonce: 'SCIM sert principalement à :', reference_cours: 'Section 5 — Provisioning',
          choix: [
            { id: 'a', texte: 'Authentifier les utilisateurs (SSO)', correct: false, feedback_si_choisi: 'SSO = authentification. SCIM = provisioning. Deux réglages distincts d\'une même enterprise application.' },
            { id: 'b', texte: 'Provisionner/déprovisionner automatiquement les comptes dans une app SaaS', correct: true },
            { id: 'c', texte: 'Chiffrer les mots de passe', correct: false, feedback_si_choisi: 'SCIM est un protocole de gestion du cycle de vie des identités, pas de chiffrement.' },
            { id: 'd', texte: 'Remplacer le DNS', correct: false, feedback_si_choisi: 'Aucun rapport avec le DNS. SCIM est un protocole d\'API pour créer/mettre à jour les comptes dans les apps SaaS.' }
          ], explication: 'SCIM automatise le cycle de vie : quand l\'utilisateur rejoint un groupe, son compte est créé côté app. Quand il quitte, le compte est désactivé.' },
        { id: 'q10', type: 'single', enonce: 'Un compte est synchronisé depuis l\'AD on-prem. Où corrigez-vous son department ?', reference_cours: 'Section 1 + Piège 5',
          choix: [
            { id: 'a', texte: 'Dans Entra admin center', correct: false, feedback_si_choisi: 'Pour un compte synchronisé, la modif dans Entra sera écrasée au prochain cycle. L\'AD reste maître.' },
            { id: 'b', texte: 'Dans l\'AD DS on-premise (source de vérité)', correct: true },
            { id: 'c', texte: 'Dans Intune', correct: false, feedback_si_choisi: 'Intune gère les postes/appareils, pas les attributs d\'annuaire utilisateur.' },
            { id: 'd', texte: 'Dans SharePoint', correct: false, feedback_si_choisi: 'SharePoint consomme les attributs Entra mais ne les gère pas.' }
          ], explication: 'Règle de la source de vérité : pour un objet synchronisé, l\'AD DS est maître. Vérifier onPremisesSyncEnabled avant toute modification.' }
      ]
    };
  </script>
  <script src="assets/shared.js"></script>

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