{"id":1260,"date":"2026-11-01T07:03:35","date_gmt":"2026-11-01T07:03:35","guid":{"rendered":"https:\/\/www.devopsschool.com\/tutorials\/?p=1260"},"modified":"2026-11-01T07:07:19","modified_gmt":"2026-11-01T07:07:19","slug":"microsoft-sentinel-foundations-one-complete-end-to-end-hands-on-lab","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/tutorials\/microsoft-sentinel-foundations-one-complete-end-to-end-hands-on-lab\/","title":{"rendered":"Microsoft Sentinel Foundations: One Complete End-to-End Hands-On Lab &#8211; Part &#8211; 1"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Student workbook + instructor validation and answer key | Days 1-2 | 2026-11-01 edition<\/strong><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>One lab, one continuous story:<\/strong>&nbsp;Build a Microsoft Sentinel environment, connect Azure Activity logs, make a harmless Azure configuration change, prove that the event reaches the&nbsp;<code>AzureActivity<\/code>&nbsp;table, investigate it using KQL, turn a tested query into a temporary scheduled detection, find its actual alert and incident, complete a first-line SOC triage record, visualize the data with a workbook, and clean up safely.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Primary interface:<\/strong>&nbsp;Microsoft Defender portal (<code>https:\/\/security.microsoft.com<\/code>), with Azure portal (<code>https:\/\/portal.azure.com<\/code>) for initial Azure resources and subscription-level activity-log configuration. This matches Microsoft&#8217;s current direction for Sentinel. [MS01] [MS02]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>This is a Foundation lab, not a red-team exercise.<\/strong>&nbsp;Do not attack resources, intentionally compromise identities, turn on disruptive automations, export real secrets, or run changes in production.&nbsp;<strong>Never equate a saved rule or KQL simulation with a genuine alert or incident.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1. The outcome: what a successful student can demonstrate<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">At the end, you should be able to&nbsp;<em>show evidence<\/em>, not simply explain terminology:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A named, approved Azure subscription and its access boundaries.<\/li>\n\n\n\n<li>A Log Analytics workspace with Microsoft Sentinel enabled and visible in the Defender portal.<\/li>\n\n\n\n<li>The Azure Activity solution and a documented, working route from the source subscription to that workspace.<\/li>\n\n\n\n<li>A harmless resource-group write visible in the\u00a0<strong>source Azure Activity log<\/strong>\u00a0and in the\u00a0<strong>destination\u00a0<code>AzureActivity<\/code>\u00a0table<\/strong>.<\/li>\n\n\n\n<li>A working KQL query that isolates the test event, displays a timestamp and identifies the actor\/resource.<\/li>\n\n\n\n<li>A temporary enabled scheduled analytics rule with verified settings and minimal alert noise.<\/li>\n\n\n\n<li>A\u00a0<strong>real generated alert<\/strong>\u00a0and a\u00a0<strong>real incident<\/strong>\u00a0containing that alert (or clearly recorded environment blocker).<\/li>\n\n\n\n<li>An incident investigation report with disposition, evidence, owner, and escalation rationale.<\/li>\n\n\n\n<li>A relevant Azure Activity workbook interpreted correctly.<\/li>\n\n\n\n<li>Cleanup evidence showing that the test rule is disabled\/removed and lab resources are handled safely.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Foundation qualification:<\/strong>&nbsp;Complete the entire evidence chain and meet the rubric in Section 16. Installing Sentinel or obtaining a screenshot of the portal alone does&nbsp;<strong>not<\/strong>&nbsp;constitute a pass.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Where this lab fits in the five-day program<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Previous teaching<\/th><th class=\"has-text-align-left\" data-align=\"left\">This continuous workflow practices<\/th><th class=\"has-text-align-left\" data-align=\"left\">Reserved for later days<\/th><\/tr><\/thead><tbody><tr><td>F01-F12, Day 1<\/td><td>SOC context, architecture, roles, workspace, data connector<\/td><td>Advanced source onboarding and DCRs (Day 3)<\/td><\/tr><tr><td>F13-F23, Day 2<\/td><td>KQL, content, rule, alert, incident, triage, workbook, troubleshooting<\/td><td>Multi-table correlation\/UEBA (Day 3); ASIM\/SOAR (Day 4); enterprise CI\/CD\/data lake (Day 5)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This manual intentionally uses&nbsp;<strong>one connected exercise<\/strong>, instead of repeating the 17 individual practice labs in the more detailed Day 1-2 workbook.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. 5W1H: understand what you will build before clicking<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Question<\/th><th class=\"has-text-align-left\" data-align=\"left\">Foundation-level answer<\/th><\/tr><\/thead><tbody><tr><td><strong>What?<\/strong><\/td><td>Microsoft Sentinel is a SIEM capability that collects security telemetry and supports detection, investigation, and response.<\/td><\/tr><tr><td><strong>Why?<\/strong><\/td><td>An isolated activity record is difficult for a SOC to investigate consistently; centralized logs, rules, and incidents create a repeatable trail.<\/td><\/tr><tr><td><strong>Who?<\/strong><\/td><td>The Azure\/platform administrator authorizes data collection; the security engineer configures Sentinel; the SOC analyst investigates alerts; the instructor approves training changes.<\/td><\/tr><tr><td><strong>When?<\/strong><\/td><td>Use the workflow when an approved activity needs visibility, detection, triage, and documented resolution.<\/td><\/tr><tr><td><strong>Where?<\/strong><\/td><td>Azure control-plane events originate in the subscription, flow to a Log Analytics workspace, and are examined in Microsoft Sentinel through the Defender portal.<\/td><\/tr><tr><td><strong>How?<\/strong><\/td><td>Source event -&gt; approved diagnostic export\/policy -&gt;&nbsp;<code>AzureActivity<\/code>&nbsp;-&gt; KQL -&gt; scheduled analytics rule -&gt; alert -&gt; Defender incident -&gt; SOC triage -&gt; workbook.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">The architecture you will prove<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">Approved student action: change a tag on a test resource groupAzure subscription Activity logAzure Activity connector configuration: policy or diagnostic exportLog Analytics workspace: AzureActivity tableMicrosoft Sentinel analytics rule: scheduled KQLSecurity alertMicrosoft Defender incident queueAnalyst triage, evidence, classificationAzure Activity workbook<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Important boundaries:<\/strong>&nbsp;Creating a resource-group tag is not a cyberattack. For this lab, the detection identifies&nbsp;<em>authorized training activity<\/em>&nbsp;and must be labeled as such; it must&nbsp;<strong>never<\/strong>&nbsp;be marketed as a high-fidelity threat detection. A scheduled rule may raise an alert without proving an actual security incident.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3. Choose a delivery mode and establish safety controls<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 Three supported classroom modes<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Mode<\/th><th class=\"has-text-align-left\" data-align=\"left\">What the instructor prepares<\/th><th class=\"has-text-align-left\" data-align=\"left\">What the learner can pass<\/th><\/tr><\/thead><tbody><tr><td><strong>A &#8211; Full build (preferred)<\/strong><\/td><td>Dedicated non-production Azure subscription or approved sandbox, rights to provision workspace, export subscription activity, and configure Sentinel<\/td><td>All ten outcomes<\/td><\/tr><tr><td><strong>B &#8211; Instructor-managed collection<\/strong><\/td><td>Prebuilt Sentinel workspace and Azure Activity export; learner may edit a dedicated signal resource group and create a temporary rule<\/td><td>End-to-end event-to-incident workflow without repeating administrative provisioning<\/td><\/tr><tr><td><strong>C &#8211; Read-only \/ offline<\/strong><\/td><td>Screenshots and synthetic&nbsp;<code>datatable()<\/code>&nbsp;examples, optionally a read-only Sentinel workspace<\/td><td>Concepts and KQL only;&nbsp;<strong>cannot<\/strong>&nbsp;claim to have created a real alert or incident<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If an approval, permission, subscription, billing entitlement, or data-collection requirement fails, select Mode B or C and label the blocked checkpoint. Do&nbsp;<strong>not<\/strong>&nbsp;grant students broad permissions only to make a lab appear successful.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.2 Minimum preparation and role separation<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Activity<\/th><th class=\"has-text-align-left\" data-align=\"left\">Typical required access or approval<\/th><th class=\"has-text-align-left\" data-align=\"left\">Responsible party<\/th><\/tr><\/thead><tbody><tr><td>Create a resource group \/ workspace<\/td><td>Azure subscription or resource-group write permission; enabling Sentinel requires subscription Contributor-equivalent permission<\/td><td>Instructor\/platform admin<\/td><\/tr><tr><td>Use Sentinel and view logs<\/td><td>Microsoft Sentinel Reader or appropriate Log Analytics read permissions<\/td><td>Student or instructor<\/td><\/tr><tr><td>Install Content hub solution \/ author analytics rule<\/td><td>Microsoft Sentinel Contributor on workspace resource group<\/td><td>Instructor\/security engineer or delegated student<\/td><\/tr><tr><td>Manage the incident<\/td><td>Microsoft Sentinel Responder (or Contributor) and any relevant Defender unified incident permissions<\/td><td>SOC student<\/td><\/tr><tr><td>Configure Azure Activity export<\/td><td>Subscription-level diagnostic setting or Azure Policy assignment permission; assignment\/managed-identity remediation may need additional rights<\/td><td>Subscription\/policy owner<\/td><\/tr><tr><td>Use or save workbooks<\/td><td>Workbook Reader \/ Workbook Contributor and relevant Sentinel rights<\/td><td>Student\/instructor<\/td><\/tr><tr><td>Connect workspace to Defender if not already connected<\/td><td>Additional onboarding permission requirements in Microsoft documentation; instructor should perform it if not already onboarded<\/td><td>Tenant\/subscription administrator<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Microsoft&#8217;s permissions are task-specific.<\/strong>&nbsp;A Sentinel Contributor assignment does not automatically authorize every subscription-level Azure Policy change, and a Sentinel Reader cannot manage incidents. Review the exact role scope before starting. [MS01] [MS03] [MS04]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.3 Preflight requirements &#8211; instructor checks<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] A\u00a0<strong>non-production<\/strong>\u00a0training subscription exists; its subscription ID, tenant, and billing owner are documented.<\/li>\n\n\n\n<li>[ ] There is an approved Azure region and naming pattern; no sensitive customer data is needed.<\/li>\n\n\n\n<li>[ ] Learner identities have approved scopes, not unnecessarily broad Owner rights.<\/li>\n\n\n\n<li>[ ] The instructor has a plan for Azure Activity export:\u00a0<strong>existing approved export<\/strong>,\u00a0<strong>Azure Policy wizard<\/strong>, or\u00a0<strong>direct subscription diagnostic setting<\/strong>. Avoid creating duplicate exports of the same categories to the same workspace.<\/li>\n\n\n\n<li>[ ] The sandbox has approval for potential Sentinel\/Log Analytics and other service charges. Azure Activity ingestion has specific no-ingestion-charge guidance, but this does\u00a0<strong>not<\/strong>\u00a0mean every Sentinel or lab component is free. Confirm pricing for the selected plan. [MS05] [MS06]<\/li>\n\n\n\n<li>[ ] The instructor has confirmed which incident experience is available:\u00a0<strong>Incidents<\/strong>\u00a0or the preview\u00a0<strong>Cases > Incident<\/strong>. [MS10] [MS11]<\/li>\n\n\n\n<li>[ ] The instructor has approved cleanup ownership and whether the lab workspace will be retained for subsequent training.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Safety stop:<\/strong>&nbsp;If any requested change affects a shared production diagnostic setting, permission assignment, data-retention policy, or real customer incident,&nbsp;<strong>do not perform that step<\/strong>. Ask the instructor to complete it or provide a safe sandbox artifact.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.4 Student fill-in sheet &#8211; use actual values<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Parameter<\/th><th class=\"has-text-align-left\" data-align=\"left\">Your value<\/th><\/tr><\/thead><tbody><tr><td>Cohort and student ID<\/td><td><code>________________<\/code><\/td><\/tr><tr><td>Training tenant\/domain (non-sensitive label)<\/td><td><code>________________<\/code><\/td><\/tr><tr><td>Approved subscription ID<\/td><td><code>________________<\/code><\/td><\/tr><tr><td>Workspace resource group<\/td><td><code>rg-sentinel-foundation-________<\/code><\/td><\/tr><tr><td>Log Analytics workspace<\/td><td><code>law-sentinel-foundation-________<\/code><\/td><\/tr><tr><td>Workspace region<\/td><td><code>________________<\/code><\/td><\/tr><tr><td>Approved signal resource group<\/td><td><code>rg-sentinel-signal-________<\/code><\/td><\/tr><tr><td>Activity-export method<\/td><td>Existing \/ Azure Policy \/ Diagnostic setting<\/td><\/tr><tr><td>Activity-export policy or setting name<\/td><td><code>________________<\/code><\/td><\/tr><tr><td>Detection rule name<\/td><td><code>LAB-FOUNDATION-________-RG-WRITE<\/code><\/td><\/tr><tr><td>Student&#8217;s incident owner\/assigned analyst<\/td><td><code>________________<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Naming: replace the underscores with a short&nbsp;<strong>unique<\/strong>, cloud-valid suffix. Use the&nbsp;<strong>same exact names<\/strong>&nbsp;in screenshots and queries. Do not type the placeholder values unchanged into production.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">DAY 1 &#8211; Build and prove the telemetry path<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Phase 1 &#8211; Verify the subscription and the lab scope<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Goal:<\/strong>&nbsp;Know where you are and what you may change.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Sign in to\u00a0<code>https:\/\/portal.azure.com<\/code>\u00a0with the instructor-approved user.<\/li>\n\n\n\n<li>Search for\u00a0<strong>Subscriptions<\/strong>. Open the subscription authorized for this lab.<\/li>\n\n\n\n<li>Copy the\u00a0<strong>Subscription ID<\/strong>\u00a0into the student sheet. Record its display name without exposing unnecessary organizational details.<\/li>\n\n\n\n<li>Confirm the selected\u00a0<strong>Directory + subscription<\/strong>\u00a0filter shows the intended tenant\/subscription. If multiple subscriptions are visible, switch to the approved one.<\/li>\n\n\n\n<li>In\u00a0<strong>Access control (IAM)<\/strong>, ask the instructor to verify that your assignment permits the operations you will perform. Do not try random role changes to fix permission failures.<\/li>\n\n\n\n<li>Agree on the approved region, the workspace RG, and a\u00a0<strong>different<\/strong>\u00a0resource group used to generate test activity.<\/li>\n\n\n\n<li>In\u00a0<strong>Cost Management + Billing<\/strong>\u00a0or the instructor&#8217;s approved budget view, record the allowed lab spend and who will review it.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PASS checkpoint P01:<\/strong>&nbsp;Correct subscription\/tenant, permissions, workspace location, and a cost\/cleanup owner recorded. Save&nbsp;<code>P01-subscription-scope.png<\/code>&nbsp;(hide subscription IDs if materials will be shared externally).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Why it matters:<\/strong>&nbsp;A valid query against the wrong tenant or workspace can return nothing. A subscription-scope export configured against the wrong subscription cannot transport your test event.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Phase 2 &#8211; Create or verify a Log Analytics workspace<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>If the instructor supplied a workspace:<\/strong>&nbsp;Open it, confirm its subscription, resource group and region, and go to Phase 3. Do not create a duplicate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Full-build route:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In Azure portal search for\u00a0<strong>Log Analytics workspaces<\/strong>\u00a0and select\u00a0<strong>Create<\/strong>.<\/li>\n\n\n\n<li>Select the approved\u00a0<strong>subscription<\/strong>.<\/li>\n\n\n\n<li>Select the designated workspace resource group, or\u00a0<strong>Create new<\/strong>\u00a0if authorized.<\/li>\n\n\n\n<li>Enter your unique\u00a0<strong>workspace name<\/strong>\u00a0such as\u00a0<code>law-sentinel-foundation-s01<\/code>.<\/li>\n\n\n\n<li>Select the instructor-approved\u00a0<strong>region<\/strong>; do not guess a region merely because it appears in a sample screenshot.<\/li>\n\n\n\n<li>Review pricing, data residency and retention implications. Do not activate optional products or unapproved long-term retention.<\/li>\n\n\n\n<li>Select\u00a0<strong>Review + Create<\/strong>, wait for validation, then\u00a0<strong>Create<\/strong>.<\/li>\n\n\n\n<li>Open the workspace. Record\u00a0<strong>Name<\/strong>,\u00a0<strong>Resource group<\/strong>,\u00a0<strong>Region<\/strong>, and\u00a0<strong>Subscription<\/strong>\u00a0from the Overview screen.<\/li>\n\n\n\n<li>Check whether Sentinel was already enabled on it. If yes, record and continue; do not try to onboard the same workspace twice.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PASS P02:<\/strong>&nbsp;The exact intended Log Analytics workspace exists, is accessible, and its metadata is recorded. Save&nbsp;<code>P02-workspace-overview.png<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Common problem:<\/strong>&nbsp;The workspace does not appear in the Sentinel onboarding picker. Check subscription filter, workspace eligibility and permissions; default Defender for Cloud workspaces have restrictions for Sentinel onboarding. [MS01]<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Phase 3 &#8211; Enable Microsoft Sentinel and confirm Defender portal visibility<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In\u00a0<strong>Azure portal<\/strong>, search for\u00a0<strong>Microsoft Sentinel<\/strong>.<\/li>\n\n\n\n<li>Choose\u00a0<strong>Create<\/strong>, select the intended\u00a0<strong>Log Analytics workspace<\/strong>, and choose\u00a0<strong>Add<\/strong>. If Sentinel is already enabled,\u00a0<strong>do not repeat<\/strong>\u00a0the action.<\/li>\n\n\n\n<li>Open\u00a0<code>https:\/\/security.microsoft.com<\/code>\u00a0and let initial portal provisioning finish if prompted.<\/li>\n\n\n\n<li>Expand\u00a0<strong>Microsoft Sentinel<\/strong>\u00a0in the navigation. Confirm the workspace is available under\u00a0<strong>System \/ Settings > Microsoft Sentinel > Workspaces<\/strong>\u00a0(exact menu grouping may vary).<\/li>\n\n\n\n<li>If no workspace is connected, have the instructor\/onboarding owner follow\u00a0<strong>Settings > Microsoft Sentinel > Connect a workspace<\/strong>, select the appropriate workspace and primary workspace, review the connection effects, then\u00a0<strong>Connect<\/strong>. This is not a task for a student lacking onboarding rights. [MS02]<\/li>\n\n\n\n<li>Record whether this tenant uses a standard incident queue or incident-cases preview. Do not enable preview features just to match this manual.<\/li>\n\n\n\n<li>Confirm you can access\u00a0<strong>Microsoft Sentinel > Configuration > Data connectors<\/strong>,\u00a0<strong>Configuration > Analytics<\/strong>, and the hunting\/logs query interface, even if some operations are read-only.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PASS P03:<\/strong>&nbsp;You can point to&nbsp;<strong>the correct Sentinel-enabled workspace<\/strong>&nbsp;from the Defender portal, and your access level is known. Save&nbsp;<code>P03-defender-workspace.png<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Know the distinction:<\/strong>&nbsp;<strong>Log Analytics<\/strong>&nbsp;is the data\/query workspace;&nbsp;<strong>Sentinel<\/strong>&nbsp;adds SIEM capabilities;&nbsp;<strong>Defender portal<\/strong>&nbsp;is the current unified analyst experience. A workspace being created does not itself prove that it is receiving activity logs. [MS01] [MS02]<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Phase 4 &#8211; Install the Azure Activity content and configure an export route<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step A &#8211; Content hub<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In Defender portal expand\u00a0<strong>Microsoft Sentinel<\/strong>\u00a0and open\u00a0<strong>Content hub<\/strong>\u00a0(use portal search if your navigation differs).<\/li>\n\n\n\n<li>Search for\u00a0<strong>Azure Activity<\/strong>.<\/li>\n\n\n\n<li>Open the solution, review its connectors\/rule templates\/workbooks and dependencies.<\/li>\n\n\n\n<li>Select\u00a0<strong>Install<\/strong>\u00a0if not already installed. Wait for it to show as installed.<\/li>\n\n\n\n<li>Open\u00a0<strong>Microsoft Sentinel > Configuration > Data connectors<\/strong>.<\/li>\n\n\n\n<li>Find\u00a0<strong>Azure Activity<\/strong>, then\u00a0<strong>Open connector page<\/strong>.<\/li>\n\n\n\n<li>Read its prerequisites, data type (<code>AzureActivity<\/code>) and configuration status.\u00a0<strong>Connected<\/strong>\u00a0is useful information but not proof of a particular event reaching the table.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step B &#8211; Choose exactly one approved export method<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Method 1 &#8211; existing instructor-approved export (best for shared classrooms):<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In Azure portal open the approved\u00a0<strong>subscription > Activity log > Export Activity Logs<\/strong>, or have the admin show its relevant Azure Policy assignment.<\/li>\n\n\n\n<li>Confirm Administrative events (at minimum) are sent to the\u00a0<strong>correct<\/strong>\u00a0Log Analytics workspace.<\/li>\n\n\n\n<li>Record the existing setting\/policy name, destination workspace and owner. Do not modify it.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Method 2 &#8211; Azure Activity connector&#8217;s Azure Policy wizard (Microsoft quickstart route):<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>From\u00a0<strong>Azure Activity > Open connector page<\/strong>, select\u00a0<strong>Launch Azure Policy Assignment Wizard<\/strong>.<\/li>\n\n\n\n<li>Under\u00a0<strong>Basics<\/strong>, choose only the instructor-approved subscription scope; do not select an entire management group or unrelated subscriptions.<\/li>\n\n\n\n<li>Under\u00a0<strong>Parameters<\/strong>, choose the\u00a0<strong>Primary Log Analytics workspace<\/strong>\u00a0that contains your Sentinel instance.<\/li>\n\n\n\n<li>With the policy owner, review the policy effect, assigned identity (if presented), permissions\/remediation requirements, and target subscription. Resolve permission failures with the owner, not elevated student privileges.<\/li>\n\n\n\n<li>Select\u00a0<strong>Review + create > Create<\/strong>\u00a0after explicit approval.<\/li>\n\n\n\n<li>Record the assignment identifier and review it under\u00a0<strong>Azure Policy > Assignments<\/strong>. Allow time for the policy\/diagnostic configuration to take effect. [MS01]<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Method 3 &#8211; direct subscription diagnostic setting (only when approved):<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In Azure portal open\u00a0<strong>Monitor > Activity log > Export Activity Logs<\/strong>\u00a0for your approved subscription.<\/li>\n\n\n\n<li>Select\u00a0<strong>Add diagnostic setting<\/strong>.<\/li>\n\n\n\n<li>Name it clearly, for example\u00a0<code>diag-sentinel-foundation-s01<\/code>.<\/li>\n\n\n\n<li>Select the\u00a0<strong>Administrative<\/strong>\u00a0category. Add other categories only if they are approved for the lab.<\/li>\n\n\n\n<li>Under\u00a0<strong>Destination details<\/strong>, choose\u00a0<strong>Send to Log Analytics workspace<\/strong>, then the approved subscription and workspace.<\/li>\n\n\n\n<li>Verify all four before saving:\u00a0<strong>source subscription, categories, destination workspace, setting name<\/strong>.<\/li>\n\n\n\n<li>Select\u00a0<strong>Save<\/strong>, record the name, and check that you have not introduced a duplicate route. [MS05] [MS06]<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Do not configure Methods 2 and 3 in parallel for the same source\/destination unless the instructor deliberately designed that topology.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PASS P04:<\/strong>&nbsp;Azure Activity solution present; documented export configuration targets the correct workspace; Administrative category is covered; owner and cleanup responsibility recorded. Save&nbsp;<code>P04-activity-connector.png<\/code>&nbsp;and, if authorized, an export configuration screenshot.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What you have and have not proved<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You have verified the\u00a0<strong>configuration<\/strong>\u00a0of collection.<\/li>\n\n\n\n<li>You have\u00a0<strong>not<\/strong>\u00a0yet proved that an actual event traveled through it. That happens in Phase 5.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Phase 5 &#8211; Produce a harmless, traceable event<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Scenario:<\/strong>&nbsp;Aster Retail (fictional company) is validating whether SOC analysts can see Azure administrative changes. You are a platform engineer making an approved change to a sandbox resource group. The SOC should observe and explain it.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In Azure portal, go to\u00a0<strong>Resource groups > Create<\/strong>.<\/li>\n\n\n\n<li>Create a\u00a0<strong>new, empty<\/strong>\u00a0group named with your approved signal identifier, such as\u00a0<code>rg-sentinel-signal-s01<\/code>, in the approved subscription and region. Keep it empty; do\u00a0<strong>not<\/strong>\u00a0deploy VMs, storage accounts or paid services.<\/li>\n\n\n\n<li>After creation, open that resource group and select\u00a0<strong>Tags<\/strong>.<\/li>\n\n\n\n<li>Add a harmless tag:\u00a0<strong>Name<\/strong>\u00a0<code>sentinelTraining<\/code>;\u00a0<strong>Value<\/strong>\u00a0<code>foundation-day1<\/code>. Save. Do not modify access, networking, policies, secrets, or production resources.<\/li>\n\n\n\n<li>In the approved subscription open\u00a0<strong>Activity log<\/strong>. Filter by the test resource group, recent timeframe and Administrative operations if needed.<\/li>\n\n\n\n<li>Find a successful resource-group\u00a0<strong>create\/update\/write<\/strong>\u00a0event. Record its\u00a0<strong>operation name<\/strong>,\u00a0<strong>time (UTC)<\/strong>,\u00a0<strong>actor<\/strong>\u00a0and\u00a0<strong>resource identifier<\/strong>. The portal&#8217;s text and case can vary.<\/li>\n\n\n\n<li>If you do not see it immediately, widen the time filter and inspect a recent Activity log without the group filter. If it still does not exist at the source, do not proceed to the destination and falsely claim collection is working.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PASS P05:<\/strong>&nbsp;You have a real source-side activity record for a change&nbsp;<strong>you performed<\/strong>&nbsp;on the test resource group. Save&nbsp;<code>P05-source-activity-log.png<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Why this is the right first signal:<\/strong>&nbsp;Azure Activity captures control-plane changes such as resource creation and update. A safe tag change demonstrates the flow without simulating a malicious compromise. [MS05] [MS13]<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Phase 6 &#8211; Prove delivery to the destination workspace using KQL<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step A &#8211; Access the correct logs query surface<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the\u00a0<strong>Azure Activity connector<\/strong>\u00a0in Defender and choose its\u00a0<strong>Go to log analytics<\/strong>\u00a0path if available; this opens the relevant hunting\/query experience. Otherwise open\u00a0<strong>Investigation &amp; response > Hunting > Advanced hunting<\/strong>\u00a0and select the correct workspace data scope.<\/li>\n\n\n\n<li>The same raw workspace query can also be run from\u00a0<strong>Azure portal > Log Analytics workspace > Logs<\/strong>. Use the latter when a query in Defender is not pointed at the intended workspace.<\/li>\n\n\n\n<li>Set a time window broad enough for the exercise, such as\u00a0<strong>last 24 hours<\/strong>. Note that the UI&#8217;s time selector and KQL&#8217;s\u00a0<code>ago()<\/code>\u00a0filter can both constrain results.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step B &#8211; Confirm that records exist<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>AzureActivity\n| where TimeGenerated &gt;= ago(24h)\n| summarize EventCount = count(), LatestEvent = max(TimeGenerated)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Expected:<\/strong>&nbsp;<code>EventCount<\/code>&nbsp;greater than zero if this workspace has received Azure Activity records. If zero, see the troubleshooting ladder. A count above zero could still be&nbsp;<strong>someone else&#8217;s event<\/strong>, so it does not complete the lab.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step C &#8211; Inspect exact fields and the test group<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Run this more permissive query first,&nbsp;<strong>replacing both quoted values<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let labSubscription = \"REPLACE_WITH_YOUR_SUBSCRIPTION_ID\";\nlet labResourceGroup = \"rg-sentinel-signal-s01\";\nAzureActivity\n| where TimeGenerated &gt;= ago(24h)\n| where SubscriptionId =~ labSubscription\n| where ResourceId contains labResourceGroup or ResourceGroup contains labResourceGroup\n| project TimeGenerated, Caller, CategoryValue, ResourceId, ResourceGroup,\n          OperationNameValue, ActivityStatusValue, CorrelationId, SubscriptionId\n| sort by TimeGenerated desc\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Expected:<\/strong>&nbsp;A record containing the test group name that matches the actor, subscription, and approximate event time from Phase 5.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Important:<\/strong>&nbsp;Microsoft warns that Azure Activity fields can differ in casing. The query deliberately uses case-insensitive operations (<code>=~<\/code>&nbsp;and&nbsp;<code>contains<\/code>). [MS05] [MS07]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step D &#8211; Isolate the resource-group write operation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This is the detection candidate.&nbsp;<strong>Do not use it until Step C returns the expected row.<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let labSubscription = \"REPLACE_WITH_YOUR_SUBSCRIPTION_ID\";\nlet labResourceGroup = \"rg-sentinel-signal-s01\";\nAzureActivity\n| where TimeGenerated &gt;= ago(2h)\n| where SubscriptionId =~ labSubscription\n| where CategoryValue =~ \"Administrative\"\n| where OperationNameValue contains \"resourcegroups\/write\"\n| where ResourceId contains labResourceGroup or ResourceGroup contains labResourceGroup\n| project TimeGenerated, Caller, ResourceId, ResourceGroup,\n          OperationNameValue, ActivityStatusValue, CorrelationId, SubscriptionId\n| sort by TimeGenerated desc\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If the source event&#8217;s&nbsp;<strong>actual<\/strong>&nbsp;<code>OperationNameValue<\/code>&nbsp;differs, use the value observed in Step C rather than assuming a generic operation name. Keep the resource-group and subscription filters so the query cannot match unrelated production activity.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step E &#8211; Explain the result as a SOC analyst<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For your&nbsp;<strong>best matching row<\/strong>, write down:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>TimeGenerated<\/code>\u00a0(UTC):\u00a0<code>________________<\/code><\/li>\n\n\n\n<li><code>Caller<\/code>:\u00a0<code>________________<\/code><\/li>\n\n\n\n<li><code>ResourceId<\/code>:\u00a0<code>________________<\/code><\/li>\n\n\n\n<li><code>OperationNameValue<\/code>:\u00a0<code>________________<\/code><\/li>\n\n\n\n<li><code>ActivityStatusValue<\/code>:\u00a0<code>________________<\/code><\/li>\n\n\n\n<li><code>CorrelationId<\/code>\u00a0(if present):\u00a0<code>________________<\/code><\/li>\n\n\n\n<li>Is this\u00a0<strong>your approved lab action<\/strong>? Why?\u00a0<code>________________<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PASS P06:<\/strong>&nbsp;<code>AzureActivity<\/code>&nbsp;contains the same authorized operation as the source Activity log; the detection candidate returns at least one appropriate record; student explains what each selected field means. Save&nbsp;<code>P06-kql-proof.png<\/code>&nbsp;and the exact successful query text.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Do not continue<\/strong>&nbsp;if your query returns no matching record: a detection that cannot match a signal cannot reliably prove the rule-to-incident workflow.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Optional offline KQL mini-exercise (does NOT count as real ingestion)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When access is blocked, this query helps learners practice a pipeline&nbsp;<strong>inside the query engine<\/strong>&nbsp;without ingesting anything:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>datatable(TimeGenerated:datetime, Actor:string, Operation:string, Lab:string)\n&#91;\n  datetime(2026-10-01T09:00:00Z), \"student01\", \"resourcegroups\/write\", \"foundation\",\n  datetime(2026-10-01T09:10:00Z), \"student02\", \"resourcegroups\/read\",  \"foundation\",\n  datetime(2026-10-01T09:20:00Z), \"student01\", \"resourcegroups\/write\", \"foundation\"\n]\n| where Operation contains \"write\"\n| summarize Changes=count() by Actor\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Expected:<\/strong>&nbsp;<code>student01<\/code>&nbsp;has 2 matching writes. This demonstrates&nbsp;<code>where<\/code>&nbsp;and&nbsp;<code>summarize<\/code>. It produces&nbsp;<strong>no ingested security telemetry, no scheduled alert and no actual incident<\/strong>. Never use this synthetic query as the sole proof of a live detection.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Day 1 sign-off<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] P01 subscription and scope verified.<\/li>\n\n\n\n<li>[ ] P02 approved Log Analytics workspace verified.<\/li>\n\n\n\n<li>[ ] P03 Sentinel enabled and Defender portal available.<\/li>\n\n\n\n<li>[ ] P04 Azure Activity collection configuration verified.<\/li>\n\n\n\n<li>[ ] P05 test change visible at the source.<\/li>\n\n\n\n<li>[ ] P06 matching\u00a0<code>AzureActivity<\/code>\u00a0row visible in destination.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Day 1 stopping rule:<\/strong>&nbsp;Without P06, the learner does not proceed to the detection phase until the collection issue is fixed or the instructor supplies a prevalidated workspace.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">DAY 2 &#8211; From real telemetry to an investigated incident<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Phase 7 &#8211; Analyze the event like a first-line SOC analyst<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Goal:<\/strong>&nbsp;Turn raw log evidence into an explainable finding before attempting an alert.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Run the Phase 6 query and sort descending by time.<\/li>\n\n\n\n<li>Identify whether multiple records belong to the same logical operation (for example start and success states). Do not call two records two separate attacks.<\/li>\n\n\n\n<li>Run this summary query:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>let labResourceGroup = \"rg-sentinel-signal-s01\";\nAzureActivity\n| where TimeGenerated &gt;= ago(24h)\n| where ResourceId contains labResourceGroup or ResourceGroup contains labResourceGroup\n| summarize Operations=count(), LatestEvent=max(TimeGenerated)\n  by OperationNameValue, ActivityStatusValue\n| sort by Operations desc\n<\/code><\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Answer these questions: Which event was expected? Who initiated it? Which resource was changed? Was it successful? What additional evidence would you seek before treating it as suspicious?<\/li>\n\n\n\n<li>Record\u00a0<strong>a short analyst narrative<\/strong>: &#8220;A resource group was modified by [actor] at [UTC time]. The change was [authorized\/unverified]. Evidence: [Activity log + KQL rows]. Next action: [close as training \/ escalate for authorization check].&#8221;<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PASS P07:<\/strong>&nbsp;A reproducible KQL summary, accurate reading of the source event, and no unsupported claim that the authorized action is an attack.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Phase 8 &#8211; Discover built-in detection content (and understand the limitation)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Foundation syllabus includes&nbsp;<strong>rule templates<\/strong>. Explore them here, but use Phase 9&#8217;s controlled rule to prove the whole workflow.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In Defender portal open\u00a0<strong>Microsoft Sentinel > Content hub<\/strong>\u00a0and locate the installed\u00a0<strong>Azure Activity<\/strong>\u00a0solution.<\/li>\n\n\n\n<li>Look for the documented\u00a0<strong>Suspicious Resource deployment<\/strong>\u00a0template (availability depends on installed solution\/version).<\/li>\n\n\n\n<li>Read its prerequisites, query\/table dependencies, threshold and intended threat scenario.<\/li>\n\n\n\n<li>If the instructor approved enabling it in a sandbox, choose\u00a0<strong>Create rule<\/strong>\u00a0from the template, confirm its data prerequisites, and review all settings. If not, perform a read-only walkthrough.<\/li>\n\n\n\n<li>Compare that built-in rule with the training query: the built-in rule seeks a security-relevant pattern, whereas this lab&#8217;s custom rule intentionally detects\u00a0<em>one authorized group change<\/em>.<\/li>\n\n\n\n<li>Record whether it was\u00a0<strong>only inspected<\/strong>,\u00a0<strong>created but disabled<\/strong>, or\u00a0<strong>enabled<\/strong>. Disable any temporary rule that is noisy or unrelated.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PASS P08:<\/strong>&nbsp;Student can differentiate&nbsp;<strong>installed solution<\/strong>,&nbsp;<strong>rule template<\/strong>,&nbsp;<strong>active rule<\/strong>,&nbsp;<strong>alert<\/strong>&nbsp;and&nbsp;<strong>incident<\/strong>. Merely enabling a built-in template&nbsp;<strong>does not guarantee an alert<\/strong>&nbsp;from your harmless test event. [MS01] [MS08]<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Phase 9 &#8211; Create a temporary scheduled analytics rule from your proved query<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Security notice:<\/strong>&nbsp;This short-lived rule is named&nbsp;<strong>TRAINING ONLY<\/strong>. It alerts on a known benign change. Do not assign a fictional ATT&amp;CK technique, label it a real threat, route to production incident responders or attach a playbook.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Step A &#8211; Rule definition<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In Defender portal select\u00a0<strong>Microsoft Sentinel > Configuration > Analytics > + Create > Scheduled query rule<\/strong>.<\/li>\n\n\n\n<li>Set a unique\u00a0<strong>Name<\/strong>, for example\u00a0<code>LAB-FOUNDATION-s01-RG-WRITE<\/code>.<\/li>\n\n\n\n<li>Description:\u00a0<code>TRAINING ONLY. Detect approved writes to an isolated lab resource group. Disable and remove after exercise.<\/code><\/li>\n\n\n\n<li>Set\u00a0<strong>Severity<\/strong>\u00a0to\u00a0<strong>Informational<\/strong>\u00a0or Low as approved; choose\u00a0<strong>Enabled<\/strong>\u00a0for the temporary controlled test.<\/li>\n\n\n\n<li>Do\u00a0<strong>not<\/strong>\u00a0assert MITRE ATT&amp;CK mapping for this benign administrative test.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step B &#8211; Paste proven query and minimize noise<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Copy the exact tested\u00a0<strong>Phase 6 Step D<\/strong>\u00a0query. Replace the subscription ID and group name with your actual lab values. Keep\u00a0<code>TimeGenerated<\/code>\u00a0in the projected results; Microsoft explicitly requires it for scheduled-rule lookback evaluation. [MS08]<\/li>\n\n\n\n<li>In\u00a0<strong>Set rule logic<\/strong>, paste the query and resolve any validation errors.<\/li>\n\n\n\n<li>If supported in your portal, add\u00a0<strong>custom details<\/strong>\u00a0such as\u00a0<code>ResourceId<\/code>\u00a0and\u00a0<code>OperationNameValue<\/code>\u00a0for investigation. Entity mapping may be skipped for this first Foundation exercise; incorrect entity mappings can confuse the incident graph.<\/li>\n\n\n\n<li><strong>Run query every:<\/strong>\u00a0<code>5 minutes<\/code>.<\/li>\n\n\n\n<li><strong>Lookup data from the last:<\/strong>\u00a0<code>2 hours<\/code>\u00a0(beginner demo only; widen if approved and needed for ingestion delay).<\/li>\n\n\n\n<li><strong>Generate alert when number of query results is greater than:<\/strong>\u00a0<code>0<\/code>.<\/li>\n\n\n\n<li><strong>Event grouping:<\/strong>\u00a0<code>Group all events into a single alert<\/code>.<\/li>\n\n\n\n<li><strong>Stop running query after alert is generated:<\/strong>\u00a0<code>On<\/code>, for\u00a0<code>1 hour<\/code>\u00a0if the setting is offered. If your environment cannot use it, disable the rule promptly after the first alert to prevent repetitions.<\/li>\n\n\n\n<li>Run\u00a0<strong>Test with current data \/ Results simulation<\/strong>\u00a0if available. Record the preview and remember:\u00a0<strong>simulation is not an alert<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step C &#8211; Create actual incidents without automated remediation<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On\u00a0<strong>Incident settings<\/strong>, ensure\u00a0<strong>Create incidents from alerts triggered by this analytics rule = Enabled<\/strong>. When Sentinel is connected to Defender, Microsoft Defender&#8217;s incident engine handles creation\/correlation and may group alerts differently from initial settings. [MS08]<\/li>\n\n\n\n<li>On\u00a0<strong>Automated responses<\/strong>,\u00a0<strong>do not<\/strong>\u00a0add automation rules or playbooks for this Foundation lab.<\/li>\n\n\n\n<li>On\u00a0<strong>Review and create<\/strong>, confirm query, workspace, enabled status, threshold, schedule, incident creation and intended scope.<\/li>\n\n\n\n<li>Select\u00a0<strong>Create<\/strong>\u00a0only after validation passes and the instructor approves the settings.<\/li>\n\n\n\n<li>Return to\u00a0<strong>Active rules<\/strong>. Verify the rule exists and is\u00a0<strong>Enabled<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PASS P09:<\/strong>&nbsp;An active, time-limited training rule exists; query and source scope match the KQL that already returned a real row; incident creation is on; no automated remediation is configured. Save&nbsp;<code>P09-rule-settings.png<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Operational note<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Since the lookback is two hours, a previously ingested event&nbsp;<strong>may<\/strong>&nbsp;cause the first alert shortly after rule activation. If none appears and all prerequisites are valid, create a&nbsp;<em>new approved tag update<\/em>&nbsp;after activation, for example changing&nbsp;<code>sentinelTraining<\/code>&nbsp;from&nbsp;<code>foundation-day1<\/code>&nbsp;to&nbsp;<code>foundation-alert-test<\/code>, and then wait for that event to arrive. Do not repeat changes in a tight loop.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Phase 10 &#8211; Observe the real alert and incident<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step A &#8211; Check the event and alert<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Verify the signal group&#8217;s most recent tag update in the\u00a0<strong>Azure subscription Activity log<\/strong>.<\/li>\n\n\n\n<li>Rerun the exact rule query against\u00a0<code>AzureActivity<\/code>. A matching row must appear in the appropriate lookback window; capture its timestamp.<\/li>\n\n\n\n<li>Open\u00a0<strong>Defender portal > Investigation &amp; response > Incidents &amp; alerts > Alerts<\/strong>. Filter to the recent period and your unique training rule or source.<\/li>\n\n\n\n<li>Record the actual\u00a0<strong>Alert ID<\/strong>, name, severity, creation time, rule\/source and matching resource. If none appears, inspect the rule state, simulation result, lookback\/schedule, exact data filters and the queue&#8217;s filters; give the service time to process.<\/li>\n\n\n\n<li>A query returning rows is proof of\u00a0<em>data<\/em>, not proof of\u00a0<em>alert generation<\/em>. Do not mark this phase passed until you have a real alert ID.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step B &#8211; Find the incident containing the alert<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open\u00a0<strong>Investigation &amp; response > Incidents &amp; alerts > Incidents<\/strong>.<\/li>\n\n\n\n<li>Search by rule name\/alert\/period and check whether the alert is included in an existing incident rather than assuming every alert becomes a new separate row.<\/li>\n\n\n\n<li>If your tenant is using the incident-cases preview, the comparable location is\u00a0<strong>Cases > Incident<\/strong>. Follow the experience actually available; do not try to enable preview in a lab without approval. [MS10] [MS11]<\/li>\n\n\n\n<li>Open the incident\/case, verify it includes the matching alert, and record its ID, severity, status, created time, owner and evidence.<\/li>\n\n\n\n<li>When you have the necessary alert\/incident screenshots,\u00a0<strong>disable the training analytics rule now<\/strong>. Leave the incident available for investigation, but stop further repeated alerts.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PASS P10:<\/strong>&nbsp;A real Azure source event, matching ingested&nbsp;<code>AzureActivity<\/code>&nbsp;row, scheduled rule,&nbsp;<strong>real alert ID<\/strong>, and&nbsp;<strong>real incident\/case ID containing that alert<\/strong>. Save&nbsp;<code>P10-alert.png<\/code>&nbsp;and&nbsp;<code>P10-incident.png<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If an alert is visible but an incident is not, this is a&nbsp;<strong>partially completed<\/strong>&nbsp;flow, not a pass. See Section 14.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Phase 11 &#8211; Conduct SOC L1 incident triage and write the incident report<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the matching incident\/case from P10.<\/li>\n\n\n\n<li>Verify its title, priority\/severity, alert details, timeline, resource references, actor and any mapped entities (if available).<\/li>\n\n\n\n<li>Assign the incident to the instructor-approved training analyst if your permissions allow it. Read-only participants instead document the intended owner.<\/li>\n\n\n\n<li>Use the\u00a0<strong>Source Activity log<\/strong>\u00a0and\u00a0<strong>KQL query<\/strong>\u00a0as independent evidence. Explain the difference between\u00a0<strong>the time the action occurred<\/strong>\u00a0and\u00a0<strong>the time an alert\/incident was created<\/strong>.<\/li>\n\n\n\n<li>Evaluate whether the resource change was authorized, expected, harmful or unknown. For this exercise, the instructor knows it was authorized.<\/li>\n\n\n\n<li>Write an investigation note in the incident\/case if allowed. Do not include access tokens, secrets, personal contact details or confidential enterprise information.<\/li>\n\n\n\n<li>Resolve\/close it with the equivalent of\u00a0<strong>Informational \/ expected activity<\/strong>\u00a0or\u00a0<strong>Benign positive<\/strong>\u00a0when supported by the applicable UI; if classification labels differ, choose the closest accurate meaning and document the mapping. Do not classify a true benign test as a confirmed security compromise.<\/li>\n\n\n\n<li>If the status\/close action is not available, record the exact permission blocker and have an authorized instructor perform it.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Learner incident report &#8211; complete this template<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>INCIDENT REPORT - FOUNDATION TRAINING\nStudent \/ cohort:\nTimestamp and timezone (UTC):\nSubscription \/ workspace:\nSignal resource group:\nSource Activity log event time:\nEvent operation name and result:\nActor \/ initiating identity:\nKQL query used (file or paste):\nMatching AzureActivity evidence:\nAnalytics rule name:\nAlert ID and alert creation time:\nIncident \/ case ID and creation time:\nIncident owner:\nWas this authorized? What evidence proves it?:\nClassification and rationale:\nImmediate action taken (normally none \/ training closure):\nEscalation needed? Why \/ why not?:\nRule disabled after exercise? Evidence:\nInstructor review:\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">What a good analyst should conclude<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">An approved Azure configuration change is&nbsp;<strong>expected activity<\/strong>. It should produce a verifiable record and, because we intentionally configured a training detector, may produce an alert.&nbsp;<strong>An alert does not equal compromise.<\/strong>&nbsp;A strong analyst documents the approval and evidence, closes the training incident appropriately and recommends&nbsp;<strong>not<\/strong>&nbsp;using this simplistic alert rule for production. [MS10] [MS11]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PASS P11:<\/strong>&nbsp;Complete evidence-based report, defensible disposition, and safe closure or documented permissions blocker. Save&nbsp;<code>P11-triage-report.md<\/code>&nbsp;and an authorized screenshot of the close\/classification state.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Phase 12 &#8211; Read a workbook and answer a real SOC question<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open\u00a0<strong>Microsoft Sentinel > Threat management > Workbooks<\/strong>.<\/li>\n\n\n\n<li>Search for an\u00a0<strong>Azure Activity<\/strong>\u00a0workbook\/template included with the installed solution, if available.<\/li>\n\n\n\n<li>Inspect its\u00a0<strong>Required data types<\/strong>, select the appropriate workspace and open it.<\/li>\n\n\n\n<li>If it must be saved before use, have a permitted instructor\/learner select\u00a0<strong>Save<\/strong>\u00a0and the correct subscription\/RG. Workbooks require distinct Reader\/Contributor permissions. [MS09]<\/li>\n\n\n\n<li>Adjust any time-range and subscription filters to cover your lab event. Refresh.<\/li>\n\n\n\n<li>Locate a panel describing activity by\u00a0<strong>operation<\/strong>,\u00a0<strong>actor<\/strong>,\u00a0<strong>status<\/strong>\u00a0or\u00a0<strong>time<\/strong>. Record one useful finding and one limitation.<\/li>\n\n\n\n<li>If the template cannot be viewed due to permissions or visual feature availability, document the blocker and demonstrate a simple KQL summary instead; call it a\u00a0<strong>fallback<\/strong>, not a saved workbook.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Student questions:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Which administrative operation did the test create?<\/li>\n\n\n\n<li>How does the chart&#8217;s aggregation differ from the individual event row?<\/li>\n\n\n\n<li>Why might the chart initially show nothing even though the event is in\u00a0<code>AzureActivity<\/code>?<\/li>\n\n\n\n<li>Which SOC question is answered well by this workbook, and which question would require querying raw logs?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PASS P12:<\/strong>&nbsp;Student identifies the relevant dataset, one actual visualization, and its limits. Save&nbsp;<code>P12-workbook.png<\/code>&nbsp;or mark the workbook as blocked with the specific reason.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">13. End-to-end evidence chain: the student&#8217;s final walkthrough<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The student must reconstruct this&nbsp;<strong>in order<\/strong>, pointing to an artifact for each arrow:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Boundary<\/th><th class=\"has-text-align-left\" data-align=\"left\">Evidence artifact<\/th><th class=\"has-text-align-left\" data-align=\"left\">Pass?<\/th><\/tr><\/thead><tbody><tr><td>Approved subscription -&gt; workspace<\/td><td>P01 + P02 screenshots and subscription\/workspace notes<\/td><td>PASS \/ BLOCKED<\/td><\/tr><tr><td>Workspace -&gt; Sentinel\/Defender<\/td><td>P03 workspace view<\/td><td>PASS \/ BLOCKED<\/td><\/tr><tr><td>Activity-log export configured<\/td><td>P04 connector\/diagnostic\/policy record<\/td><td>PASS \/ BLOCKED<\/td><\/tr><tr><td>Approved change -&gt; source event<\/td><td>P05 Activity log event with time and resource<\/td><td>PASS \/ BLOCKED<\/td><\/tr><tr><td>Source event -&gt; destination KQL row<\/td><td>P06 matching&nbsp;<code>AzureActivity<\/code>&nbsp;row<\/td><td>PASS \/ BLOCKED<\/td><\/tr><tr><td>Log row -&gt; explainable analyst summary<\/td><td>P07 source\/query interpretation<\/td><td>PASS \/ BLOCKED<\/td><\/tr><tr><td>Built-in content understanding<\/td><td>P08 template vs active-rule explanation<\/td><td>PASS \/ BLOCKED<\/td><\/tr><tr><td>Tested query -&gt; active scheduled rule<\/td><td>P09 rule validation and active state<\/td><td>PASS \/ BLOCKED<\/td><\/tr><tr><td>Rule -&gt;&nbsp;<strong>real alert<\/strong>&nbsp;-&gt;&nbsp;<strong>real incident<\/strong><\/td><td>P10 Alert ID + incident\/case ID<\/td><td>PASS \/ BLOCKED<\/td><\/tr><tr><td>Incident -&gt; documented disposition<\/td><td>P11 case report and closure\/ownership<\/td><td>PASS \/ BLOCKED<\/td><\/tr><tr><td>Logs -&gt; visualization<\/td><td>P12 workbook result and interpretation<\/td><td>PASS \/ BLOCKED<\/td><\/tr><tr><td>Lab -&gt; safe teardown<\/td><td>Section 15 cleanup record<\/td><td>PASS \/ BLOCKED<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Never fill in an ID that the platform did not actually create.<\/strong>&nbsp;A screenshot of an instructor-provided example must be labeled&nbsp;<em>instructor demo<\/em>, not a student&#8217;s executed result.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">14. Troubleshooting: locate the exact broken boundary<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">A single diagnostic ladder<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">NoYesNoYesNoYesNoYesNoYesNoYesNoYesDid approved Azure change succeed?Is change visible in source Activity log?Does approved export target the correct workspace?Does AzureActivity show test event?Does rule query match a row within its lookback?Did the scheduled rule generate a real alert?Does a Defender incident contain the alert?Complete investigation and close as expected training activityFix permissions \/ resource-group operationCorrect subscription \/ time \/ scope filtersFix policy or diagnostic settings with ownerVerify ingestion delay, scope, destination, query contextInspect actual fields; correct name, time, operatorCheck enabled state, schedule, threshold, suppression, executionCheck incident creation, filters, correlation and access<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Symptom-to-action table<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Symptom<\/th><th class=\"has-text-align-left\" data-align=\"left\">Likely cause<\/th><th class=\"has-text-align-left\" data-align=\"left\">Next safe validation<\/th><\/tr><\/thead><tbody><tr><td>Can&#8217;t add Sentinel to workspace<\/td><td>Subscription Contributor permission missing, wrong subscription, unsupported existing workspace<\/td><td>Check subscription filter and onboarding prerequisites [MS01]<\/td><\/tr><tr><td>Workspace invisible in Defender<\/td><td>Not onboarded, wrong tenant\/workspace, insufficient onboarding role<\/td><td>Settings &gt; Microsoft Sentinel &gt; Workspaces; involve admin [MS02]<\/td><\/tr><tr><td>Content hub Install unavailable<\/td><td>Missing Microsoft Sentinel Contributor or other content dependency<\/td><td>Review RG-scoped role assignments [MS03]<\/td><\/tr><tr><td>Azure Activity connector shows Not connected<\/td><td>No approved export, wrong workspace, delayed reporting<\/td><td>Review actual policy\/diagnostic settings; do not rely solely on badge<\/td><\/tr><tr><td>Source Activity log has no test event<\/td><td>Change failed, incorrect subscription\/time filter<\/td><td>Inspect resource group, source subscription and activity log directly<\/td><\/tr><tr><td><code>AzureActivity<\/code>&nbsp;table missing \/ empty<\/td><td>No ingestion yet, wrong workspace, permissions, connector\/export issue<\/td><td>Query correct Log Analytics workspace and review collection settings<\/td><\/tr><tr><td>Broad KQL returns rows but filtered KQL doesn&#8217;t<\/td><td>Wrong RG spelling, activity field casing, different operation name, too narrow time<\/td><td>Inspect broad query results and reconstruct filter from actual values<\/td><\/tr><tr><td>Scheduled rule fails validation<\/td><td>Missing&nbsp;<code>TimeGenerated<\/code>, invalid KQL, unsupported rule setting<\/td><td>Run query in Logs first; review wizard validation [MS08]<\/td><\/tr><tr><td>Rule enabled, no alert<\/td><td>Event not in lookback, threshold\/suppression, not yet evaluated<\/td><td>Check actual data, results simulation, rule state and run timing<\/td><\/tr><tr><td>Alert visible, no new incident row<\/td><td>Incident creation off, Defender correlation put alert in another incident, filters\/permissions<\/td><td>Search existing incident for matching alert; review rule settings [MS08]<\/td><\/tr><tr><td>Can&#8217;t assign\/resolve incident<\/td><td>Missing Responder or Defender management permissions<\/td><td>Use read-only report; instructor handles changes [MS03] [MS11]<\/td><\/tr><tr><td>Workbook looks empty<\/td><td>Wrong data type, workspace, time range or workbook permission<\/td><td>Inspect Required data types and time\/source filters [MS09]<\/td><\/tr><tr><td>Too many alerts<\/td><td>Wide lookback, short frequency, disabled suppression<\/td><td>Disable lab rule immediately; document cause and fix before rerun<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Rule-of-thumb troubleshooting order<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Source:<\/strong>\u00a0Was the actual change made and logged?<\/li>\n\n\n\n<li><strong>Transport:<\/strong>\u00a0Was the correct subscription exported to the correct workspace?<\/li>\n\n\n\n<li><strong>Schema and time:<\/strong>\u00a0Does the destination record match expected columns and time?<\/li>\n\n\n\n<li><strong>Rule:<\/strong>\u00a0Does the exact rule query return recent data and does its schedule run?<\/li>\n\n\n\n<li><strong>Alert and incident:<\/strong>\u00a0Did the actual alert appear, and where did Defender group it?<\/li>\n\n\n\n<li><strong>Authorization:<\/strong>\u00a0Do you have permission to see\/manage the target artifact?<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">No stage should be marked&nbsp;<strong>PASS<\/strong>&nbsp;merely because a later screenshot seems plausible.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">15. Clean up and prevent ongoing charges or noise<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cleanup is part of the graded lab. Do not delete an instructor-owned shared workspace or any organization-wide policy.<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Disable the temporary scheduled rule<\/strong>\u00a0as soon as you have the alert evidence (Phase 10). Confirm its status is disabled.<\/li>\n\n\n\n<li>Complete incident evidence and resolution; verify the case and comments remain available for grading if required.<\/li>\n\n\n\n<li>If the rule belongs only to your student sandbox and the instructor approves, delete it from\u00a0<strong>Analytics > Active rules<\/strong>. Document the action.<\/li>\n\n\n\n<li>Remove any temporary built-in test rule you explicitly created, but do\u00a0<strong>not<\/strong>\u00a0uninstall a Content hub solution used by other learners without approval.<\/li>\n\n\n\n<li>For the\u00a0<strong>test resource group<\/strong>\u00a0(which must be empty other than approved tags), delete the group only if the instructor confirms it is\u00a0<strong>solely yours<\/strong>\u00a0and not used as a shared signal source. Copy its resource ID first for evidence.<\/li>\n\n\n\n<li>For a\u00a0<strong>newly created direct diagnostic setting<\/strong>, obtain the collection owner&#8217;s approval before removing it from the source subscription. For an\u00a0<strong>Azure Policy assignment<\/strong>, coordinate removal\/remediation with the policy owner; removing a policy assignment may not automatically clean up all deployed diagnostic settings.<\/li>\n\n\n\n<li>Delete your\u00a0<strong>new workspace\/resource group<\/strong>\u00a0only if it is not needed for later days and the environment owner explicitly approves. Check that no existing data collection or downstream teaching work depends on it.<\/li>\n\n\n\n<li>Review the approved cost\/budget view for usage accrued by the exercise. Note any extra services installed during class.<\/li>\n\n\n\n<li>Save the cleanup record:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>CLEANUP REPORT\nStudent ID:\nLab subscription and resource group:\nRule name and final state:\nIncident ID and final classification\/status:\nSignal RG status (retained\/deleted by owner):\nExport diagnostic setting\/policy (retained\/removed by owner):\nWorkspace status (retained\/deleted by owner):\nCost owner notified:\nOpen issues and next owner:\nTimestamp:\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PASS P13:<\/strong>&nbsp;Training alert noise has stopped and the ownership\/status of every resource or collection route is documented. The goal is not &#8220;delete everything&#8221;; it is&nbsp;<strong>controlled, reversible, auditable cleanup<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">16. Final Foundation skills assessment &#8211; 100 points<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Competency<\/th><th class=\"has-text-align-right\" data-align=\"right\">Points<\/th><th class=\"has-text-align-left\" data-align=\"left\">Required evidence<\/th><\/tr><\/thead><tbody><tr><td>Correct tenant, subscription, Azure scope and safety controls<\/td><td class=\"has-text-align-right\" data-align=\"right\">10<\/td><td>P01, permission\/cost decisions<\/td><\/tr><tr><td>Correct workspace + Sentinel + Defender access<\/td><td class=\"has-text-align-right\" data-align=\"right\">10<\/td><td>P02-P03<\/td><\/tr><tr><td>Correct and approved Azure Activity export<\/td><td class=\"has-text-align-right\" data-align=\"right\">10<\/td><td>P04<\/td><\/tr><tr><td>Harmless source event and matching ingested destination record<\/td><td class=\"has-text-align-right\" data-align=\"right\">15<\/td><td>P05-P06 (both must be real)<\/td><\/tr><tr><td>Accurate KQL analysis and explainable SOC narrative<\/td><td class=\"has-text-align-right\" data-align=\"right\">15<\/td><td>P06-P07<\/td><\/tr><tr><td>Content template understanding + correctly configured custom lab rule<\/td><td class=\"has-text-align-right\" data-align=\"right\">10<\/td><td>P08-P09<\/td><\/tr><tr><td><strong>Actual alert + incident evidence<\/strong><\/td><td class=\"has-text-align-right\" data-align=\"right\"><strong>15<\/strong><\/td><td><strong>P10: real IDs, source association<\/strong><\/td><\/tr><tr><td>Incident triage, classification and report<\/td><td class=\"has-text-align-right\" data-align=\"right\">10<\/td><td>P11<\/td><\/tr><tr><td>Workbook and limitations<\/td><td class=\"has-text-align-right\" data-align=\"right\">3<\/td><td>P12<\/td><\/tr><tr><td>Safe disabling\/cleanup documentation<\/td><td class=\"has-text-align-right\" data-align=\"right\">2<\/td><td>P13<\/td><\/tr><tr><td><strong>Total<\/strong><\/td><td class=\"has-text-align-right\" data-align=\"right\"><strong>100<\/strong><\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Progression gate to Intermediate<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Recommended passing score:\u00a0<strong>80\/100<\/strong>.<\/li>\n\n\n\n<li><strong>Mandatory live competencies:<\/strong>\u00a0P05, P06, P09, P10 and safe disabling\/cleanup must be demonstrated\u00a0<strong>or individually checked off by an instructor after successful remediation<\/strong>. A higher score cannot replace missing real evidence.<\/li>\n\n\n\n<li>In Mode B, instructor-provisioned infrastructure is acceptable, but evidence must show that the student&#8217;s event reached the correct destination and produced the claimed alert and incident.<\/li>\n\n\n\n<li>In Mode C, students may pass a\u00a0<strong>KQL\/concepts practice check<\/strong>, not the full end-to-end practical gate.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Instructor answer key \/ expected reasoning<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>What is an event?<\/strong>\u00a0An Azure Activity entry describes a control-plane operation; the meaning depends on actor, subscription, scope, timestamp and result.<\/li>\n\n\n\n<li><strong>Why do we need export?<\/strong>\u00a0The source Azure Activity log exists before Sentinel; a configured pipeline delivers relevant events to the Log Analytics table.<\/li>\n\n\n\n<li><strong>Does a\u00a0<code>Connected<\/code>\u00a0label prove an event arrived?<\/strong>\u00a0No. The proof is a source event matched to the destination record.<\/li>\n\n\n\n<li><strong>What does KQL establish?<\/strong>\u00a0The analyst can filter, summarize and inspect evidence in the connected table.<\/li>\n\n\n\n<li><strong>What makes this a scheduled rule?<\/strong>\u00a0Sentinel reruns the tested query on a configured interval\/lookback and creates an alert when the threshold is met.<\/li>\n\n\n\n<li><strong>Is\u00a0<code>Test with current data<\/code>\u00a0a real alert?<\/strong>\u00a0No. It is a rule simulation.<\/li>\n\n\n\n<li><strong>Is the alert necessarily malicious?<\/strong>\u00a0No. This alert deliberately indicates authorized lab activity; classify based on corroborated context.<\/li>\n\n\n\n<li><strong>Why might an alert not create a separate incident row?<\/strong>\u00a0In Defender, incident correlation can put it into an existing incident; check incident creation and search for the alert ID.<\/li>\n\n\n\n<li><strong>What does a workbook add?<\/strong>\u00a0Visual summaries for repeated SOC questions. The underlying source and filters must still be validated.<\/li>\n\n\n\n<li><strong>What is the final analyst action?<\/strong>\u00a0Document expected activity, close appropriately, disable noisy demo detection and preserve graded evidence.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Oral demonstration: ask the student to trace the whole flow<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">&#8220;I changed this approved resource group; here is the corresponding Azure source event. This subscription export delivered it to my Sentinel workspace&#8217;s&nbsp;<code>AzureActivity<\/code>&nbsp;table. Here is the filtered KQL row, my rule&#8217;s configured threshold\/lookback, the real alert, its incident, my authorized-activity classification and the disabled test rule. This workbook summarizes the underlying activity.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">If a learner can&nbsp;<strong>prove<\/strong>&nbsp;that narrative from their own artifacts and correctly explain its limitations, they understand the essential Foundations workflow.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">17. Student submission checklist<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Submit one folder (for example&nbsp;<code>Sentinel-Foundations-s01<\/code>) containing:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Sentinel-Foundations-s01\/\n  README.md                  # Student, selected Mode A\/B\/C, context, limitations\n  P01-subscription-scope.png\n  P02-workspace-overview.png\n  P03-defender-workspace.png\n  P04-activity-connector.png\n  P05-source-activity-log.png\n  P06-kql-proof.png\n  P07-analysis.md\n  P08-template-notes.md\n  P09-rule-settings.png\n  P10-alert.png\n  P10-incident.png\n  P11-triage-report.md\n  P12-workbook.png\n  P13-cleanup.md\n  query.kql                  # Copy of final tested query with no secrets\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If a screenshot is unavailable because of permissions or the mode used, submit&nbsp;<code>BLOCKED-&lt;checkpoint&gt;.md<\/code>&nbsp;documenting the exact obstacle and an authorized alternative. Do not invent screenshots, claim simulations were real alerts, or publish private subscription\/user identifiers on a public training site.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">18. Verified official references and change-check list<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">These references were reviewed for the&nbsp;<strong>November 1, 2026<\/strong>&nbsp;edition. Exact button labels, permissions, licensing, and portal previews may change between cohorts.&nbsp;<strong>DOC-VERIFIED<\/strong>&nbsp;means the Microsoft article documents the workflow;&nbsp;<strong>LIVE-UNVERIFIED<\/strong>&nbsp;means this manual was not executed in your subscription. The instructor must complete P01-P13 once in the actual training tenant before delivery.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">ID<\/th><th class=\"has-text-align-left\" data-align=\"left\">Official Microsoft documentation<\/th><th class=\"has-text-align-left\" data-align=\"left\">Used for<\/th><\/tr><\/thead><tbody><tr><td>MS01<\/td><td><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/sentinel\/quickstart-onboard\">Onboard Microsoft Sentinel to a Log Analytics workspace<\/a><\/td><td>Workspace, Sentinel setup, Content hub, Azure Activity connector<\/td><\/tr><tr><td>MS02<\/td><td><a href=\"https:\/\/learn.microsoft.com\/en-us\/microsoft-365\/security\/defender\/microsoft-sentinel-onboard\">Connect Microsoft Sentinel to the Defender portal<\/a><\/td><td>Workspace onboarding, Defender navigation and requirements<\/td><\/tr><tr><td>MS03<\/td><td><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/sentinel\/roles\">Roles and permissions in Microsoft Sentinel<\/a><\/td><td>Reader\/Responder\/Contributor responsibilities<\/td><\/tr><tr><td>MS04<\/td><td><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/sentinel\/microsoft-sentinel-defender-portal\">Microsoft Sentinel in the Defender portal<\/a><\/td><td>Interface direction and support transition<\/td><\/tr><tr><td>MS05<\/td><td><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/azure-monitor\/fundamentals\/activity-log\">Azure Monitor Activity log<\/a><\/td><td>Source operations, AzureActivity, case-insensitive fields, ingestion notes<\/td><\/tr><tr><td>MS06<\/td><td><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/azure-monitor\/data-collection\/diagnostic-settings\">Azure Monitor diagnostic settings<\/a><\/td><td>Direct subscription activity export and precautions<\/td><\/tr><tr><td>MS07<\/td><td><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/azure-monitor\/reference\/tables\/azureactivity\">AzureActivity table reference<\/a><\/td><td>Query column names and types<\/td><\/tr><tr><td>MS08<\/td><td><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/sentinel\/create-analytics-rules?tabs=defender-portal\">Create scheduled analytics rules<\/a><\/td><td><code>TimeGenerated<\/code>, schedules, lookback, thresholds, incident setting and suppression<\/td><\/tr><tr><td>MS09<\/td><td><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/sentinel\/monitor-your-data\">Visualize data using Microsoft Sentinel workbooks<\/a><\/td><td>Workbooks and access requirements<\/td><\/tr><tr><td>MS10<\/td><td><a href=\"https:\/\/learn.microsoft.com\/en-us\/defender-xdr\/manage-incidents\">Manage incidents in Defender portal (legacy experience)<\/a><\/td><td>Incident ownership, expected activity, notes and resolution<\/td><\/tr><tr><td>MS11<\/td><td><a href=\"https:\/\/learn.microsoft.com\/en-us\/defender-xdr\/manage-incident-cases\">Manage incident cases in Defender portal (preview)<\/a><\/td><td>Case management differences and permissions<\/td><\/tr><tr><td>MS12<\/td><td><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/sentinel\/create-analytics-rule-from-template\">Create scheduled rule from a template<\/a><\/td><td>Built-in rule template discovery<\/td><\/tr><tr><td>MS13<\/td><td><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/azure-monitor\/fundamentals\/activity-log-schema\">Azure Activity log event schema<\/a><\/td><td>Administrative write-event interpretation<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Before every course delivery, instructor recheck<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] Defender portal > workspace is connected and learners can see the intended scope.<\/li>\n\n\n\n<li>[ ] The Azure Activity solution\/connector remains installed and source export is authorized.<\/li>\n\n\n\n<li>[ ] The\u00a0<strong>live<\/strong>\u00a0event query returns a correct row before an analytics rule is configured.<\/li>\n\n\n\n<li>[ ] The scheduled-rule wizard supports the chosen lookback, interval and suppression in this environment.<\/li>\n\n\n\n<li>[ ] A controlled test produces a real alert and Defender incident in the current incident UI.<\/li>\n\n\n\n<li>[ ] Labels for closing expected activity are recorded for your tenant.<\/li>\n\n\n\n<li>[ ] No lab rule or resource has a production blast radius; cleanup roles are assigned.<\/li>\n\n\n\n<li>[ ] Entitlements, preview availability and pricing have been checked for the delivery date.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Validated offline for this publication:<\/strong>&nbsp;syllabus fit, Markdown structure, KQL composition against documented schema, field names, architecture coherence, evidence gates, and safety sequencing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Not asserted:<\/strong>&nbsp;Live execution in your Microsoft tenant, guaranteed event delivery timing, guaranteed zero cost, identical portal menus in every tenant, or a generated incident where no real alert was observed.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>End of Foundation End-to-End Student Lab Manual<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Student workbook + instructor validation and answer key | Days 1-2 | 2026-11-01 edition One lab, one continuous story:&nbsp;Build a Microsoft Sentinel environment, connect Azure Activity logs,&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1260","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/comments?post=1260"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1260\/revisions"}],"predecessor-version":[{"id":1270,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1260\/revisions\/1270"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/media?parent=1260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/categories?post=1260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/tags?post=1260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}