<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Runbook Foundry]]></title><description><![CDATA[Runbook Foundry]]></description><link>https://runbookfoundry.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 07 Nov 2026 15:30:33 GMT</lastBuildDate><atom:link href="https://runbookfoundry.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Get a weekly CISA KEV digest with n8n (free workflow)]]></title><description><![CDATA[CISA's Known Exploited Vulnerabilities (KEV) catalog is the shortest useful patch list there is: every entry is a CVE that CISA has evidence of being…]]></description><link>https://runbookfoundry.hashnode.dev/get-a-weekly-cisa-kev-digest-with-n8n-free-workflow</link><guid isPermaLink="true">https://runbookfoundry.hashnode.dev/get-a-weekly-cisa-kev-digest-with-n8n-free-workflow</guid><category><![CDATA[n8n]]></category><category><![CDATA[Security]]></category><category><![CDATA[automation]]></category><category><![CDATA[sysadmin]]></category><dc:creator><![CDATA[Runbook Foundry]]></dc:creator><pubDate>Tue, 27 Oct 2026 03:40:34 GMT</pubDate><content:encoded><![CDATA[<p>CISA's <strong>Known Exploited Vulnerabilities (KEV)</strong> catalog is the shortest useful patch list there is: every entry is a CVE that CISA has evidence of being exploited in the wild. CISA publishes it as a public JSON feed with no API key, which makes it a good fit for a small n8n workflow.</p>
<p>This post walks through a workflow that runs every Monday, keeps the entries added in the previous week (Mon-Sun), stars the vendors you actually run, and emails your team an HTML digest. You can build it from the steps below, or get the finished one free: <a href="https://kev-explained.pages.dev/n8n/">download page with setup notes</a> or the <a href="https://kev-explained.pages.dev/n8n/kev-patch-digest.json">raw workflow JSON</a>.</p>
<h2>The feed</h2>
<pre><code>https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json
</code></pre>
<p>It returns one object with <code>catalogVersion</code>, <code>count</code> and a <code>vulnerabilities</code> array (1,758 entries in catalog 2026.10.26). Each entry has the fields you need for a digest:</p>
<table>
<thead>
<tr>
<th>Field</th>
<th>Example use</th>
</tr>
</thead>
<tbody><tr>
<td><code>cveID</code></td>
<td>the row key</td>
</tr>
<tr>
<td><code>vendorProject</code>, <code>product</code></td>
<td>watchlist matching and display</td>
</tr>
<tr>
<td><code>dateAdded</code></td>
<td>the "new last week" filter</td>
</tr>
<tr>
<td><code>dueDate</code></td>
<td>the remediation deadline for US federal civilian agencies under BOD 22-01. Other organizations can use it as a target date.</td>
</tr>
<tr>
<td><code>knownRansomwareCampaignUse</code></td>
<td><code>Known</code> or <code>Unknown</code></td>
</tr>
<tr>
<td><code>requiredAction</code></td>
<td>CISA's one-line instruction</td>
</tr>
</tbody></table>
<p>The data is CC0 1.0. Credit CISA and don't imply endorsement.</p>
<h2>The workflow</h2>
<p>Nine nodes, all core (plus sticky notes):</p>
<ol>
<li><strong>Every Monday 08:00</strong> (Schedule Trigger) → <strong>Flag: live run</strong> (Code: <code>return [{json:{_dryRun:false}}]</code>)</li>
<li><strong>Test workflow (manual)</strong> (Manual Trigger) → <strong>Flag: dry run</strong> (Code: <code>return [{json:{_dryRun:true}}]</code>)</li>
<li>Both flags → <strong>Download CISA KEV feed</strong> (HTTP Request, GET, 30 s timeout)</li>
<li><strong>Filter &amp; build digest</strong> (Code)</li>
<li><strong>Dry run?</strong> (IF on <code>_dryRun</code>) → true: <strong>Dry run: log only</strong> (No Op); false: <strong>Email digest</strong> (Send Email, SMTP, HTML)</li>
</ol>
<p><strong>Time zone:</strong> the 08:00 trigger uses the workflow's time zone (Settings &gt; Timezone). The workflow JSON doesn't set one, so it falls back to the instance's <code>GENERIC_TIMEZONE</code>, which defaults to America/New_York (self-hosted; on n8n Cloud the default is the owner's detected time zone, or GMT). The week window doesn't use that time zone: the Code node compares CISA's date-only <code>dateAdded</code> with the run's UTC date. If you're more than 8 hours ahead of UTC (for example Tokyo, Sydney or Auckland), Monday 08:00 local is still Sunday in UTC, so each digest covers Sunday to Saturday and says "from  to ". To get Mon-Sun there, set the trigger hour to at least your UTC offset, rounded up, using your summer offset if you have daylight saving.</p>
<h3>The Code node</h3>
<p>This is the core of it, trimmed for the post:</p>
<pre><code class="language-javascript">const WATCHLIST = ['microsoft','google','apple','fortinet','citrix','ivanti','atlassian','oracle','adobe','apache'];
const LOOKBACK_DAYS = 7; // keep 7 for the weekly Monday schedule

const feed = $input.first().json;
const vulns = Array.isArray(feed.vulnerabilities) ? feed.vulnerabilities : [];
if (!vulns.length) throw new Error('KEV feed returned no vulnerabilities; check the URL or network.');

// dateAdded is date-only (YYYY-MM-DD), so compare UTC date strings, not timestamps.
const day = d =&gt; d.toISOString().slice(0,10);
const end = day(new Date());                                   // exclusive: today's additions go into next week's digest
const start = day(new Date(Date.now() - LOOKBACK_DAYS*864e5)); // inclusive

const recent = vulns
  .filter(v =&gt; typeof v.dateAdded === 'string' &amp;&amp; v.dateAdded &gt;= start &amp;&amp; v.dateAdded &lt; end)
  .map(v =&gt; ({ ...v, watch: WATCHLIST.includes(String(v.vendorProject).toLowerCase()) }))
  .sort((a, b) =&gt; (b.watch - a.watch) || (a.dueDate &gt; b.dueDate ? 1 : -1));
