Skip to main content
emnode
Compliance

Set a security contact and high-severity alerts

One capability with two halves: make sure Defender for Cloud knows who to email when something goes wrong, and make sure it actually sends an email the moment a high-severity alert fires, so a real breach reaches a human instead of sitting unseen in a console.

13 min·10 sections·AZURE

Last reviewed

Security contact and alert notifications: the basics

What does a subscription with no security contact actually look like?

Defender for Cloud watches your subscriptions and raises a security alert when it sees something that looks like an attack: a brute-force sign-in, a crypto-mining process, a suspicious storage access, a privilege escalation. The alert is only useful if it reaches a person who can act on it. Two settings decide whether that happens. The first is the security contact: the email address, or set of addresses, that Microsoft notifies when there is a potential security issue on the subscription. The second is alert notifications: the switch that says 'send an email when an alert of this severity or higher fires', set to a minimum severity of High. Each is a separate Defender for Cloud recommendation, but they are one job: make sure a high-severity alert lands in a human's inbox.

Both recommendations map to the same Microsoft Cloud Security Benchmark control, IR-2, which is about preparing to respond to incidents by getting notifications to the right people. 'Subscriptions should have a contact email address for security issues' checks that a contact is set at all. 'Email notification for high severity alerts should be enabled' checks that the notification switch is on and set to notify at High severity or higher. They read as two findings, but a subscription that fails one usually fails the other, because both come from the same empty security-contact configuration.

Most of this gap is omission, not intent. A subscription gets created, workloads get deployed, Defender starts watching, and nobody ever opens the email notifications page to type in a distribution list. By default Microsoft notifies subscription owners about high-severity alerts, but 'owner' is often a person who left, a break-glass account nobody reads, or a service principal with no inbox at all. The work is to set an explicit, monitored contact on every subscription, set the notification threshold to High, and stop relying on whoever happens to hold the Owner role to be watching.

In this lesson you will learn how Defender for Cloud routes security alerts to people, why a subscription can be fully monitored yet notify no one, and how to set a monitored security contact and high-severity alert emails across every subscription and keep them set. The Controls this lesson covers section lists every Defender for Cloud recommendation in this capability, each linking to a deep page with the exact check and a copy-and-paste fix.

Fun fact

The alert nobody was listening for

A recurring finding in cloud breach post-mortems is that the platform had already raised the alarm. The detection fired, the alert was generated, it was sitting in the security console: and nobody saw it for days because the notification was never wired to a monitored inbox. By default Defender for Cloud emails subscription owners about high-severity alerts, but in real estates the 'owner' is frequently a person who has left the company, a shared break-glass account no one reads, or a service principal with no mailbox at all. The detection was never the weak link. The wire from the detection to a human was.

Finding subscriptions with no security contact

Priya is the security lead at a scale-up running across four Azure subscriptions, preparing for a SOC 2 audit. Defender for Cloud flags 'Subscriptions should have a contact email address for security issues' on two of them, and 'Email notification for high severity alerts should be enabled' on three.

Rather than open each subscription in the portal, Priya reads the security contact configuration straight from the API to see exactly which subscriptions have no contact, and which have a contact but the alert switch turned off or set too low.

Read the security contact on each subscription. An empty email and an Off alert state are the two failure modes you are looking for.

$ az security contact show --name default --query "{emails:emails, alertState:alertNotifications.state, severity:alertNotifications.minimalSeverity}" -o table
Emails AlertState Severity
------------------- ------------ --------
(blank) Off
# Subscription 1 notifies no one. Subscription 2 has a contact but alerts are off.

A blank email with alerts Off is the worst case: a fully monitored subscription that can detect an attack and tell nobody. Fix these first.

How Defender for Cloud decides who to notifydeep dive

Both recommendations resolve to a single object: the security contact at 'Microsoft.Security/securityContacts/default' on the subscription. Its properties decide everything. 'emails' is the explicit recipient list, a set of addresses Microsoft notifies directly. 'notificationsByRole' can additionally notify everyone holding a given Azure role, such as Owner. 'alertNotifications' carries a 'state' of On or Off and a 'minimalSeverity' of Low, Medium or High, which is the threshold at or above which an alert generates an email. The contact-email recommendation passes when 'emails' is populated; the high-severity recommendation passes when 'alertNotifications.state' is On and 'minimalSeverity' is set to High or, since High is the top tier, exactly High.

The default behaviour is the trap. With no explicit configuration, Defender for Cloud still emails subscription owners about high-severity alerts, so it can feel like notifications are handled. But that route depends entirely on the Owner role being held by people who read the inbox it points at. When the Owner is a departed employee, a break-glass account or a service principal, the alert is emailed into the void. Setting an explicit 'emails' value to a monitored distribution list is what turns this from 'whoever happens to be Owner' into 'a team we know is watching.'

