SafeToOpen Browser Security
Response Actions: Blocklist, Microsoft 365, Entra ID, Defender, Okta, EDR, Web Gateways, Paging, Chat and MSP Propagation
What each integration lets you do, how to connect it, and which rules to write
Response actions turn a SafeToOpen incident into a change in the systems you already run. You connect a system once, then write rules: which incidents, at which severity, trigger which action, either the moment the incident arrives or when an analyst marks it a confirmed issue. Every action is logged with its trigger and result; most can be undone from the log or from the incident. The feature exists in both consoles: Browser Security (Configuration → Response actions) and Email Security (Organisation → Response actions), each with its own connectors and rules.
This guide is organised by integration. Each one has the same four parts: what it gives you, what you need before you start, how to connect it, and the actions it adds with their scope and whether they can be undone. Section 2 is a single table of everything, if you only want the overview.
1. Concepts#
| Term | Meaning |
|---|---|
| Connector | A system SafeToOpen can act on, added once with its credentials. Credentials are encrypted at rest, shown once, and can be replaced or removed at any time. |
| Action | One thing a connector can do, for example “Block the domain in Umbrella”. Each action needs one target from the incident: the URL, the host, the affected member, the sender, the reported message, or the incident itself. |
| Rule | Connector + action + trigger + minimum severity + optional incident kinds. Rules start in dry run. |
| Trigger: on Confirm | Runs when an analyst clicks Confirm issue on the incident. The incident view shows in advance what will run. |
| Trigger: automatic | Runs when an incident of at least that severity is recorded, with no human in the loop. Use for blocking and alerting; think twice for identity actions. |
| Dry run | The rule logs what it would have done and does nothing. Switch off once the log looks right. |
| Undo | Reverses an action where the target system allows it. The tables below say which actions can be undone. |
| Manual run | Any available action can also be run from the incident’s Response panel without a rule. |
The same action never runs twice for the same incident, so an automatic rule and a Confirm rule on the same action do not double up. The one exception is the chat card, which may post once per trigger so the channel sees both the alert and the confirmation.
2. What each integration lets you do#
Four kinds of outcome are available. Blocking a URL or domain stops everyone in the organisation from reaching the page, on devices with or without the extension, depending on the system. Containing the user ends the sessions and forces a password change for the person who visited the page or reported the message. Stopping the sender keeps the same attacker out of every other mailbox. Alerting and paging bring a person into the loop. The table lists which integration delivers which outcome, in which console, and whether the action can be reversed from SafeToOpen.
| Integration | Block URL or domain | Contain the user | Stop the sender | Alert or page | Console | Undo |
|---|---|---|---|---|---|---|
| SafeToOpen blocked list | Every workspace of the organisation and, optionally, every linked organisation | Browser | Yes | |||
| Hosted blocklist | Any firewall or gateway that pulls the list (Palo Alto, FortiGate, Check Point, Cisco, SonicWall, pfSense) | Browser | Yes | |||
| Microsoft 365 and Entra ID | Tenant Allow/Block List: Outlook and Defender block the URL for every mailbox and device | Sign out everywhere; force password change; mark compromised for Conditional Access | Tenant-wide sender block via the reported message; Junk inbox rule | Both | Partly (see section 4) | |
| Defender for Endpoint | Network-protection indicator on every onboarded device, on and off the network | Browser | Yes | |||
| Cisco Umbrella | DNS and proxy block on every policy using the integration list | Browser | Yes | |||
| Zscaler Internet Access | URL added to a custom category bound to a Block rule | Browser | Yes | |||
| Netskope | URL added to a URL list used by a Real-time Protection policy | Browser | Yes | |||
| Cloudflare Zero Trust | Host or URL added to a Gateway list used by a DNS or HTTP block policy | Browser | Yes | |||
| CrowdStrike Falcon | Domain indicator on all hosts (detect or prevent) | Browser | Yes | |||
| SentinelOne | DNS indicator (detect; blocking depends on STAR rules) | Browser | Yes | |||
| Sophos Central | Domain tagged in Website Management; your policy blocks the tag | Browser | Yes | |||
| Trend Micro Vision One | Block suspicious object enforced by connected Trend products | Browser | Yes | |||
| Mimecast | Managed URL blocked by URL Protect in every message | Blocked Senders policy for everyone | Both | Yes | ||
| Google Workspace | Sign out of all Google sessions; force password change | Gmail filter to Spam | Both | Password yes; sign-out no | ||
| Okta | Clear sessions and OAuth tokens; expire password; suspend | Both | Suspend yes; others no | |||
| Proofpoint TRAP | Alert sent to TRAP for auto-pull from every mailbox | No (TRAP owns it) | ||||
| Check Point Harmony Email | Quarantine every message from the sender (7 days) | Yes | ||||
| Cisco Email Threat Defense | Move every message from the sender to Junk (7 days) | Yes | ||||
| Barracuda | Sender or domain block policy | Yes | ||||
| FortiMail | Address or domain on the system block list | Yes | ||||
| Slack | Incident card with Confirm and No issue buttons | Both | n/a | |||
| Microsoft Teams | Incident card with Confirm and No issue buttons | Both | n/a | |||
| PagerDuty | Incident on the service, severity mapped | Both | Yes (resolve) | |||
| Opsgenie | Alert to the team, priority mapped | Both | Yes (close) |
“Browser” means the action is offered on Browser Security incidents, “Email” on Email Security incidents, “Both” on either. Sender actions are described in full in the Email Security response guide; this guide covers everything offered on Browser Security incidents.
Which to use for what#
| You want to | Use |
|---|---|
| Stop the page for everyone, including devices without the extension | Your web gateway or DNS filter (Umbrella, Zscaler, Netskope, Cloudflare) plus Defender for Endpoint for off-network devices. Add the hosted blocklist for firewalls. |
| Stop the page for everyone with the extension, across every client you manage | SafeToOpen blocked list with scope “linked organisations” |
| Make a stolen password useless | Entra ID, Okta or Google: sign out everywhere and force a password change; in Entra also mark compromised so risk policies apply |
| Keep the same attacker out of other inboxes | Microsoft 365 tenant block, Mimecast, Barracuda or FortiMail block; Harmony Email or Cisco ETD to pull what was already delivered; Proofpoint TRAP if you run it |
| Get a person to look now | Slack or Teams card at high severity; PagerDuty or Opsgenie page at critical |
3. Hosted blocklist#
What it gives you#
SafeToOpen publishes the organisation’s confirmed URLs and domains as a plain-text list at a token-protected address. Any firewall or gateway that pulls external lists reads it on its own schedule, so a confirmed incident is blocked at the network edge for every device, with nothing to install and no vendor API to connect. Optionally the same list also carries the URLs your threat feeds blocked and the URLs you blocked by hand, so the firewall enforces everything the extension enforces.
Before you start#
- A firewall or gateway that supports external dynamic lists, and a refresh interval of five minutes or more.
- Outbound HTTPS from the device to plus.safetoopen.com.
Set-up#
- Response actions → + Hosted blocklist. Tick “include threat-feed URLs” and “include manually blocked URLs” if the firewall should carry those too.
- Copy the address. Append
?format=for the shape your device expects:urls(default, one full URL per line),domains,panos-url(no scheme),panos-domain,json,csv. - Add rules: “Add the URL to the hosted blocklist” and “Add the domain to the hosted blocklist”, on Confirm at severity high, in dry run first.
- Point the device at the list and refresh every 5 minutes or longer; the address returns an ETag so unchanged lists cost nothing.
| Device | Where |
|---|---|
| Palo Alto PAN-OS, Prisma Access | Objects → External Dynamic Lists → type URL List with ?format=panos-url, or Domain List with ?format=panos-domain; reference the EDL in a URL Filtering profile or a policy |
| FortiGate | Security Fabric → External Connectors → Threat feed (Domain Name or URL); use it in a DNS filter or web filter |
| Check Point | Custom Intelligence Feed (ioc_feeds on the gateway), or a Network Feed object |
| Cisco Secure Firewall | Objects → Security Intelligence → URL or DNS lists and feeds |
| SonicWall | Dynamic external list objects |
| pfSense / OPNsense | pfBlockerNG or a URL alias |
Actions#
| Action | Target | Scope | Undo |
|---|---|---|---|
| Add the URL to the hosted blocklist | the incident URL | every device that pulls the list | Yes, removes the entry |
| Add the domain to the hosted blocklist | the incident host | every device that pulls the list | Yes, removes the entry |
4. Microsoft 365 and Entra ID#
What it gives you#
One connector, one Entra app registration, and you can act on three layers of a Microsoft 365 tenant. On the web layer, a confirmed URL goes onto the Tenant Allow/Block List, so Outlook, Defender for Office 365 and Defender SmartScreen block it for every mailbox and device in the tenant, not only those with the extension. On the identity layer, you can make a stolen password useless within seconds of a credential-phishing incident: sign the person out of every app and browser, require a new password at the next sign-in, and mark the account as compromised so your risk-based Conditional Access policies (block, MFA, password reset) apply automatically. On the mail layer, used by Email Security incidents, you can block the sender for the whole tenant and junk their mail in members’ mailboxes. Add the Defender for Endpoint permission (section 5) and the same connector also blocks the domain on every onboarded device.
Before you start#
- A Global Administrator or Application Administrator to create the app registration and grant admin consent.
- For the password-change action, someone who can assign the app the User Administrator role in Entra.
- For the compromised-user action, Entra ID P2 (Identity Protection) and at least one risk-based Conditional Access policy, otherwise the flag is recorded but nothing enforces it.
Set-up#
- Entra admin center → Identity → Applications → App registrations → New registration. Name it (for example “SafeToOpen response actions”), leave “Accounts in this organizational directory only”, no redirect URI, Register.
- On the app’s Overview page copy the Application (client) ID and the Directory (tenant) ID.
- Certificates & secrets → Client secrets → New client secret → choose an expiry (set a reminder; the connector stops working when it expires) → Add. Copy the Value column now; it is shown once.
- API permissions → Add a permission → Microsoft Graph → Application permissions. Add only what the actions you want need (table below), then Grant admin consent for the tenant. The Status column must show a green tick on every row.
- Only if you want the password-change action: Identity → Roles & admins → User Administrator → Add assignments → search for the app by name → Add. Without the role the action fails with a clear message.
- SafeToOpen console → Response actions → + Microsoft 365 and Entra ID → tenant ID, client ID, secret → Add connector → Test. The test signs in and lists which of the permissions the token carries and which are missing.
| Permission | Enables |
|---|---|
ThreatSubmission.ReadWrite.All | Block a URL for the whole tenant; block the sender for the whole tenant (Email Security) |
MailboxSettings.ReadWrite | Junk rule for a sender in members’ mailboxes (Email Security) |
User.RevokeSessions.All | Sign the user out everywhere |
User.ReadWrite.All | Require a password change at next sign-in (plus the User Administrator role) |
IdentityRiskyUser.ReadWrite.All | Mark the user as compromised in Identity Protection |
Ti.ReadWrite.All on the WindowsDefenderATP API | Defender for Endpoint indicators (section 5) |
Actions#
| Action | Console | What happens | Undo |
|---|---|---|---|
| Block the URL for the whole Microsoft 365 tenant | Browser | A URL threat submission with a tenant-wide block adds the URL to the Tenant Allow/Block List for 90 days; Outlook, Defender for Office 365 and SmartScreen then block it for every mailbox and device | No (expires, or remove it under Defender → Policies & rules → Tenant Allow/Block Lists) |
| Sign the affected user out everywhere | Both | Revokes the user’s refresh tokens; every app, browser and mobile session must sign in again within minutes | No |
| Require a password change at next sign-in | Both | Sets the force-change flag on the user; the next sign-in demands a new password | Yes, clears the flag |
| Mark the user as compromised | Both | Confirms the user as compromised in Identity Protection (risk level high), so risk-based Conditional Access policies apply | Yes, dismisses the risk |
| Block the sender for the whole tenant | Submits the reported message to Microsoft as phishing with a tenant-wide sender block for 90 days | No (expires, or remove the entry) | |
| Move mail from the sender to Junk | Creates an inbox rule “SafeToOpen: junk <sender>” in the affected member’s mailbox, or in every member’s mailbox (up to 300) | Yes, removes the rules |
Rules to add#
- On Confirm, severity high: Block the URL for the whole tenant.
- On Confirm, kinds containing “credential” or “password”: Sign out everywhere, then Require a password change. Add Mark as compromised if you run Identity Protection.
- Leave the identity actions on Confirm rather than automatic; a false positive that signs out an executive costs more than the minute an analyst takes to confirm.
5. Defender for Endpoint#
What it gives you#
A hard block on every device onboarded to Defender for Endpoint, whether or not the device runs the SafeToOpen extension and whether it is in the office, at home or on a hotel network. The action creates a custom network indicator: Defender’s network protection blocks connections to the domain or URL in every browser and every application, shows the user a Windows block notification, and raises an alert in the Defender portal each time a device tries to reach it, which tells you who else clicked the link. You choose a domain indicator (covers every path and subdomain page on that host) or an exact URL indicator (only that address, useful when the host is a shared platform such as a form builder or a file share). Indicators expire after 90 days.
Before you start#
- Devices onboarded to Defender for Endpoint (plan 1 or 2), with network protection turned on in block mode. Without network protection, Edge still honours the indicator through SmartScreen but other browsers do not.
- Custom network indicators enabled: Defender portal → Settings → Endpoints → Advanced features → Custom network indicators: On.
- The Microsoft 365 connector from section 4.
Set-up#
- Entra admin center → the app registration from section 4 → API permissions → Add a permission → APIs my organization uses → search “WindowsDefenderATP” → Application permissions →
Ti.ReadWrite.All→ Add → Grant admin consent. - SafeToOpen console → Response actions → the Microsoft connector → Test. The result now lists the Defender permission as present.
- Add a rule: on Confirm, severity high, action “Block the URL or domain on every device”, option Domain indicator. Dry run first; the log shows the exact indicator that would be created.
Actions#
| Action | Option | What happens | Undo |
|---|---|---|---|
| Block the URL or domain on every device | Domain indicator | A Block indicator of type DomainName for the incident host, severity high, expiring after 90 days; every onboarded device blocks any connection to the host and alerts | Yes, deletes the indicator |
| Block the URL or domain on every device | Exact URL indicator | A Block indicator of type Url for the incident URL; only that address is blocked | Yes, deletes the indicator |
6. SafeToOpen blocked list and MSP propagation#
What it gives you#
The built-in connector needs no credentials. Its action adds the confirmed URL to your own Block/Unblock URLs list, which the extension enforces in every workspace of the organisation within minutes, on every platform the extension runs on. For managed service providers, scope “linked organisations” adds the same URL to every organisation linked to yours in one action, so one client’s confirmed phishing page is blocked for all the clients you manage before the campaign reaches them.
Set-up#
- Response actions → + SafeToOpen blocked list (all workspaces). Nothing to enter.
- MSPs: Response actions → Linked organisations. Every organisation where you are an owner or co-admin is listed; click Link. Linking is mutual and requires admin rights in both, which is what makes the propagation safe.
- Add a rule: on Confirm, severity high, action “Block the URL in every workspace (and linked organisations)”, scope “This organisation and every linked organisation”.
| Action | Scope option | What happens | Undo |
|---|---|---|---|
| Block the URL in every workspace | This organisation | The URL is added to the organisation’s blocked list; the extension blocks it in every workspace | Yes, removes it |
| Block the URL in every workspace | Every linked organisation | The same, in this organisation and in every linked one; the action log names each | Yes, removes it from all of them |
7. Web gateways and DNS filters#
Each of the following is its own connector with its own credentials. They block for everyone behind the gateway, including devices without the extension, and are the right first choice for a hard organisation-wide block. All act on Browser Security incidents, start in dry run like any rule, and can be undone.
Cisco Umbrella#
What it gives you#
A DNS-layer block, and a proxy block where Umbrella’s intelligent proxy is on, for every network and roaming client that uses a policy containing the integration’s destination list. Blocking at DNS means the page cannot load in any browser or application, and Umbrella’s reports show which identities tried.
Set-up#
- Umbrella dashboard → Policies → Policy Components → Integrations → Add. Name it “SafeToOpen”, tick Enable, Save. Expand the row and copy the customer key from the integration URL (the long value after
/integrations/). - Umbrella creates a destination list with the integration’s name. Policies → Management → All Policies → open each policy that should enforce it → Destination Lists → add the integration list under Block.
- SafeToOpen console → + Cisco Umbrella → paste the key → Add connector → Test.
| Action | What happens | Undo |
|---|---|---|
| Block the domain in Umbrella | The incident host is posted to the integration; Umbrella adds it to the destination list within minutes and blocks it in every policy using the list | Yes, removes the domain from the list |
Zscaler Internet Access#
What it gives you#
A URL block for every user whose traffic passes through ZIA, by adding the URL to a custom category that a URL Filtering rule blocks. The change is activated immediately, so it applies within about a minute rather than waiting for an admin to activate pending changes.
Set-up#
- ZIA admin portal → Administration → API Key Management → Cloud Service API Key → note or create the key. You also need an admin account with API access enabled (Administration → Administrator Management → the admin → Enable API access), and to know your cloud name from the portal address (zscaler.net, zscalerone.net, zscalertwo.net, zscalerthree.net, zscloud.net or zscalerbeta.net).
- Administration → URL Categories → Add URL Category → name it “SafeToOpen Blocklist”, type Custom, Save and Activate. Note its id from the row or the browser address (
CUSTOM_nn). - Policy → URL & Cloud App Control → Add URL Filtering Rule → URL Categories: the new category → Action: Block → Save and Activate.
- SafeToOpen console → + Zscaler Internet Access → cloud, admin username, password, API key, category id → Add connector → Test.
| Action | What happens | Undo |
|---|---|---|
| Add the URL to the Zscaler custom category and activate | The incident URL is added to the category and the change is activated | Yes, removes it and activates again |
Netskope#
What it gives you#
A URL block for every user steered through Netskope, by appending the URL to a URL list that a Real-time Protection policy blocks, then deploying the list. Because the list is exact-match you can block a single page on a shared host without affecting the rest of the site.
Set-up#
- Netskope tenant → Settings → Tools → REST API v2 → New Token → name it, choose an expiry, and add the endpoints
/api/v2/policy/urllistand/api/v2/policy/urllist/deploywith Read and Write. Copy the token. - Policies → Profiles → URL Lists → New URL List → name “SafeToOpen Blocklist”, type Exact, add any placeholder entry, Save, then Apply Changes.
- Policies → Real-time Protection → New Policy → Web Access → Destination: the URL list → Action: Block → Save and Apply Changes.
- SafeToOpen console → + Netskope → tenant host (yourtenant.goskope.com), token, list name → Add connector → Test.
| Action | What happens | Undo |
|---|---|---|
| Add the URL to the Netskope URL list and deploy | The incident URL is appended to the list and the list is deployed | Yes, replaces the list without it and deploys |
Cloudflare Zero Trust#
What it gives you#
A block for every device or network using Cloudflare Gateway, at the DNS layer with a domain list or at the HTTP layer with a URL list. Choose the list type when you create it: a DOMAIN list blocks the whole host in DNS and HTTP policies, a URL list blocks the exact address in HTTP policies.
Set-up#
- Cloudflare dashboard → My Profile → API Tokens → Create Token → Custom token → Permissions: Account → Zero Trust → Edit → the account → Create. Copy the token. Note the account id from Zero Trust → Settings or the dashboard address.
- Zero Trust → My Team → Lists → Create manual list → type DOMAIN (for hosts) or URL (for exact addresses) → name “SafeToOpen Blocklist” → add a placeholder → Save. Copy the list id from its address.
- Zero Trust → Gateway → Firewall policies → DNS (for a domain list) or HTTP (for either) → Add a policy → Selector Domain or URL → Operator “in list” → the list → Action Block → Create.
- SafeToOpen console → + Cloudflare Zero Trust → account id, token, list id → Add connector → Test. The test reports the list name and type.
| Action | What happens | Undo |
|---|---|---|
| Add the domain or URL to the Cloudflare Gateway list | The host (DOMAIN list) or the URL (URL list) is appended to the list | Yes, removes it |
8. Endpoint protection and XDR#
Endpoint tools reach devices wherever they are, but their treatment of domain indicators differs: Defender and Vision One block, CrowdStrike blocks or detects depending on the option and platform, SentinelOne and Sophos need a policy or rule of yours to turn a tag or indicator into a block. Pair them with a gateway action when you need a hard block everywhere.
CrowdStrike Falcon#
What it gives you#
A domain indicator of compromise applied to every host in the Falcon tenant. As Detect it raises a detection whenever a sensor sees a connection to the domain, so you learn who else went there; as Prevent it blocks the connection on platforms where the sensor supports domain blocking. Indicators expire after 90 days.
Set-up#
- Falcon console → Support and resources → API clients and keys → Create API client → name it → scope IOC Management: Read and Write → Create. Copy the client id and secret; note the base URL shown (US-1, US-2, EU-1 or US-GOV-1).
- SafeToOpen console → + CrowdStrike Falcon → cloud, client id, secret → Add connector → Test.
- Add a rule with the option Detect for the first weeks; switch to Prevent once you have seen how detections behave.
| Action | Option | What happens | Undo |
|---|---|---|---|
| Add a domain indicator in Falcon | Detect | Domain IOC, all hosts, severity high, 90 days; a detection is raised on contact | Yes, deletes the indicator |
| Add a domain indicator in Falcon | Prevent | Same, with the prevent action where the sensor supports it | Yes, deletes the indicator |
SentinelOne#
What it gives you#
A DNS threat-intelligence indicator on the account or site. SentinelOne agents detect connections to the domain and surface them as threats with the SafeToOpen incident as the source; blocking requires a STAR custom rule on your side that acts on those detections. Indicators expire after 90 days.
Set-up#
- SentinelOne console → Settings → Users → Service Users → Create New Service User → scope to the account or site → role with Threat Intelligence: Create and Delete → Generate API token. Copy it, and note the account id or site id (Settings → Accounts or Sites).
- SafeToOpen console → + SentinelOne → console URL (https://yourtenant.sentinelone.net), token, scope → Add connector → Test.
| Action | What happens | Undo |
|---|---|---|
| Add a DNS indicator (detect) | A DNS IOC for the incident host, valid 90 days, on the chosen account or site | Yes, deletes the indicator |
Sophos Central#
What it gives you#
A domain block for every endpoint under a Threat Protection policy that blocks the tag you choose. The action adds the domain to Website Management with that tag; Web Control on each endpoint then blocks it, and Sophos reports the attempt.
Set-up#
- Sophos Central → Global Settings → API Credentials Management → Add Credential → name it, role Endpoint Admin (or Service Principal Super Admin) → copy the client id and secret. Use the tenant’s own credentials, not a partner account.
- Endpoint Protection → Policies → Threat Protection → your policy → Web Control → Website tagging → add the tag “SafeToOpen-Blocked” with action Block → Save.
- SafeToOpen console → + Sophos Central → client id, secret, tag → Add connector → Test.
| Action | What happens | Undo |
|---|---|---|
| Add the domain to Website Management (tagged) | The incident host is added to Website Management with the tag; policies blocking the tag block it | Yes, removes the entry |
Trend Micro Vision One#
What it gives you#
A Block suspicious object that every connected Trend product (Apex One, Cloud One, Deep Security, Email Security) enforces. Domain objects block the host, URL objects the exact address. Objects expire after 30 days.
Set-up#
- Vision One console → Administration → API Keys → Add API Key → role with Threat Intelligence: Suspicious Object Management → Add. Copy the key and note your region from the console address.
- SafeToOpen console → + Trend Micro Vision One → region, key → Add connector → Test.
| Action | Option | What happens | Undo |
|---|---|---|---|
| Add a Block suspicious object | Domain | A domain suspicious object with action Block, 30 days | Yes, deletes the object |
| Add a Block suspicious object | URL | A URL suspicious object with action Block, 30 days | Yes, deletes the object |
9. Mimecast#
What it gives you#
On Browser Security incidents, a Managed URL with action Block so URL Protect rewrites and blocks the link in every message that carries it, past and future. On Email Security incidents, the same connector blocks the sender for everyone through a Blocked Senders policy.
Set-up#
- Mimecast Administration Console → Services → API and Platform Integrations → Your Application Integrations → Add API Application → API 2.0. Name it, choose the Managed URL (create, delete) and Blocked Senders Policy (create, delete) permissions → Save. Then Create Keys → copy the client id and secret.
- SafeToOpen console → + Mimecast → client id, secret → Add connector → Test.
| Action | Console | What happens | Undo |
|---|---|---|---|
| Block the URL for everyone (Managed URL) | Browser | A Managed URL with action Block; URL Protect blocks the link in every message | Yes, deletes the managed URL |
| Block the sender for everyone | A Blocked Senders policy from the address or domain to everyone | Yes, deletes the policy |
10. Identity: Google Workspace and Okta#
Use these instead of, or as well as, the Entra ID identity actions depending on which system is the source of truth for sign-in. If Okta fronts Microsoft 365 or Google, act in Okta: signing out of Entra alone leaves the Okta session that can mint a new one.
Google Workspace#
What it gives you#
For the affected member: end every Google session on web and mobile, and force a password change at the next sign-in. On Email Security incidents the same connector also sends the sender’s mail to Spam with a Gmail filter.
Set-up#
- Google Cloud console → IAM & Admin → Service Accounts → Create → then Keys → Add key → JSON. Keep the file.
- Google Admin console → Security → Access and data control → API controls → Manage domain-wide delegation → Add new → the service account’s client id → scopes
https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.user.securityand, for the Spam filter,https://www.googleapis.com/auth/gmail.settings.basic→ Authorise. - SafeToOpen console → + Google Workspace → the admin account to act as (a super admin or a delegated admin with user management rights) and the JSON key pasted whole → Add connector → Test.
| Action | Console | What happens | Undo |
|---|---|---|---|
| Sign the affected user out of all Google sessions | Both | All web and mobile sessions end | No |
| Require a Google password change at next sign-in | Both | Sets “change password at next login” on the account | Yes |
| Send mail from the sender to Spam | A Gmail filter (from: sender → Spam, skip Inbox) in the affected mailbox or every member’s | Yes, deletes the filters |
Okta#
What it gives you#
For the affected member, matched by email as the Okta login: clear every Okta session and revoke the OAuth tokens issued to the user, so every application behind Okta demands a fresh sign-in; expire the password so the next sign-in sets a new one; or suspend the account outright until an admin unsuspends it.
Set-up#
- Okta Admin console → Security → API → Tokens → Create token. Create it from an admin who can manage the users concerned (Super Admin, or a custom admin role scoped to the right groups). Copy the token.
- SafeToOpen console → + Okta → org URL (https://yourcompany.okta.com) and the token → Add connector → Test.
| Action | What happens | Undo |
|---|---|---|
| Sign the user out of Okta everywhere | All Okta sessions are cleared and OAuth tokens revoked | No |
| Require a password change at next Okta sign-in | The current password is expired | No |
| Suspend the user in Okta | The user cannot sign in until unsuspended | Yes, unsuspends (unless already suspended before the action) |
11. Slack and Microsoft Teams incident cards#
What it gives you#
An incident card in the channel your team already watches, the moment a high-severity incident arrives: severity, kind, host, URL, user, workspace, time and the top reasons, with three buttons. Open incident goes to the incident detail. Confirm issue & respond marks the incident confirmed and runs your on-Confirm rules. No issue closes it. Incoming webhooks are one-way, so the buttons open the console signed in and act after one prompt; that is what puts the analyst’s name on the action instead of a shared bot. With an on-Confirm rule as well, the channel also sees who confirmed and what ran.
Slack set-up#
- Open https://api.slack.com/apps → Create New App → From scratch → name it “SafeToOpen” → pick your workspace → Create App.
- In the app’s left menu → Incoming Webhooks → switch Activate Incoming Webhooks to On.
- Scroll down → Add New Webhook to Workspace → choose the SOC channel → Allow. Copy the Webhook URL (it starts with https://hooks.slack.com/services/).
- SafeToOpen console → Response actions → + Slack → paste the URL → Add connector → Test. A “SafeToOpen connected” card appears in the channel.
Microsoft Teams set-up#
Teams receives cards through a Workflows webhook (Power Automate, included with Microsoft 365). The older Office 365 Connectors “Incoming Webhook” has been retired by Microsoft; existing legacy URLs still work in the connector but new ones should be Workflows.
- In Teams, open the channel that should receive cards → click the ⋯ next to the channel name → Workflows. (If you do not see Workflows, open the Workflows app from the left rail and choose Create.)
- Search the templates for “webhook” and choose “Post to a channel when a webhook request is received”.
- Give the flow a name such as “SafeToOpen incidents”, make sure it is signed in as you, click Next.
- Choose the Team and the Channel the cards should post to → Add workflow.
- The final screen shows the webhook URL (it starts with https://….logic.azure.com:443/workflows/… or https://….webhook.office.com/…). Copy it → Done.
- SafeToOpen console → Response actions → + Microsoft Teams → paste the URL → Add connector → Test. A “SafeToOpen connected” card appears in the channel, posted by the Workflows bot.
Rules#
- Add a rule: connector Slack or Teams → action “Post an incident card” → Automatically when the incident arrives → minimum severity high (or critical for a quieter channel) → leave kinds blank → dry run off; a card is not a change you need to rehearse.
- Optionally add a second rule on the same connector: On Confirm → any severity, so the channel sees the confirmation and the outcome of the on-Confirm rules.
| Action | What happens | Undo |
|---|---|---|
| Post an incident card | A card is posted to the channel; automatic rules post on arrival, on-Confirm rules post a confirmation update | n/a (delete the message in the channel) |
12. PagerDuty and Opsgenie paging#
What it gives you#
A page to whoever is on call, with the incident facts and a console link, for incidents above the severity you choose. One PagerDuty incident or Opsgenie alert per SafeToOpen incident, severity mapped to their scales (critical → PagerDuty critical / Opsgenie P1, high → error / P2, medium → warning / P3). Undo resolves or closes the page, and marking the incident “no issue” in SafeToOpen resolves or closes it automatically, so the on-call is not left with a stale page.
PagerDuty set-up#
- PagerDuty → Services → Service Directory → the service that should own these incidents → Integrations tab → Add an integration → Events API V2 → Add.
- Open the new integration and copy the Integration Key (32 characters). Note whether your account is in the US or EU service region (EU accounts sign in at eu.pagerduty.com).
- SafeToOpen console → Response actions → + PagerDuty → region, integration key → Add connector → Test. The test sends a resolve for a key that does not exist, so nobody is paged.
Opsgenie set-up#
- Opsgenie → Teams → the team → Integrations → Add integration → API → name it “SafeToOpen” → tick Create and Update Access and Read Access → Save integration. Copy the API key. Note whether the account is US or EU (EU accounts sign in at app.eu.opsgenie.com).
- SafeToOpen console → + Opsgenie → region, API key, responder team name (optional) → Add connector → Test.
Rules#
- Add a rule: action “Page the on-call” → Automatically when the incident arrives → minimum severity critical → dry run off.
- Keep the chat card at high and the page at critical, so people are woken up only for what warrants it.
| Action | What happens | Undo |
|---|---|---|
| Page the on-call (PagerDuty) | A PagerDuty incident on the service with a dedup key of the SafeToOpen incident | Yes, resolves it |
| Page the on-call (Opsgenie) | An Opsgenie alert with an alias of the SafeToOpen incident, to the responder team if set | Yes, closes it |
13. Recommended rules#
| Goal | Trigger | Severity | Kinds | Actions |
|---|---|---|---|---|
| Stop the page for everyone | On Confirm | high | (any) | Hosted blocklist URL + domain; Microsoft 365 tenant block; Defender indicator; your gateway (Umbrella, Zscaler, Netskope or Cloudflare) |
| Block across every client (MSP) | On Confirm | high | (any) | SafeToOpen blocked list, scope linked organisations |
| Make the stolen password useless | On Confirm | high | credential, password | Sign out everywhere + require password change (Entra ID, Okta or Google); mark compromised if you run Identity Protection |
| Alert the SOC channel | Automatic | high | (any) | Post an incident card (Slack or Teams) |
| Wake the on-call | Automatic | critical | (any) | Page the on-call (PagerDuty or Opsgenie) |
| Learn who else clicked | On Confirm | high | (any) | CrowdStrike Detect or SentinelOne indicator alongside the blocks |
Start every blocking and identity rule in dry run for a few days, read the log, then switch dry run off. Alert and paging rules can start live.
14. Working an incident#
Every incident detail ends with a Response panel. Before confirming, it lists what the Confirm rules would do, with the exact target each one would act on. It offers each available action as a button for a one-off manual run, and lists every action already taken on the incident with its result and an Undo where possible. Confirm issue runs the Confirm rules and reports their outcome in the same click. Buttons on a Slack or Teams card open the same panel.
15. Audit and safety#
- Actions appear in the Activity log and in the Response actions log with trigger, actor (analyst email, or auto-rule), target, the vendor’s response and the time.
- Rate limits: 120 manual actions per hour per organisation.
- Feed and manual entries in the hosted blocklist never leave the organisation; the blocklist token is the only credential and is rotatable.
- Connector secrets are encrypted at rest and never shown again. Microsoft Graph tokens are cached briefly and scoped to
.default; every other vendor token is used only for the call and never logged. - Every connector is built on the vendor’s published API. Vendor consoles change; if a Test or an action fails with a vendor error, the message quotes the vendor’s response so you can check the permission or object on their side.