// ...then build an HTML table from `recent` (escape every field) and return
// { newCount, watchHits, html } for the email node.
</code></pre>
<p>Three details matter:</p>
<ul>
<li><strong>Compare date strings, not timestamps.</strong> <code>dateAdded</code> has no time, so <code>new Date('2026-10-23')</code> is midnight UTC. My first version compared it to <code>Date.now()</code> minus seven days, and anything CISA added on a Monday after the run had aged out by the next Monday, so it was never reported. With string comparison and today excluded, a Monday run covers the previous Monday through Sunday (UTC dates), exactly once.</li>
<li><strong>Fail loudly on an empty feed.</strong> A network hiccup that returns nothing shouldn't produce a cheerful "no new entries" email.</li>
<li><strong>Escape everything</strong> you put into the HTML. The feed is trusted, but escaping is cheap.</li>
</ul>
<h3>The email</h3>
<p>Subject: <code>=Weekly KEV patch digest: {{ $json.newCount }} new ({{ $json.watchHits }} on watchlist)</code>. Body: <code>={{ $json.html }}</code>, in HTML format. A week with no additions still sends a short "No new KEV entries added in the previous week (Mon-Sun,  to )." email, so silence always means something broke.</p>
<p>Tip: link each CVE in the table to an explainer page so readers don't have to search. KEV Explained has a plain page for every KEV entry at <code>https://kev-explained.pages.dev/cve/&lt;CVE-ID&gt;/</code>, with the required action, due date and links to NVD and the vendor advisory.</p>
<h2>Three things that bit me</h2>
<ol>
<li><strong><code>isExecuted</code> is not a reliable dry-run switch.</strong> My first version checked <code>$('Test workflow (manual)').isExecuted</code> before sending. That's fine when you click Test in the editor. But <code>n8n execute</code> on the CLI started from the schedule trigger and the email went out. Separate flag nodes per trigger plus an IF node are explicit and easy to see on the canvas.</li>
<li><strong>Expressions need the leading <code>=</code>.</strong> If you edit the workflow JSON by hand, a subject like <code>Weekly digest: {{ $json.newCount }}</code> is sent literally. It has to be <code>=Weekly digest: {{ $json.newCount }}</code>.</li>
<li><strong>Vendor names are CISA's, not yours.</strong> Matching is on lowercase <code>vendorProject</code>. <code>Microsoft</code>, <code>Fortinet</code> and <code>Ivanti</code> are what you'd guess, but PHP shows up as both <code>PHP</code> and <code>PHP Group</code>. Run a quick <code>jq -r '.vulnerabilities[].vendorProject' known_exploited_vulnerabilities.json | sort -u</code> on the feed before you fill in the watchlist.</li>
</ol>
<h2>Want it daily? (untested sketch)</h2>
<p><strong>Untested sketch:</strong> switch the Schedule Trigger to a Days interval; split the Code node so it returns one item per CVE; add a <strong>Remove Duplicates</strong> node (Operation: <strong>Remove Items Processed in Previous Executions</strong> → Keep Items Where: <strong>Value Is New</strong> → Value to Dedupe On: <code>cveID</code>); then build the HTML in a second Code node. I haven't tested this; run it alongside the weekly one first.</p>
<h2>Testing it</h2>
<p>On self-hosted n8n 2.44.7, against the live feed (catalog 2026.10.26), a test copy with the clock pinned to Monday Oct 26 found 8 entries added Oct 19-25 (6 dated Oct 20, 2 dated Oct 23) and sent its digest to a local test mail server. The same test with the clock pinned to Monday Nov 2, on self-hosted n8n against the same feed, picks up the 2 entries dated Oct 26, which the Oct 26 run correctly left out. I haven't tested it on n8n Cloud or n8n 1.x.</p>
<p>Before you activate it:</p>
<ul>
<li>Set the workflow time zone.</li>
<li>Attach an SMTP credential and replace the placeholder recipient.</li>
<li>Click <strong>Test workflow</strong> and check the Code node output.</li>
<li>Run it once from the schedule trigger to a test mailbox, then activate it.</li>
</ul>
<h2>Ideas to extend it</h2>
<ul>
<li>Add EPSS scores with a second HTTP Request to FIRST's API, and sort by them within the watchlist.</li>
<li>Send to Teams or Slack instead of email.</li>
<li>Open a ticket for each watchlist hit, with the CISA due date as the deadline.</li>
</ul>
<p>If you'd rather not build the related workflows yourself, this digest is also one of six workflows in the <a href="https://runbookfoundry.gumroad.com/l/n8n-it-ops-bundle">n8n IT-Ops Bundle</a> ($59, paid; I make it). The bundle also has ticket triage, TLS expiry alerts, offboarding, backup-failure alerts and SaaS app review, each with a dry-run mode.</p>
<hr />
<p><em>I built this workflow for Runbook Foundry; the full JSON is free at the link above. Drafted with AI assistance; test-run on self-hosted n8n 2.44.7.</em></p>
<p><em>Not affiliated with n8n GmbH or CISA. Not tested on n8n Cloud. n8n is a trademark of n8n GmbH. KEV data: CISA Known Exploited Vulnerabilities Catalog, CC0 1.0; use does not imply endorsement by CISA or DHS.</em></p>
]]></content:encoded></item><item><title><![CDATA[IT Offboarding Checklist Template for Microsoft 365 and Google Workspace (Same-Day Steps)]]></title><description><![CDATA[Free download: IT offboarding checklist (free template). It's ordered for urgent exits; for a planned exit, do the transfer steps first. Copy it, then use…]]></description><link>https://runbookfoundry.hashnode.dev/it-offboarding-checklist-template-for-microsoft-365-and-google-workspace-same-day-steps</link><guid isPermaLink="true">https://runbookfoundry.hashnode.dev/it-offboarding-checklist-template-for-microsoft-365-and-google-workspace-same-day-steps</guid><category><![CDATA[Security]]></category><category><![CDATA[sysadmin]]></category><category><![CDATA[Microsoft365]]></category><category><![CDATA[googleworkspace]]></category><dc:creator><![CDATA[Runbook Foundry]]></dc:creator><pubDate>Tue, 27 Oct 2026 01:38:02 GMT</pubDate><content:encoded><![CDATA[<p><strong>Free download:</strong> <a href="https://runbookfoundry.pages.dev/templates/offboarding-checklist?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=topcta">IT offboarding checklist (free template)</a>. It's ordered for urgent exits; for a planned exit, do the transfer steps first. Copy it, then use the steps below to fill it in. I make these templates.</p>
<p>Offboarding gaps are rarely clever. An account stayed active, a phone kept syncing mail, or a shared password never changed. A short checklist that runs in the same order every time closes those gaps, and it leaves a dated record you can show if an auditor, insurer or customer asks.</p>
<p>This guide covers what to do <strong>before</strong>, <strong>on</strong> and <strong>after</strong> the last day in Microsoft 365 and Google Workspace.</p>
<h2>Order matters: transfer, then cut, then clean up</h2>
<p>If you disable an account first, you can lose access to the files, mailbox and app ownership you still need. If you wait too long, the person keeps access. Use this order:</p>
<ol>
<li><strong>Inventory</strong> what they can reach (identity, SaaS, devices, shared secrets).</li>
<li><strong>Transfer</strong> data and ownership you need to keep.</li>
<li><strong>Cut access</strong> at a set time, with sessions revoked.</li>
<li><strong>Clean up</strong> licenses, devices, and shared credentials, and record evidence.</li>
</ol>
<p>For a hostile or high-risk exit, swap steps 2 and 3. Cut access first and recover data as an admin afterward.</p>
<h2>Before the last day (T-5 to T-1)</h2>
<ul>
<li>Get the exit date and time <strong>from HR in writing</strong>, and say whether it is planned or immediate.</li>
<li>List every system the person uses. Start with the identity provider's app assignments, then ask their manager about anything outside SSO: payroll, banking, the domain registrar, social accounts, vendor portals.</li>
<li>Find what they <strong>own</strong>: shared drives, Teams or Groups, calendars, scheduled flows or Apps Script, forms, and any OAuth apps they authorized.</li>
<li>Note shared credentials they knew (Wi-Fi, alarm codes, password-manager shared folders) so you can rotate them.</li>
<li>Arrange device return and decide whether to keep or wipe each device.</li>
</ul>
<h2>On the last day: Microsoft 365</h2>
<ol>
<li><strong>Reset the password</strong> and choose <strong>Sign out of all sessions</strong> (Microsoft 365 admin center &gt; Users &gt; Active users &gt; select user). Microsoft notes that blocking sign-in can take time to take effect, so resetting the password is the fast step (<a href="https://learn.microsoft.com/en-us/microsoft-365/admin/add-users/remove-former-employee-step-1?view=o365-worldwide">Microsoft Learn</a>).</li>
<li><strong>Block sign-in</strong> on the same user page.</li>
<li><strong>Revoke refresh tokens</strong> if you script it: <code>Revoke-EntraUserAllRefreshToken</code> and <code>Set-EntraUser -AccountEnabled $false</code> (<a href="https://learn.microsoft.com/en-us/powershell/entra-powershell/offboard-user?view=entra-powershell">Microsoft Learn</a>).</li>
<li><strong>Remove MFA methods</strong> and registered devices so a cached authenticator can't be reused.</li>
<li><strong>Convert the mailbox to shared</strong> or set forwarding to the manager, and add an auto-reply if customers email this person.</li>
<li><strong>Transfer OneDrive</strong> access to the manager before the license is removed. Deleted users' OneDrive has a retention window, so don't leave this for later.</li>
<li><strong>Remove the user from groups, Teams ownership and admin roles.</strong></li>
<li><strong>Wipe or retire devices</strong> in Intune, or collect them.</li>
</ol>
<h2>On the last day: Google Workspace</h2>
<p>Google's own checklist covers the core steps (<a href="https://support.google.com/a/answer/6329207?hl=en">Google Workspace Admin Help</a>):</p>
<ol>
<li><strong>Change the password</strong> and <strong>reset sign-in cookies</strong> (Admin console &gt; Directory &gt; Users &gt; select user &gt; Security).</li>
<li><strong>Revoke app passwords, security keys and OAuth tokens</strong> on the same Security panel.</li>
<li><strong>Remove recovery email and phone</strong> so password recovery can't be used.</li>
<li><strong>Suspend</strong> the user while you transfer data.</li>
<li><strong>Transfer Drive and Calendar ownership</strong> (Admin console &gt; Account &gt; Data transfer), then delete the account or keep it as an archived user.</li>
<li><strong>Wipe or remove the account</strong> from managed mobile devices.</li>
</ol>
<h2>Everything outside SSO</h2>
<p>This is where most gaps live. For each app on your inventory, record <strong>who</strong> removed the account, <strong>when</strong>, and <strong>how you checked it</strong>. Pay special attention to:</p>
<ul>
<li>Finance: bank portals, payment processors, expense tools</li>
<li>Your domain registrar and DNS host</li>
<li>Social media and ad accounts</li>
<li>Shared password-manager folders (rotate any secret they could see)</li>
<li>API keys, service accounts and automation they created</li>
</ul>
<h2>After the last day (T+1 to T+30)</h2>
<ul>
<li>Check sign-in logs for the account over the following week.</li>
<li>Remove licenses once data transfer is confirmed.</li>
<li>Close out the ticket with evidence: screenshots or log extracts of disabled accounts, device wipe confirmations, and the list of rotated credentials.</li>
<li>Add anything you missed to the template so the next offboarding is faster.</li>
</ul>
<h2>Make it repeatable</h2>
<p>A one-off list helps once. A template that HR starts and IT completes helps every time. If you want this as an editable template, the <a href="https://runbookfoundry.gumroad.com/l/jqfgpb?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=contextual">IT Offboarding Checklist + User Access Review Template</a> ($15) includes a 4-page offboarding checklist in Word, an Excel tracker that records each leaver, step owner and completion date, and a 300-row user access review workbook, written for Microsoft 365 and Google Workspace. I make these templates.</p>
<h2>Common mistakes</h2>
<ul>
<li><strong>Disabling before transferring</strong> files, mailbox or automation ownership.</li>
<li><strong>Forgetting sessions.</strong> A password reset without session revocation leaves signed-in apps working.</li>
<li><strong>No owner for non-SSO apps.</strong> Assign each one to a named person with a deadline.</li>
<li><strong>No record.</strong> If you can't show what was done and when, it didn't happen as far as an auditor is concerned.</li>
</ul>
<p>This is general guidance. Check your own legal, HR and data-retention requirements before deleting accounts or data.</p>
<p><strong>Resources:</strong> <a href="https://runbookfoundry.pages.dev/templates/offboarding-checklist?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=resources">Free IT offboarding checklist</a>. I make these templates.</p>
<p><em>Drafted with AI assistance and reviewed for accuracy.</em></p>
<p><em>Not affiliated with, endorsed by, or sponsored by Microsoft or Google. Microsoft 365, Entra and Intune are trademarks of Microsoft; Google Workspace is a trademark of Google LLC.</em></p>
]]></content:encoded></item><item><title><![CDATA[A Conditional Access Baseline for Small Microsoft Entra Tenants (Report-Only First)]]></title><description><![CDATA[Originally published at Conditional Access is the most useful security control in a Microsoft 365 tenant and the easiest one to lock yourself out with. One…]]></description><link>https://runbookfoundry.hashnode.dev/a-conditional-access-baseline-for-small-microsoft-entra-tenants-report-only-first</link><guid isPermaLink="true">https://runbookfoundry.hashnode.dev/a-conditional-access-baseline-for-small-microsoft-entra-tenants-report-only-first</guid><category><![CDATA[Microsoft]]></category><category><![CDATA[Security]]></category><category><![CDATA[Small business]]></category><dc:creator><![CDATA[Runbook Foundry]]></dc:creator><pubDate>Tue, 27 Oct 2026 00:26:04 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally published at</em> <a href="https://dev.to/runbookfoundry/a-conditional-access-baseline-for-small-microsoft-entra-tenants-report-only-first-2gb5"><em>https://dev.to/runbookfoundry/a-conditional-access-baseline-for-small-microsoft-entra-tenants-report-only-first-2gb5</em></a><em>.</em></p>
<p>Conditional Access is the most useful security control in a Microsoft 365 tenant and the easiest one to lock yourself out with. One badly scoped "block" policy can stop every admin from signing in, including you.</p>
<p>The answer isn't to avoid it. It's to build a small, boring baseline, test each policy in <strong>report-only mode</strong>, and only then switch it on. This guide covers which policies to start with in a small tenant (roughly 5 to 300 users), how to read the report-only results, and a rollout order that doesn't wreck anyone's Monday.</p>
<p>Menu paths and recommendations were checked against Microsoft Learn in October 2026. Microsoft renames things often, so treat the docs as the source of truth if a label has moved.</p>
<h2>Prerequisites</h2>
<p><strong>Licensing.</strong> Conditional Access needs Microsoft Entra ID P1, which is included in Microsoft 365 Business Premium and E3/E5. Risk-based policies need P2. If you only have the free tier, use <strong>security defaults</strong> instead. They give you MFA registration, admin MFA, legacy authentication blocking and device code flow blocking with no configuration.</p>
<p><strong>Security defaults vs Conditional Access.</strong> You can't run both. Microsoft's guidance is that organizations replacing security defaults with Conditional Access must turn security defaults off (<strong>Entra ID &gt; Overview &gt; Properties &gt; Manage security defaults</strong>), and should then turn on Conditional Access policies straight away so there's no gap. Plan that switch for a quiet time and have your policies ready first.</p>
<p><strong>Check for Microsoft-managed policies.</strong> Open <strong>Entra ID &gt; Conditional Access &gt; Policies</strong> and look at the <em>Created by</em> column. Microsoft creates some policies in your tenant in report-only mode, for example MFA for all users, MFA for admins accessing admin portals, blocking legacy authentication and blocking device code flow. According to Microsoft Learn, they're switched on no less than 30 days after they're introduced unless you turn them off, and you'll get email and Message center notice two weeks before. Know what's there so nothing surprises you, and add your emergency access exclusions to them too.</p>
<p><strong>Role.</strong> You need at least the Conditional Access Administrator role to create policies.</p>
<h2>Step 0: Emergency access accounts</h2>
<p>Do this before anything else. Microsoft recommends <strong>two or more</strong> emergency access ("break-glass") accounts:</p>
<ul>
<li>Cloud-only accounts on your <code>*.onmicrosoft.com</code> domain, not synced or federated</li>
<li>Permanently assigned Global Administrator</li>
<li>Protected with a <strong>passkey (FIDO2)</strong> or certificate-based authentication, using a different method from your normal admin accounts</li>
<li>Credentials stored securely, in separate locations, and not tied to one person's phone</li>
<li>Sign-in alerts set up, so any use is noticed</li>
<li>Tested at least every 90 days</li>
</ul>
<p>Put both accounts in a security group such as <code>CA-Exclude-EmergencyAccess</code>. Exclude that group from every policy that blocks or restricts sign-in. Microsoft notes that report-only policies don't strictly need the exclusion, but add it from day one anyway, so it's already there when you switch the policy on.</p>
<p>Also make a list of <strong>service accounts</strong> and anything that signs in non-interactively, such as the Entra Connect sync account if you use hybrid identity, or a scanner that sends email. These need deliberate handling, not blanket exclusions.</p>
<h2>The starter baseline: six policies</h2>
<p>Use a clear naming standard so the list is readable at a glance, for example <code>CA01-AllUsers-Block-LegacyAuth</code>. Every policy below starts with <strong>Enable policy = Report-only</strong>.</p>
<h3>CA01: Block legacy authentication</h3>
<ul>
<li><strong>Users:</strong> All users. Exclude the emergency access group.</li>
<li><strong>Target resources:</strong> All resources.</li>
<li><strong>Conditions &gt; Client apps:</strong> Configure = Yes. Check only <em>Exchange ActiveSync clients</em> and <em>Other clients</em>.</li>
<li><strong>Grant:</strong> Block access.</li>
</ul>
<p>Legacy protocols can't do MFA, and Microsoft's analysis attributes the large majority of password spray attacks to them. Before enforcing, check who still uses them: <strong>Entra ID &gt; Monitoring &amp; health &gt; Sign-in logs</strong>, add the <em>Client app</em> column, filter to the legacy protocols, and check the <em>non-interactive</em> sign-ins tab too. The usual culprits are old multifunction printers, line-of-business apps and ancient mail clients.</p>
<h3>CA02: Require MFA for all users</h3>
<ul>
<li><strong>Users:</strong> All users. Exclude the emergency access group (and the directory synchronization accounts role if you use Entra Connect).</li>
<li><strong>Target resources:</strong> All resources, with no app exclusions.</li>
<li><strong>Grant:</strong> Grant access &gt; <em>Require authentication strength</em> &gt; the built-in <strong>Multifactor authentication</strong> strength.</li>
</ul>
<p>Microsoft's tip is that every organization should have this baseline: all users, all resources, MFA. Resist adding "trusted office IP" exclusions unless you really need them. Attackers don't sit in your office, but stolen sessions and compromised devices can look like they do.</p>
<h3>CA03: Require phishing-resistant MFA for admins</h3>
<ul>
<li><strong>Users:</strong> Directory roles. Include at least Global Administrator, Privileged Role Administrator, Security Administrator, Conditional Access Administrator, Exchange Administrator, SharePoint Administrator, User Administrator, Helpdesk Administrator, Authentication Administrator, Privileged Authentication Administrator, Application Administrator, Cloud Application Administrator, Password Administrator and Billing Administrator. Exclude the emergency access group.</li>
<li><strong>Target resources:</strong> All resources.</li>
<li><strong>Grant:</strong> Require authentication strength &gt; <strong>Phishing-resistant MFA</strong>.</li>
</ul>
<p><strong>Warning:</strong> make sure every admin has registered a passkey (FIDO2), Windows Hello for Business or certificate-based authentication first, using a Temporary Access Pass if needed. Turning this on before they're registered is the classic lockout. Also note that Conditional Access only targets built-in roles. Custom and administrative-unit-scoped roles aren't covered.</p>
<h3>CA04: Require MFA for Microsoft admin portals</h3>
<ul>
<li><strong>Users:</strong> The same admin roles as CA03. Exclude the emergency access group.</li>
<li><strong>Target resources:</strong> Select resources &gt; <strong>Microsoft Admin Portals</strong>.</li>
<li><strong>Grant:</strong> Require authentication strength &gt; Multifactor authentication.</li>
</ul>
<p>This overlaps with CA02 and CA03 on purpose. If someone later edits or scopes down one policy, this one still protects the admin portals.</p>
<h3>CA05: Secure security info registration</h3>
<ul>
<li><strong>Users:</strong> All users. Exclude all guest and external users, and the emergency access group.</li>
<li><strong>Target resources:</strong> User actions &gt; <strong>Register security information</strong>.</li>
<li><strong>Conditions &gt; Locations:</strong> Include Any location. Exclude All trusted locations.</li>
<li><strong>Grant:</strong> Require authentication strength.</li>
</ul>
<p>This stops an attacker who has just phished a password from registering their own MFA method. Issue new starters a Temporary Access Pass so they can register from anywhere. One caveat: report-only mode doesn't evaluate policies scoped to User actions, so you won't get report-only data for this one. Test it on a small test group instead. Microsoft also notes that from July 6, 2026, these policies apply during Windows Hello for Business and macOS Platform SSO registration, so test those flows if you use them.</p>
<h3>CA06: Block device code flow</h3>
<ul>
<li><strong>Users:</strong> All users. Exclude the emergency access group and any documented exceptions.</li>
<li><strong>Target resources:</strong> All resources.</li>
<li><strong>Conditions &gt; Authentication flows:</strong> Configure = Yes, select <em>Device code flow</em>.</li>
<li><strong>Grant:</strong> Block access.</li>
</ul>
<p>Device code flow is rarely needed in small businesses but often abused in phishing. If you have Teams Rooms or similar shared devices that rely on it, scope a narrow exception rather than leaving the flow open to everyone.</p>
<h2>Next-wave policies (after the baseline is on)</h2>
<ul>
<li><strong>MFA for guests.</strong> Include guest and external users, target all resources, require MFA (if CA02 doesn't already cover them).</li>
<li><strong>Risk-based policies (P2).</strong> Require MFA for medium-or-higher sign-in risk and a secure password change for high user risk.</li>
<li><strong>Block countries you don't operate in</strong>, using a named location. Treat it as noise reduction, not a strong control, because VPNs get around it.</li>
<li><strong>Device-based access</strong> once Intune enrollment is in good shape, plus app protection on mobile.</li>
<li><strong>Shorter admin sessions:</strong> sign-in frequency and no persistent browser for admin roles.</li>
</ul>
<h2>Running report-only properly</h2>
<p>Report-only means the policy is evaluated at every sign-in and logged, but nothing is enforced. Users aren't prompted and nobody is blocked. Give each policy <strong>at least 7 days</strong>, and 14 if your business has weekly or month-end cycles.</p>
<p>Three places to look:</p>
<ol>
<li><strong>Policy impact.</strong> Open the policy and select the <em>Policy impact</em> view. It shows what the policy would have done to interactive sign-ins over the past 24 hours, 7 days or month. It needs at least the Security Reader role.</li>
<li><strong>Sign-in logs.</strong> <strong>Entra ID &gt; Monitoring &amp; health &gt; Sign-in logs</strong>, open a sign-in and check the <em>Report-only</em> tab. Results are:<ul>
<li><em>Report-only: Success</em>: would have been allowed</li>
<li><em>Report-only: Failure</em>: would have been blocked. Investigate every one.</li>
<li><em>Report-only: User action required</em>: the user would have been prompted (for example, for MFA)</li>
<li><em>Report-only: Not applied</em>: conditions didn't match, for example an excluded user</li>
</ul>
</li>
<li><strong>Conditional Access insights workbook</strong>, if you send sign-in logs to a Log Analytics workspace. It's best for seeing several policies together.</li>
</ol>
<p>For each <em>Failure</em>, decide: is it an attacker (good, the policy works), a legacy device that needs replacing, or a legitimate scenario that needs a narrow, documented exclusion?</p>
<p><strong>A report-only quirk:</strong> policies that require a managed device can still pop a certificate prompt on macOS, iOS and Android during evaluation. Microsoft's advice is to exclude those platforms from report-only device policies.</p>
<h2>Switching policies on</h2>
<p>Turn on one policy at a time, in this order:</p>
<ol>
<li><strong>CA01</strong> (block legacy auth), once the sign-in logs show no legitimate legacy use</li>
<li><strong>CA04</strong>, then <strong>CA03</strong> (admins first; it's a small group you can help in person)</li>
<li><strong>CA02</strong> (all users), after a user communication with the date and how to register</li>
<li><strong>CA05</strong> and <strong>CA06</strong></li>
</ol>
<p>For each one:</p>
<ul>
<li><input disabled type="checkbox" /> Report-only for 7 to 14 days with no unexplained failures</li>
<li><input disabled type="checkbox" /> Exclusions documented with an owner and a review date</li>
<li><input disabled type="checkbox" /> Help desk told what to expect and how to issue a Temporary Access Pass</li>
<li><input disabled type="checkbox" /> Emergency access account sign-in tested</li>
<li><input disabled type="checkbox" /> Switch <em>Enable policy</em> from Report-only to <strong>On</strong></li>
<li><input disabled type="checkbox" /> Watch sign-in logs closely for the first 48 hours</li>
<li><input disabled type="checkbox" /> Rollback plan ready: switch the policy back to Report-only, rather than deleting it</li>
</ul>
<h2>Keeping it healthy</h2>
<ul>
<li>Review exclusions every 90 days. Exclusions are where baselines quietly die.</li>
<li>Export your policies (JSON via Microsoft Graph) after every change, so you have a backup and a history.</li>
<li>Test the emergency access accounts quarterly.</li>
<li>Review any new Microsoft-managed policies when Message center announces them.</li>
</ul>
<p>A small tenant with these six policies on, real emergency access accounts and documented exclusions is ahead of most organizations its size, and you got there without locking anyone out.</p>
<hr />
<p><strong>Resources:</strong> <a href="https://runbookfoundry.gumroad.com/l/free-m365-gws-hardening-checklist?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=launch30">Free M365 + Google Workspace hardening checklist</a> · Full pack with 16 report-only policy JSONs, a safe PowerShell deployer and a rollout runbook: <a href="https://runbookfoundry.gumroad.com/l/conditional-access-policies-baseline?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=launch30">Conditional Access Policies Baseline</a> ($59). I make these templates.</p>
<p><em>Drafted with AI assistance and reviewed for accuracy.</em></p>
<p><em>Not affiliated with Microsoft or Google.</em></p>
]]></content:encoded></item><item><title><![CDATA[How to Write an AI Acceptable Use Policy for Employees (With a Sample Outline)]]></title><description><![CDATA[Originally published at Your staff are already using AI tools. Someone is pasting meeting notes into a chatbot to get a summary. Someone else installed a…]]></description><link>https://runbookfoundry.hashnode.dev/how-to-write-an-ai-acceptable-use-policy-for-employees-with-a-sample-outline</link><guid isPermaLink="true">https://runbookfoundry.hashnode.dev/how-to-write-an-ai-acceptable-use-policy-for-employees-with-a-sample-outline</guid><category><![CDATA[AI]]></category><category><![CDATA[Security]]></category><category><![CDATA[Small business]]></category><dc:creator><![CDATA[Runbook Foundry]]></dc:creator><pubDate>Tue, 27 Oct 2026 00:25:13 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally published at</em> <a href="https://dev.to/runbookfoundry/how-to-write-an-ai-acceptable-use-policy-for-employees-with-a-sample-outline-4omh"><em>https://dev.to/runbookfoundry/how-to-write-an-ai-acceptable-use-policy-for-employees-with-a-sample-outline-4omh</em></a><em>.</em></p>
<p>Your staff are already using AI tools. Someone is pasting meeting notes into a chatbot to get a summary. Someone else installed a browser extension that "writes better emails". A manager is asking an assistant to rank job applicants. None of this is necessarily bad, but without rules you have no idea which company data has gone where, and nobody knows what they're allowed to do.</p>
<p>An AI acceptable use policy (AUP) fixes that. It doesn't need to be long. The best ones fit on a page or two, use plain language, and answer the three questions employees actually have: <em>Which tools can I use? What can I put into them? What am I still responsible for?</em></p>
<p>This guide walks through how to write one for a small or mid-sized organization, with examples and a short sample outline you can adapt.</p>
<h2>Why a short policy beats a perfect one</h2>
<p>Small businesses tend to stall on AI policy because it feels like it needs a lawyer, a committee and a risk framework. Those things help later. Right now, the biggest risks are simple and common:</p>
<ul>
<li><strong>Data leakage:</strong> confidential or personal data pasted into a consumer tool whose terms allow the provider to keep or train on it</li>
<li><strong>Unchecked output:</strong> AI-drafted content sent to customers with wrong facts, made-up references or someone else's copyrighted text</li>
<li><strong>Automated decisions about people:</strong> screening, scoring or disciplining staff or applicants with no human review</li>
<li><strong>Shadow tools:</strong> extensions, plugins and "AI features" quietly switched on inside apps you already pay for</li>
</ul>
<p>A clear one-page policy published this month addresses all four. You can build the fuller program (tool intake reviews, an AI inventory, vendor contract terms) over the following quarter.</p>
<h2>Step 1: Decide who owns it</h2>
<p>Pick one accountable owner. In a small business that's usually the IT lead, operations manager or whoever owns security. Name a second approver from HR or leadership. Write both into the policy header along with an effective date and a review date (at least annually; AI tools change fast, so six months is better).</p>
<h2>Step 2: Inventory what people already use</h2>
<p>Before writing rules, find out what's happening. A 10-minute anonymous survey works well:</p>
<ol>
<li>Which AI tools have you used for work in the last month?</li>
<li>Are you signed in with a work account, a personal account or no account?</li>
<li>What do you use them for (drafting, summarizing, coding, research, images, meetings)?</li>
<li>Have you ever pasted customer, employee or financial information into one?</li>
<li>What would you like to use AI for but haven't, because you weren't sure it was allowed?</li>
</ol>
<p>Pair it with a quick technical check: browser extensions on managed devices, OAuth apps connected to your email and file storage, and AI features enabled in your existing SaaS admin consoles. The answers will tell you which tools to approve, which to block and where the real data risk is.</p>
<h2>Step 3: Define approved tools in tiers</h2>
<p>A tiered model is easier for staff than a long allow/deny list:</p>
<table>
<thead>
<tr>
<th>Tier</th>
<th>What it means</th>
<th>Example</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Approved for internal data</strong></td>
<td>Company-licensed, signed in with a work account, with contract terms that say your data isn't used to train models</td>
<td>The assistant built into your company's office suite, if your plan's terms cover this</td>
</tr>
<tr>
<td><strong>Approved for public data only</strong></td>
<td>Fine for brainstorming or rewriting public information. No company or personal data.</td>
<td>A free chatbot used to draft a generic job ad</td>
</tr>
<tr>
<td><strong>Not approved</strong></td>
<td>Blocked or forbidden for company work</td>
<td>Unvetted browser extensions, apps that want access to your whole mailbox</td>
</tr>
</tbody></table>
<p>Keep the actual list on a separate page (an intranet page or shared doc) and link it from the policy, so you can update tools without re-approving the policy.</p>
<h2>Step 4: Write data rules people can apply in five seconds</h2>
<p>This is the most important section. Tie it to the data categories you already use, or define simple ones:</p>
<table>
<thead>
<tr>
<th>Data type</th>
<th>Approved for internal data</th>
<th>Public-only tools</th>
</tr>
</thead>
<tbody><tr>
<td>Public information (website copy, published docs)</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>Internal (non-sensitive notes, process docs)</td>
<td>Yes</td>
<td>No</td>
</tr>
<tr>
<td>Confidential (financials, contracts, strategy, source code)</td>
<td>Only if the tool is explicitly approved for it</td>
<td>No</td>
</tr>
<tr>
<td>Personal data (customer or employee details)</td>
<td>Only if the tool is explicitly approved for it</td>
<td>No</td>
</tr>
<tr>
<td>Credentials (passwords, API keys, tokens)</td>
<td>Never</td>
<td>Never</td>
</tr>
</tbody></table>
<p>Add a tie-breaker: <strong>"When unsure, treat it as confidential and ask."</strong></p>
<p>Worked examples help more than definitions. Include three or four:</p>
<ul>
<li>✅ "Summarize these anonymized meeting notes" in the company assistant</li>
<li>✅ "Suggest five subject lines for this public product announcement" in any approved tool</li>
<li>❌ "Here's our customer export, find the churn risks" in a personal chatbot account</li>
<li>❌ "Debug this script" when the script contains a live API key</li>
</ul>
<h2>Step 5: Make humans accountable for output</h2>
<p>AI output is a draft, not a source. The policy should say plainly:</p>
<ul>
<li>You are responsible for anything you send, publish or act on, however it was produced.</li>
<li>Check facts, numbers, names and references before use. AI tools can confidently invent all four.</li>
<li>Check for bias, security problems (especially in generated code) and copied material.</li>
<li><strong>AI must not make final decisions about people</strong>: hiring, performance, pay, discipline, credit or access. A person reviews and documents the decision.</li>
</ul>
<h2>Step 6: Be clear on transparency</h2>
<p>Decide when people must disclose AI use. A practical rule: disclose when content is substantially AI-generated <strong>and</strong> it's customer-facing, published, legal, or the customer or contract requires it. Internal drafts usually don't need a label. Never present AI output as independently verified fact without checking it.</p>
<h2>Step 7: List what's prohibited</h2>
<p>Keep this short and concrete:</p>
<ul>
<li>Creating deceptive, harassing, discriminatory or illegal content</li>
<li>Impersonating real people (voice, image or writing) without consent</li>
<li>Generating malware or trying to get around security controls</li>
<li>Recording or transcribing colleagues or customers without the notice and consent the law and your policies require</li>
<li>Using personal AI accounts for company work</li>
<li>Connecting AI tools or extensions to company email, files or systems without IT approval</li>
</ul>
<h2>Step 8: Say how to report problems</h2>
<p>Mistakes will happen. Make it safe to report them quickly: "If you think you've put the wrong data into an AI tool, or you see unapproved AI use, tell [contact] right away. Reporting in good faith will not be held against you." That sentence does more for security than any monitoring tool.</p>
<h2>Step 9: Exceptions, enforcement and acknowledgment</h2>
<ul>
<li><strong>Exceptions:</strong> written approval from a named role, recorded with an expiry date.</li>
<li><strong>Enforcement:</strong> point to your existing disciplinary process rather than inventing a new one.</li>
<li><strong>Acknowledgment:</strong> a signature line or an e-sign step at the bottom. You'll want a record that people read it.</li>
</ul>
<h2>Sample AI acceptable use policy outline</h2>
<p>Here is a short outline you can turn into a one- or two-page policy. Replace the bracketed fields.</p>
<ol>
<li><strong>Purpose and scope.</strong> Covers generative AI tools (chatbots, writing, coding, image and meeting assistants, and AI features inside existing apps). Applies to all employees, contractors and temporary staff on any device when company work or data is involved.</li>
<li><strong>Approved tools.</strong> Use only tools on the Approved AI Tools list at [link], signed in with your company account. Request new tools, extensions or AI features from [contact] before use.</li>
<li><strong>Data rules.</strong> The data table above, plus "never enter credentials" and "when unsure, treat as confidential."</li>
<li><strong>Human review and accountability.</strong> You own the output. Verify before use. No final decisions about people without documented human review.</li>
<li><strong>Transparency.</strong> Disclose substantial AI use in customer-facing, published or legal material, or where required.</li>
<li><strong>Prohibited uses.</strong> The list from Step 7.</li>
<li><strong>Security and incident reporting.</strong> Report data mistakes and unapproved use to [contact]. Good-faith reports are protected.</li>
<li><strong>Exceptions and enforcement.</strong> Written exceptions from [role]. Violations handled under existing policies.</li>
<li><strong>Ownership and review.</strong> Owner [name/role], approver [name/role], effective [date], next review [date].</li>
<li><strong>Acknowledgment.</strong> Name, signature, date.</li>
</ol>
<h2>Rolling it out in two weeks</h2>
<p><strong>Week 1</strong></p>
<ul>
<li><input disabled type="checkbox" /> Run the usage survey and the technical check</li>
<li><input disabled type="checkbox" /> Draft the policy using the outline above</li>
<li><input disabled type="checkbox" /> Publish the Approved AI Tools list (start with two or three tools)</li>
<li><input disabled type="checkbox" /> Have HR and, ideally, legal counsel review it</li>
</ul>
<p><strong>Week 2</strong></p>
<ul>
<li><input disabled type="checkbox" /> Leadership approves and announces it, ideally in a short all-hands slot rather than only by email</li>
<li><input disabled type="checkbox" /> Collect acknowledgments</li>
<li><input disabled type="checkbox" /> Turn off or restrict AI features and extensions that aren't on the approved list, using your admin consoles</li>
<li><input disabled type="checkbox" /> Put a review date in the calendar</li>
</ul>
<p><strong>Afterwards:</strong> add a simple intake form for new tool requests, keep a list of the AI tools and features in use, and check that the contracts for your approved tools cover data use, retention and training the way you expect.</p>
<h2>Common mistakes to avoid</h2>
<ul>
<li><strong>Banning everything.</strong> People will use personal accounts anyway, and you lose visibility. Approve something useful.</li>
<li><strong>Writing for lawyers.</strong> If staff can't apply it in five seconds, they won't.</li>
<li><strong>Forgetting built-in AI.</strong> The biggest exposure is often an AI feature switched on by default in a tool you already use.</li>
<li><strong>Publishing and walking away.</strong> Tools, terms and features change quarterly. Review the list at least that often.</li>
</ul>
<p>This is general guidance, not legal advice. Have qualified counsel review your final policy, especially if you handle regulated data or operate in several jurisdictions.</p>
<hr />
<p><strong>Resources:</strong> <a href="https://runbookfoundry.gumroad.com/l/free-ai-acceptable-use-policy?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=launch30">Free AI acceptable use policy template</a> · Full kit with a tool intake questionnaire, vendor AI clause checklist and NIST AI RMF workbook: <a href="https://runbookfoundry.gumroad.com/l/ai-acceptable-use-policy-template?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=launch30">AI Acceptable Use Policy Template + AI Governance Kit</a> ($39). I make these templates.</p>
<p><em>Drafted with AI assistance and reviewed for accuracy.</em></p>
<p><em>Not affiliated with Microsoft or Google.</em></p>
]]></content:encoded></item><item><title><![CDATA[Google Workspace Security Audit: 25 Settings to Check Today (With Admin Console Paths)]]></title><description><![CDATA[Originally published at Most Google Workspace tenants at small businesses were set up in an afternoon, years ago, by whoever was handy. The defaults are…]]></description><link>https://runbookfoundry.hashnode.dev/google-workspace-security-audit-25-settings-to-check-today-with-admin-console-paths</link><guid isPermaLink="true">https://runbookfoundry.hashnode.dev/google-workspace-security-audit-25-settings-to-check-today-with-admin-console-paths</guid><category><![CDATA[Security]]></category><category><![CDATA[Google Workspace]]></category><category><![CDATA[Small business]]></category><dc:creator><![CDATA[Runbook Foundry]]></dc:creator><pubDate>Tue, 27 Oct 2026 00:23:56 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally published at</em> <a href="https://dev.to/runbookfoundry/google-workspace-security-audit-25-settings-to-check-today-with-admin-console-paths-i44"><em>https://dev.to/runbookfoundry/google-workspace-security-audit-25-settings-to-check-today-with-admin-console-paths-i44</em></a><em>.</em></p>
<p>Most Google Workspace tenants at small businesses were set up in an afternoon, years ago, by whoever was handy. The defaults are reasonable, but "reasonable" leaves gaps: one super admin with SMS codes, mail forwarding open to anyone, Drive links shared with "anyone on the internet", and OAuth apps nobody remembers approving.</p>
<p>This is a read-first audit. Work through the 25 settings below, write down what you find, and only then decide what to change. Every path starts from the Google Admin console (<a href="http://admin.google.com">admin.google.com</a>) and was checked against Google's current admin help pages in October 2026. Google moves menus around, so if a path doesn't match, search the setting name in the console's search bar.</p>
<h2>Before you start</h2>
<ul>
<li><strong>Use a super admin account</strong>, but not your daily one if you can avoid it. Some settings below are visible only to super admins.</li>
<li><strong>Record, don't fix.</strong> Make a simple sheet with four columns: Setting, Current value, Recommended, Action. Changes go through a test organizational unit (OU) first.</li>
<li><strong>Know your OUs.</strong> Most settings can be applied per OU or per group. A setting can look right at the top level and be overridden for one department. Check the left-hand OU panel on each page.</li>
<li><strong>Check your edition.</strong> A few items depend on edition. Where that matters, it's noted.</li>
</ul>
<h2>Admin accounts and sign-in (1 to 8)</h2>
<p><strong>1. How many super admins you have</strong> Path: <strong>Account &gt; Admin roles &gt; Super Admin</strong>, then view the assigned admins. Target: two to four named people. One is a single point of failure; ten means ten accounts that can take over the tenant. Use narrower prebuilt or custom roles for help desk work.</p>
<p><strong>2. Super admins have separate admin-only accounts</strong> Path: <strong>Directory &gt; Users</strong>, open each super admin, then <strong>Admin roles and privileges</strong>. Target: the super admin identity is not the same account used for daily email, browsing and chat. Daily accounts are the most phished.</p>
<p><strong>3. Super admin self-recovery</strong> Path: <strong>Security &gt; Authentication &gt; Account recovery &gt; Super admin account recovery</strong>. Target: a deliberate decision. Google recommends turning self-recovery off if you have several super admins who can help each other. If you leave it on, make sure each super admin's recovery phone and email belong to them and are current.</p>
<p><strong>4. 2-Step Verification is allowed and enforced</strong> Path: <strong>Security &gt; Authentication &gt; 2-step verification</strong>. Target: "Allow users to turn on 2-Step Verification" checked, and Enforcement set to On (or "Turn on enforcement from date") for every OU. Set a short new-user enrollment period, such as one to two weeks. Google is also enforcing 2SV for administrator accounts.</p>
<p><strong>5. Phishing-resistant 2SV for admins</strong> Path: same page, select the OU or group that holds your admins, then <strong>Methods</strong>. Target: "Only security key". Google's help notes that this option now accepts passkeys as well as hardware keys. Check who has keys enrolled first (<strong>Reporting &gt; User Reports &gt; Security</strong>) so you don't lock anyone out, and generate backup codes for emergencies.</p>
<p><strong>6. Passkeys allowed</strong> Path: <strong>Security &gt; Authentication &gt; Passwordless &gt; Skip passwords</strong>. Target: "Allow users to skip their password and authenticate with a passkey" checked, at least for a test OU. Passkeys are phishing-resistant and usually easier for staff than codes.</p>
<p><strong>7. Password policy</strong> Path: <strong>Security &gt; Authentication &gt; Password management</strong>. Target: enforce strong passwords, a minimum length of at least 12 characters, "Enforce password policy at next sign-in" checked, and password reuse not allowed. Avoid forced periodic expiry, which tends to produce weaker passwords.</p>
<p><strong>8. Web session length</strong> Path: <strong>Security &gt; Access and data control &gt; Google session control</strong>. Target: a defined session duration rather than "never expires", for example 12 to 24 hours for most users and shorter for admins. Shorter sessions limit the value of a stolen session cookie.</p>
<h2>Email (9 to 16)</h2>
<p><strong>9. SPF, DKIM and DMARC</strong> Path for DKIM: <strong>Apps &gt; Google Workspace &gt; Gmail &gt; Authenticate email</strong>. SPF and DMARC live at your DNS host. Target: DKIM generated and authenticating for every sending domain (2048-bit where your DNS host allows it). One valid SPF record per domain. A DMARC record that moves from <code>p=none</code> with reporting to <code>p=quarantine</code> or <code>p=reject</code> once legitimate senders are aligned.</p>
<p><strong>10. Enhanced pre-delivery message scanning</strong> Path: <strong>Apps &gt; Google Workspace &gt; Gmail &gt; Spam, Phishing and Malware</strong>. Target: enhanced pre-delivery scanning turned on. It lets Gmail take a little longer to catch phishing before it reaches the inbox.</p>
<p><strong>11. Attachment protections</strong> Path: <strong>Apps &gt; Google Workspace &gt; Gmail &gt; Safety</strong>, then <strong>Attachments</strong>. Target: protection against encrypted attachments, attachments with scripts and anomalous attachment types turned on, with an action stronger than the default warning (spam or quarantine). Check "Apply future recommended settings automatically".</p>
<p><strong>12. Link and external image protections</strong> Path: <strong>Apps &gt; Google Workspace &gt; Gmail &gt; Safety</strong>, then <strong>Links and external images</strong>. Target: identify links behind shortened URLs, scan linked images, warn on clicks to untrusted domains, and apply future recommended settings automatically.</p>
<p><strong>13. Spoofing and authentication protections</strong> Path: <strong>Apps &gt; Google Workspace &gt; Gmail &gt; Safety</strong>, then <strong>Spoofing and authentication</strong>. Target: all five protections on (similar domain names, employee name spoofing, inbound mail spoofing your domain, unauthenticated mail, and Groups protection). These directly reduce invoice and CEO-fraud email.</p>
<p><strong>14. Automatic forwarding</strong> Path: <strong>Apps &gt; Google Workspace &gt; Gmail &gt; End User Access</strong>, then <strong>Automatic forwarding</strong>. Target: "Allow users to automatically forward incoming email to another address" unchecked for most OUs. Attackers set up forwarding to quietly copy a mailbox after a takeover. Allow it only for OUs with a documented need.</p>
<p><strong>15. POP and IMAP access</strong> Path: <strong>Apps &gt; Google Workspace &gt; Gmail &gt; End User Access</strong>, then <strong>POP and IMAP access</strong>. Target: off, unless an OU has a documented client that needs it. Older mail clients are a common way around modern sign-in protections.</p>
<p><strong>16. External recipient warning</strong> Path: <strong>Apps &gt; Google Workspace &gt; Gmail &gt; End User Access</strong>, then the external recipient warning setting. Target: on. It catches misaddressed email and replies to look-alike domains.</p>
<h2>Sharing and collaboration (17 to 19)</h2>
<p><strong>17. Drive external sharing</strong> Path: <strong>Apps &gt; Google Workspace &gt; Drive and Docs &gt; Sharing settings &gt; Sharing options</strong>. Target: external sharing either off or limited to allowlisted domains for sensitive OUs. Where it stays on, warn users when sharing outside the organization and don't let files be published to the web without review. Then review what's already shared publicly. Settings stop new exposure but don't fix the old.</p>
<p><strong>18. Calendar external sharing</strong> Path: <strong>Apps &gt; Google Workspace &gt; Calendar &gt; Sharing settings</strong>. Target: external sharing of primary calendars set to "Only free/busy information". Full details leak meeting titles, dial-ins and who reports to whom.</p>
<p><strong>19. Groups for Business sharing</strong> Path: <strong>Apps &gt; Google Workspace &gt; Groups for Business &gt; Sharing settings</strong>. Target: external access to groups restricted by default, and group owners not able to let people outside the organization join. Then check that no group lets "anyone on the web" view or post.</p>
<h2>Apps, API access and AI (20 to 23)</h2>
<p><strong>20. Third-party app access (OAuth)</strong> Path: <strong>Security &gt; Access and data control &gt; API controls</strong>, then <strong>Manage App Access</strong> and <strong>Settings</strong>. Target: review every app with access to Gmail, Drive or admin data, and mark each one Trusted, Limited or Blocked on purpose. Under Settings, decide what users can do with unconfigured third-party apps. Restricting access to high-risk Google data such as Gmail and Drive is a strong default.</p>
<p><strong>21. Domain-wide delegation</strong> Path: <strong>Security &gt; Access and data control &gt; API controls &gt; Manage Domain Wide Delegation</strong>. Target: every client ID has a known owner, a current purpose and the minimum scopes. Delete anything nobody can explain. Domain-wide delegation lets a service act as any user, so treat it as a crown-jewel credential.</p>
<p><strong>22. Marketplace app installs</strong> Path: <strong>Apps &gt; Google Workspace Marketplace apps &gt; Apps list &gt; User Install Settings</strong>. Target: "Allow users to install and run only selected apps" (allowlisted apps), with a simple request process for new ones.</p>
<p><strong>23. Gemini and AI access</strong> Path: <strong>Generative AI &gt; Gemini app</strong>. Target: access turned on only for the OUs or groups your AI acceptable use policy covers. Make sure staff know which AI tools are approved and what data they may use with them. Tidy your Drive sharing (item 17) first, because AI assistants can surface whatever a user already has access to.</p>
<h2>Devices, data and monitoring (24 and 25)</h2>
<p><strong>24. Mobile device management</strong> Path: <strong>Devices &gt; Mobile &amp; endpoints &gt; Settings &gt; Universal &gt; General &gt; Mobile management</strong>. Target: at least Basic management, with a screen lock required, so you can sign a lost phone out of company data. Use Advanced where your edition supports it and you need device approval or full wipe.</p>
<p><strong>25. Takeout and alerting</strong> Paths: <strong>Data &gt; Data import &amp; export &gt; Google Takeout</strong> and <strong>Security &gt; Alert center</strong>. Target: Google Takeout turned off for departing-user and sensitive OUs, so a leaver can't bulk-download their mailbox and Drive. In the Alert center, make sure alerts such as suspicious login, leaked password, government-backed attack and super admin changes reach a mailbox someone actually reads. An alert nobody sees isn't an alert.</p>
<h2>Scoring your audit</h2>
<p>Give each item a status: <strong>OK</strong>, <strong>Gap</strong>, or <strong>Accepted risk</strong> (with a reason and an owner). Then sort the gaps:</p>
<ul>
<li><strong>This week:</strong> 1, 4, 5, 9, 13, 14, 20. These close the most common account takeover and business email compromise paths.</li>
<li><strong>This month:</strong> 2, 3, 7, 11, 12, 15, 17, 21, 25.</li>
<li><strong>This quarter:</strong> everything else, plus a review of existing public Drive shares.</li>
</ul>
<h2>Making changes safely</h2>
<ol>
<li><strong>Test first.</strong> Create a "Test-Security" OU with IT and one or two willing staff. Apply the change there and wait a few days.</li>
<li><strong>Communicate before enforcing.</strong> Tell people what's changing, when, and what they need to do (for example, enroll a passkey before the 2SV date).</li>
<li><strong>Have a way back in.</strong> Keep at least one tested super admin with a hardware key stored securely before you tighten admin 2SV.</li>
<li><strong>Write it down.</strong> Log the date, the setting, the old value and the new value. When something breaks next month, the change log is the first place you'll look.</li>
<li><strong>Re-audit quarterly.</strong> Google adds new settings, staff change and exceptions creep back in.</li>
</ol>
<hr />
<p><strong>Resources:</strong> <a href="https://runbookfoundry.gumroad.com/l/free-m365-gws-hardening-checklist?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=launch30">Free M365 + Google Workspace hardening checklist</a> · Full 82-control version with a scored workbook and read-only GAM scripts: <a href="https://runbookfoundry.gumroad.com/l/google-workspace-security-audit-checklist?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=launch30">Google Workspace Security Audit Checklist</a> ($39). I make these templates.</p>
<p><em>Drafted with AI assistance and reviewed for accuracy.</em></p>
<p><em>Not affiliated with Microsoft or Google.</em></p>
]]></content:encoded></item><item><title><![CDATA[How to Run a Ransomware Tabletop Exercise for a Small Business in 90 Minutes]]></title><description><![CDATA[Originally published at Most small businesses have some kind of incident response plan. Far fewer have ever said it out loud with the people who would…]]></description><link>https://runbookfoundry.hashnode.dev/how-to-run-a-ransomware-tabletop-exercise-for-a-small-business-in-90-minutes</link><guid isPermaLink="true">https://runbookfoundry.hashnode.dev/how-to-run-a-ransomware-tabletop-exercise-for-a-small-business-in-90-minutes</guid><category><![CDATA[Security]]></category><category><![CDATA[cybersecurity]]></category><category><![CDATA[Small business]]></category><dc:creator><![CDATA[Runbook Foundry]]></dc:creator><pubDate>Tue, 27 Oct 2026 00:23:05 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally published at</em> <a href="https://dev.to/runbookfoundry/how-to-run-a-ransomware-tabletop-exercise-for-a-small-business-in-90-minutes-4651"><em>https://dev.to/runbookfoundry/how-to-run-a-ransomware-tabletop-exercise-for-a-small-business-in-90-minutes-4651</em></a><em>.</em></p>
<p>Most small businesses have some kind of incident response plan. Far fewer have ever said it out loud with the people who would actually use it. A tabletop exercise fixes that. You get the owner, the office manager, whoever handles IT (in-house or MSP) and the person who talks to customers into one room, read them a realistic ransomware story one piece at a time, and write down every place where they hesitate.</p>
<p>You don't need a consultant, a lab or a full afternoon. This guide shows you how to run one in 90 minutes, and it includes a complete sample scenario you can use as-is.</p>
<h2>What a tabletop is (and what it isn't)</h2>
<p>A tabletop exercise is a facilitated discussion. Nobody touches production systems. The facilitator presents an "inject", a new development in the story, and the group talks through what they would do, who decides, and how they would know.</p>
<p>It <strong>is</strong>:</p>
<ul>
<li>A safe, no-blame way to test plans, decision rights and contact lists</li>
<li>Cheap evidence that you practice, which insurers, auditors and larger customers increasingly ask about</li>
<li>A source of a short, prioritized list of fixes</li>
</ul>
<p>It <strong>isn't</strong>:</p>
<ul>
<li>A test of individuals or a performance review</li>
<li>A penetration test or a live restore</li>
<li>Finished when the meeting ends. The fixes are the point.</li>
</ul>
<h2>Before the session: 30 minutes of prep</h2>
<p><strong>1. Pick a sponsor.</strong> The owner or a senior manager opens the session and receives the findings. Without a sponsor, people skip it or treat it as an IT meeting.</p>
<p><strong>2. Pick 5 to 8 participants.</strong> For a small business that usually means:</p>
<ul>
<li>Owner or general manager (business decisions, payments, legal contact)</li>
<li>IT lead or MSP contact (technical response)</li>
<li>Finance or bookkeeping (payroll, invoicing, bank contacts)</li>
<li>Office or operations manager (staff communication, phones, facilities)</li>
<li>Whoever handles customers or marketing (external messages)</li>
</ul>
<p><strong>3. Assign three roles that aren't players:</strong></p>
<ul>
<li><strong>Facilitator</strong>: reads injects, asks questions, keeps time. Ideally someone who won't be answering.</li>
<li><strong>Scribe</strong>: records decisions, owners, open questions and gaps.</li>
<li><strong>Timekeeper</strong>: can be the facilitator, but a visible timer helps.</li>
</ul>
<p><strong>4. Gather what people would really reach for:</strong> the incident response plan (even if it's two pages), the cyber insurance policy and its claims hotline, the list of critical systems, backup details, and the staff and vendor contact list. Print them. If something doesn't exist, that's your first finding.</p>
<p><strong>5. Tailor the scenario.</strong> Replace the bracketed names below with your real systems. A scenario that says "the file server" lands better when it says "the Q: drive on SRV-01".</p>
<h2>The 90-minute agenda</h2>
<table>
<thead>
<tr>
<th>Time</th>
<th>Segment</th>
</tr>
</thead>
<tbody><tr>
<td>0:00 to 0:05</td>
<td>Sponsor welcome, purpose, ground rules</td>
</tr>
<tr>
<td>0:05 to 0:10</td>
<td>Scenario setup and starting assumptions</td>
</tr>
<tr>
<td>0:10 to 1:10</td>
<td>Four injects, about 15 minutes each</td>
</tr>
<tr>
<td>1:10 to 1:25</td>
<td>Hot wash: what worked, what didn't, top fixes</td>
</tr>
<tr>
<td>1:25 to 1:30</td>
<td>Owners, dates and close</td>
</tr>
</tbody></table>
<p>Read these <strong>ground rules</strong> aloud at the start:</p>
<ol>
<li>No fault, no blame. We are testing the plan, not people.</li>
<li>Answer with the tools, people and authority you have today, not what you wish you had.</li>
<li>Decisions don't have to be perfect. Make a call and say why.</li>
<li>Don't fight the scenario. If a detail doesn't fit, we'll adjust it and move on.</li>
<li>Findings are reported without names attached.</li>
</ol>
<h2>Free sample scenario: "The Friday Invoice"</h2>
<p>This scenario is written for a 10 to 50 person business using a cloud email suite, a shared file server or NAS, and an accounting system. Adjust the details to fit.</p>
<p><strong>Starting assumptions (read aloud):</strong> It's an ordinary Friday. The office closes at 5 p.m. Backups run nightly. The IT person or MSP is reachable by phone. Nobody has reported anything unusual this week.</p>
<h3>Inject 1: Friday, 4:40 p.m.</h3>
<blockquote>
<p>The bookkeeper mentions that an "invoice" email from a regular supplier had a link that opened a page asking her to sign in again. She did, then the page went blank. She shrugged and went back to work. Ten minutes later, two staff report that files on the shared drive have strange extensions and won't open.</p>
</blockquote>
<p><strong>Discussion questions:</strong></p>
<ul>
<li>Who is the first person told, and how? Who is told second?</li>
<li>What is the very first technical action? Who is allowed to take it?</li>
<li>Do we disconnect anything right now? What exactly, and who decides?</li>
<li>The bookkeeper's account may be compromised. What do we do with it in the next 15 minutes?</li>
</ul>
<p><strong>What good looks like:</strong> someone clearly owns the call to isolate affected machines. The suspected account gets its password reset and its sessions revoked. Somebody starts a written timeline. The IT contact is reached by phone, not email.</p>
<h3>Inject 2: Friday, 6:15 p.m.</h3>
<blockquote>
<p>A ransom note appears on the file server and on three desktops. It claims the attackers copied "all finance and HR data" and will publish it in 72 hours unless paid. The office is closed and most staff have gone home.</p>
</blockquote>
<p><strong>Discussion questions:</strong></p>
<ul>
<li>Who do we call now: the insurer's hotline, a breach coach, an incident response firm, the police? In what order? Where are those numbers written down?</li>
<li>Does anyone have the authority to engage outside help that costs money tonight?</li>
<li>Who decides whether paying is even on the table, and who must be consulted first?</li>
<li>What do we tell staff who will arrive on Monday?</li>
</ul>
<p><strong>What good looks like:</strong> the insurer is contacted early, because many policies require notice and sometimes require using approved vendors. Nobody contacts the attackers without legal and insurer guidance. Evidence is preserved rather than wiped in a rush to rebuild.</p>
<h3>Inject 3: Saturday, 10:00 a.m.</h3>
<blockquote>
<p>The IT lead reports that last night's backup job ran at 11 p.m., after the encryption started, and the backup target was a network share that is now encrypted too. The cloud backup has a copy from Thursday night, but nobody has ever restored more than a single file from it.</p>
</blockquote>
<p><strong>Discussion questions:</strong></p>
<ul>
<li>How long would a full restore from the Thursday copy take? Has anyone ever measured it?</li>
<li>What do we restore first? Who decided that order, and is it written down?</li>
<li>Which systems can the business live without for a week? Which ones for a day?</li>
<li>How do we make sure we aren't restoring onto machines the attacker still controls?</li>
</ul>
<p><strong>What good looks like:</strong> the group agrees on a recovery order based on business impact, such as accounting, email and then file shares. Someone notes that restore time is unknown and adds a test restore to the action list. Rebuilding is held until the entry point is understood.</p>
<h3>Inject 4: Monday, 8:30 a.m.</h3>
<blockquote>
<p>A customer calls the front desk. They received an email from your bookkeeper's address asking them to update the bank details for your invoices. A local reporter has also emailed asking for comment about "a data leak".</p>
</blockquote>
<p><strong>Discussion questions:</strong></p>
<ul>
<li>Who speaks for the company, and what do they say? Is a holding statement ready?</li>
<li>How do we warn customers about the fraudulent bank-details request without causing panic?</li>
<li>Who checks whether any payments were already redirected?</li>
<li>Do we have notification obligations to customers, employees or regulators? Who would know?</li>
</ul>
<p><strong>What good looks like:</strong> one spokesperson. A short holding statement that says only what is known and avoids claims you can't support yet, such as "no data was accessed". A call to the bank. A plan to contact legal counsel about notification duties.</p>
<p><strong>Sample holding statement</strong> (adapt it and have counsel approve before use):</p>
<blockquote>
<p>"[Company] is responding to a cybersecurity incident affecting some of our systems. We acted quickly to contain it and are working with specialists to restore services safely. If you receive any request to change our payment details, please call us on a number you already have before acting. We will contact anyone directly affected."</p>
</blockquote>
<h2>Facilitation tips that make the difference</h2>
<ul>
<li><strong>Read, then wait.</strong> Silence is uncomfortable. Let it work. Don't answer your own questions.</li>
<li><strong>Push for specifics.</strong> "Who exactly? How would you reach them at 9 p.m. on a Friday? Where is that number written?"</li>
<li><strong>Add friction if it's too easy.</strong> "The IT person is on a flight." "The owner's phone is the compromised device."</li>
<li><strong>Bring quiet people in.</strong> Ask finance and the front desk directly. The best findings often come from them.</li>
<li><strong>Park rabbit holes.</strong> Write deep technical debates on a parking-lot list and move on.</li>
</ul>
<h2>The hot wash (15 minutes)</h2>
<p>Ask these five questions and have the scribe capture the answers:</p>
<ol>
<li>What worked well that we should keep?</li>
<li>Where did we hesitate, and why?</li>
<li>What information did we need but couldn't find?</li>
<li>Which decisions had no clear owner?</li>
<li>If this happened tomorrow, what one thing would we want fixed first?</li>
</ol>
<h2>Turning findings into action</h2>
<p>The exercise is only worth the fixes it produces. Within a week, write a one-page after-action summary:</p>
<ul>
<li><strong>Date, scenario and participants</strong> (roles, not names, if you prefer)</li>
<li><strong>Top 3 to 5 findings</strong>, each written as a gap: "No one knew the insurer's claims hotline number."</li>
<li><strong>One action per finding</strong>, with an owner and a due date</li>
<li><strong>When you'll check progress</strong>, for example at 30 and 90 days</li>
</ul>
<p>Typical first-exercise actions for small businesses:</p>
<ul>
<li><input disabled type="checkbox" /> Print an emergency contact sheet (IT, MSP, insurer hotline, bank, counsel) and store it offline</li>
<li><input disabled type="checkbox" /> Do a full test restore of one critical system and time it</li>
<li><input disabled type="checkbox" /> Keep at least one backup copy that is offline or immutable, not just a network share</li>
<li><input disabled type="checkbox" /> Write down who can approve emergency spending and engage outside responders</li>
<li><input disabled type="checkbox" /> Prepare a holding statement and name one spokesperson</li>
<li><input disabled type="checkbox" /> Add a "call to confirm" rule for any change to payment details</li>
<li><input disabled type="checkbox" /> Turn on multi-factor authentication for every email account, starting with finance and admins</li>
</ul>
<p>Run another exercise in six months with a different scenario, such as a compromised cloud account or a supplier outage. Compare your scores. Getting better is the evidence.</p>
<hr />
<p><strong>Resources:</strong> <a href="https://runbookfoundry.gumroad.com/l/free-m365-gws-hardening-checklist?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=launch30">Free M365 + Google Workspace hardening checklist</a> · Full kit with 3 scenarios, a slide deck and an after-action template: <a href="https://runbookfoundry.gumroad.com/l/ransomware-tabletop-exercise-template?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=launch30">Ransomware Tabletop Exercise Template</a> ($49). I make these templates.</p>
<p><em>Drafted with AI assistance and reviewed for accuracy.</em></p>
<p><em>Not affiliated with Microsoft or Google.</em></p>
]]></content:encoded></item></channel></rss>