Defender for Cloud evaluates these recommendations against the Microsoft Cloud Security Benchmark on a periodic cycle, so a fix does not flip the finding to Healthy instantly. The control-plane change is immediate, but the posture catches up on the next assessment. The strongest position pairs the per-subscription contact with an Azure Policy assignment that audits for the contact and the High-severity switch across every subscription, so a new subscription created without them is flagged the moment it appears rather than discovered at the next audit.

What is the impact of having no security contact?

The direct impact is dwell time. A subscription that detects an attack but notifies no one is one where an incident runs until someone happens to look at the console or notices a downstream symptom. Every credible breach study points the same way: the longer an attacker is in undetected, the more they exfiltrate, the wider they move, and the more the eventual clean-up and notification costs. A high-severity alert that emails a monitored team the moment it fires is the single cheapest way to shrink that window.

The second-order impact is cost and blast radius. A compromised subscription is frequently used to spin up expensive resources, crypto-mining fleets, mass data egress, before it is used to steal anything, so the first visible sign is often a bill anomaly. Wiring high-severity alerts to a human is both your earliest security warning and your earliest financial warning. Without it, you find out from the invoice.

On the compliance side, every modern framework, ISO 27001, SOC 2, NIST and the Microsoft Cloud Security Benchmark control IR-2 this capability maps to, expects evidence that security incidents are routed to identified responders. 'We can detect, but we never told the platform who to tell' is a finding no auditor accepts. A populated security contact and an enabled high-severity alert on every subscription is the cheapest and most defensible incident-response artefact you can produce.

How do you wire alerts to a human, properly?

Work the capability as one loop across every subscription rather than fixing one finding at a time. The order matters: choose a durable recipient before you set anything, so you do not wire alerts to an inbox that will go stale.

1. Choose a monitored recipient, not a person

Set the contact to a security distribution list or a shared mailbox that a team actually watches, ideally one that also feeds a ticketing or on-call system, never a single named individual who can leave. The whole point is that the recipient outlives any one person's tenure and role assignment.

2. Set the contact and enable High-severity alerts on every subscription

Populate 'emails' with the monitored list and set 'alertNotifications' to On with 'minimalSeverity' of High. Do this on every subscription, because the security contact is a per-subscription object: a clean parent does not cover a child subscription. Optionally add 'notificationsByRole' for Owner as a belt-and-braces second route, but never rely on it alone.

3. Confirm an alert actually arrives

A populated contact is necessary but not sufficient: verify the email genuinely lands. Use Defender for Cloud's sample-alert capability or wait for a benign test alert, and confirm it reaches the distribution list and creates a ticket. A contact that is set but bounces is no better than a blank one.

4. Ratchet it shut with Azure Policy

Assign the built-in audit policies so any subscription without a security contact email, or with high-severity alert notifications off, is flagged the moment it appears. This turns 'we set it on the subscriptions we knew about' into 'every subscription, including ones created next month, is checked automatically.'

# Set a monitored security contact and enable High-severity alert emails
# on the current subscription. --alert-notifications and --notifications-by-role
# take a JSON object, not a bare string; the role list lives inside that object.
az security contact create \
  --name default \
  --emails "[email protected]" \
  --alert-notifications '{"state":"On","minimalSeverity":"High"}' \
  --notifications-by-role '{"state":"On","roles":["Owner"]}'

# Apply it across every subscription you can see.
for sub in $(az account list --query "[].id" -o tsv); do
  az account set --subscription "$sub"
  az security contact create --name default \
    --emails "[email protected]" \
    --alert-notifications '{"state":"On","minimalSeverity":"High"}'
  echo "$sub: security contact set, high-severity alerts on"
done

# Ratchet it shut: audit any subscription missing a contact email.
az policy assignment create \
  --name audit-security-contact \
  --policy 4f4f78b8-e367-4b10-a341-d9a4ad5cf1c7 \
  --scope "/subscriptions/00000000-0000-0000-0000-000000000000"

Quick quiz

Question 1 of 5

Defender for Cloud flags both 'Subscriptions should have a contact email address' and 'Email notification for high severity alerts should be enabled' on the same subscription. What is the most efficient way to think about them?

You can now treat the security contact as one capability rather than two stray findings: choose a monitored recipient that outlives any one person, set the contact and enable High-severity alerts on every subscription, confirm an alert actually arrives, and audit for both with Azure Policy so a new subscription is never left silent. The Controls this lesson covers section below links every recommendation in this group to its deep page and fix.

Back to the library

Controls this lesson covers

One capability, many Microsoft Defender for Cloud recommendations. This lesson is the shared playbook; each control below keeps its own deep page with the exact check, severity and a copy-and-paste fix.