Cloud Detection & Response on Azure
Overview
ARMO Cloud Detection & Response (CDR) for Microsoft Azure delivers continuous threat detection on your Azure environment. ARMO deploys a lightweight collector inside your Azure tenant that consumes the Azure Activity Log, evaluates every event against ARMO's CEL-based detection rules, and forwards only matched security alerts to the ARMO Platform, where they appear as Runtime Incidents.
Azure CDR uses the same detection rule engine as ARMO's AWS and GCP CDR, so detections, incident workflows, and custom rules behave consistently across your clouds.
Cloud Detection and ResponseTo view all incidents related to your connected cloud environments, go to Runtime Incidents in the left navigation menu.
How It Works
- In the ARMO onboarding wizard, you enter your subscription (or tenant) details and ARMO generates a ready-to-run
az deploymentcommand with every parameter pre-filled. - You run the command once in Azure Cloud Shell. It creates a Diagnostic Setting that streams the Activity Log to a dedicated Event Hub in your subscription.
- An ARMO collector, running on Azure Container Apps in a dedicated resource group, consumes the Event Hub stream using a managed identity that the deployment creates and authorizes.
- The collector evaluates every log event against ARMO's detection rules inside your subscription.
- Only matched alerts, each carrying the single log record that triggered it, are sent to the ARMO Platform and surfaced as Runtime Incidents.
Your logs stay in your tenantRaw Activity Logs are processed by the collector in your own subscription and never leave your Azure tenant. Only detection alerts and the minimal context needed to investigate them are transmitted to ARMO.
No credential is handed to ARMOUnlike the Compliance (CSPM) connection, CDR needs no app registration, client secret, or custom role. The collector authenticates to Azure with its managed identity, and to ARMO with a per-connection access key that lives only inside your deployment. ARMO stores no Azure credential.
What ARMO Detects
ARMO ships a managed rule set covering suspicious and high-risk control-plane activity in your Azure Activity Log. Categories include, for example:
- Logging & defense evasion — diagnostic settings or Azure Policy assignments deleted, Microsoft Defender for Cloud plans or alert-suppression rules modified, Network Watcher or firewall/WAF policies deleted.
- Identity & privilege escalation — privileged RBAC role assignments, custom role definitions created or modified, Azure Arc-connected cluster credentials listed.
- Secrets & data access — Key Vault access-policy or configuration changes (and Key Vault deletion), storage account key listing or regeneration, blob public-access or ACL changes.
- Execution & persistence — VM run commands and execution-capable extensions, serial-console access, Automation runbooks or webhooks created or modified.
- Network exposure — Network Security Group or SQL server firewall rule changes, network packet capture.
- Destruction — deletion of resource groups, storage accounts, Key Vaults, VM snapshots, or restore-point collections.
Detection rules are written in CEL (Common Expression Language) and managed under Policies → Threat Detection in the ARMO Platform. You can also author your own rules. See Custom Rules.
Log Coverage & Cost
| Log type | Default | Notes |
|---|---|---|
| Azure Activity Log | ✅ Ingested | Subscription-level control-plane events (resource writes, role assignments, policy changes). Free to emit; no license required. |
| Microsoft Entra ID sign-in & audit logs | Not yet | Identity-plane visibility is planned for a later release. |
| Resource (data-plane) diagnostic logs | Not yet | Planned for a later release. |
The CDR components run in your subscription, so their cost is billed to your Azure account:
- Event Hubs, charged by throughput units. Activity Log volume is typically modest.
- Container Apps, running the collector. The collector is lightweight.
- A small storage account, used by the collector to checkpoint its position in the stream.
Prerequisites
| Item | Requirement |
|---|---|
| ARMO Platform | You have Admin or Manager access to the ARMO Platform. |
| Azure access (single subscription) | Owner or User Access Administrator on the subscription. Contributor is not enough, because the deployment creates a role assignment for the collector's managed identity. |
| Azure access (whole tenant) | Owner or User Access Administrator at the Tenant Root Group, plus permission to deploy into the security subscription. |
| Resource providers | The microsoft.insights resource provider is registered on the subscription (it usually auto-registers; the fix is a one-liner shown below). |
| Tooling | Azure Cloud Shell, or any terminal signed in with the Azure CLI (az). |
| Connectivity | Outbound HTTPS (port 443) from the collector to the ARMO Platform. |
Checking your accessAzure Portal → Subscriptions → your subscription → Access control (IAM) → View my access. If you lack Owner or User Access Administrator, ask a subscription Owner to grant it, or hand the generated command to an admin who has it.
Single Subscription Onboarding
Step 1: Start the Azure CDR connection in ARMO
- In the ARMO Platform, go to Settings → Accounts → Azure and click Connect Azure.
- Select the Cloud Detection & Response feature.
- Under What will be the integration scope?, select Single Subscription and click Next.
Step 2: Enter the connection details
| Field | Where to find it |
|---|---|
| Subscription ID | Azure Portal → Subscriptions, copy the ID of the subscription to monitor. |
| Directory (Tenant) ID | Azure Portal → Microsoft Entra ID → Overview. |
| Region | The Azure region the collector should be deployed in. |
| Name | A display name for this connection in ARMO. |
Step 3: Copy the deployment command
ARMO generates a ready-to-run az deployment sub create command with every parameter pre-filled. Click Copy.
The command contains a secretThe command includes the access key for this connection. Treat it as a secret and do not share it or store it in tickets or chat.
Step 4: Run the command in Azure Cloud Shell
-
Open Azure Cloud Shell (the
>_icon in the Azure Portal top bar), or any terminal signed in withaz. -
Make sure you are in the right subscription:
az account set --subscription <SUBSCRIPTION_ID> -
Paste the command and run it. Submitting the deployment takes about two minutes; provisioning completes shortly after.
If the deployment fails because microsoft.insights is not registered, run the following, wait one to two minutes, and re-run the command:
az provider register -n microsoft.insightsStep 5: Return to ARMO
The connection appears in the accounts list as Pending and flips to Connected on the collector's first heartbeat.
A long Pending on first onboarding is normalOn a brand-new subscription, the first Activity Log events can take up to about 90 minutes to arrive. This is a documented Azure diagnostic-setting cold start, not a failure.
What the deployment creates in your subscription
- A resource group (
armo-cdr) to hold the collector stack. - An Event Hubs namespace and event hub that receive the subscription's Activity Log.
- A storage account the collector uses for stream checkpoints.
- A user-assigned managed identity with role assignments limited to receiving from the event hub and accessing the checkpoint storage.
- A Container App running the ARMO collector.
- A subscription-level diagnostic setting routing the Activity Log to the event hub.
Whole Tenant Onboarding
Connects your entire tenant, every subscription including ones created later, through a single central collector instead of onboarding subscriptions one by one. Detection still runs inside your tenant; only matched alerts are sent to ARMO.
ScopeThis flow covers the whole tenant (the Tenant Root Group). Connecting a specific intermediate management group is planned for a later release.
Step 1: Start the connection in ARMO
Click Connect Azure, select Cloud Detection & Response, choose Whole Tenant, and click Next.
Step 2: Enter the connection details
| Field | Where to find it |
|---|---|
| Tenant ID | Azure Portal → Microsoft Entra ID → Overview. |
| Security Subscription ID | The one subscription the shared collector and Event Hub are deployed into. Every other subscription's Activity Log is routed to it. |
| Region | The Azure region for the central collector. |
| Name | A display name for this connection in ARMO. |
Step 3: Make sure you have the required permission
Assigning the tenant-wide policy and granting its remediation identity its roles requires Owner or User Access Administrator at the Tenant Root Group (Azure Portal → Management Groups → Tenant Root Group → Access control (IAM)), plus permission to deploy into the security subscription.
Tip: temporary elevationIf you lack access across subscriptions, a Global Administrator can temporarily elevate: Microsoft Entra ID → Properties → Access management for Azure resources → Yes. Toggle it back to No after onboarding.
Step 4: Copy and run the deployment command
ARMO generates one ready-to-run command. Run it once, signed in to the security subscription:
az account set --subscription <SECURITY_SUBSCRIPTION_ID>
# paste the command generated by ARMOThe single command does everything:
- Deploys the central collector stack (shared Event Hub, Container App, storage) into the security subscription.
- Assigns an Azure Policy (DeployIfNotExists) at your Tenant Root Group and grants its remediation identity Monitoring Contributor at the Tenant Root Group and Azure Event Hubs Data Owner on the central Event Hub namespace.
- Kicks off remediation so every subscription's Activity Log routes to the central Event Hub, including subscriptions created later, with no re-onboarding.
Submitting takes a couple of minutes. The tenant-wide fan-in then completes asynchronously in roughly 10 to 15 minutes. You do not need to keep Cloud Shell open.
Step 5: Return to ARMO
The connection appears as Pending. Unlike a single subscription, a whole-tenant connection does not turn Connected on the collector's heartbeat alone — it stays Pending until at least one subscription's Activity Log is actually reaching the central collector, confirming the tenant-wide fan-in is working. Each subscription's Activity Log starts flowing after the fan-in completes, subject to the same ~90-minute first-delivery warm-up per subscription.
How a whole-tenant connection appears
A Whole Tenant connection is a single entry in the accounts list. It is not expandable and shows no list of its subscriptions: you connect, monitor, and remove the tenant as one unit. It reaches Connected once real Activity Log coverage confirms the fan-in (see Step 5), not on the collector's heartbeat alone.
Connection Status
| Status | Meaning |
|---|---|
| Pending | The connection exists in ARMO and has not turned Connected yet. For a single subscription, the collector has not reported. For a whole tenant, the collector may already be reporting heartbeats but no subscription's Activity Log is reaching the central collector yet (zero coverage). |
| Connected | For a single subscription: the collector has sent at least one heartbeat. For a whole tenant: at least one subscription's Activity Log is reaching the central collector. |
| Disconnected | ARMO has received nothing from the collector for 12 hours. Check that the Container App is running. A collector that resumes reporting reconnects automatically. |
Permissions Reference
| Identity | Role | Granted on | Purpose |
|---|---|---|---|
| Collector managed identity | Azure Event Hubs Data Receiver | CDR event hub | Consume the log stream. |
| Collector managed identity | Storage Blob Data Contributor | Checkpoint storage account | Track its position in the stream. |
| Collector managed identity (whole tenant only) | Management Group Reader, Resource Policy Contributor, and a custom ARMO CDR Subscription Registrar role | Tenant Root Group | Detect and wire subscriptions created after onboarding. |
| Policy remediation identity (whole tenant only) | Monitoring Contributor | Tenant Root Group | Create the Activity Log diagnostic setting on every subscription. |
| Policy remediation identity (whole tenant only) | Azure Event Hubs Data Owner | Central Event Hub namespace | Let each subscription's diagnostic setting write to the central hub. |
No write or administrative access to your workloads or data is requested.
After Onboarding
- New Activity Log events are evaluated continuously; matched detections appear under Runtime Incidents.
- Incidents include the triggering event, the identity involved, and the affected resource, with links to the relevant detection rule.
- Detection rules can be tuned, disabled, or extended under Policies → Threat Detection.
Removing the Integration
CDR runs a collector inside your Azure (and, for a whole tenant, an Azure Policy). Removing the connection in ARMO does not delete those, because ARMO has no access to your Azure. Removal is a two-step flow: run the cleanup command ARMO gives you, then remove the connection in ARMO.
Run the cleanup firstThe cleanup command is generated from your stored connection details, so it is only available while the connection still exists in ARMO.
Single Subscription
- In ARMO, go to Settings → Accounts → Azure and choose Remove on the connection. ARMO shows a cleanup command that deletes the collector's resource group (
armo-cdr) and the subscription's Activity Log diagnostic setting. - Run it in Cloud Shell with the same access you used to onboard.
- Confirm removal in ARMO.
Whole Tenant
The cleanup also removes the tenant-wide policy. Until it is removed, the policy keeps onboarding new subscriptions to the collector.
- In ARMO, choose Remove. ARMO shows a cleanup command that cancels and removes the remediation, removes the policy, deletes the diagnostic settings it created across every subscription, removes the collector's role assignments, and optionally deletes the central collector stack.
- Run it at the tenant scope with the same access you used to onboard.
- Confirm removal in ARMO.
Troubleshooting
| Issue | Likely Cause | Suggested Fix |
|---|---|---|
| Deployment fails with a role-assignment error | The account running the command has Contributor but not Owner or User Access Administrator | Run the command as a subscription Owner or User Access Administrator, or have one grant you the role. |
Deployment fails mentioning microsoft.insights | Resource provider not registered | az provider register -n microsoft.insights, wait one to two minutes, re-run. |
| Connection stays Pending after a successful deployment | Activity Log cold start on a new subscription | Wait up to about 90 minutes. Then check the Container App is running and the diagnostic setting exists under Monitor → Activity log → Diagnostic settings. |
| Whole tenant: some subscriptions never produce incidents | Policy remediation still running, or the subscription is excluded by an Azure Policy exemption | Check the policy assignment's remediation tasks at the Tenant Root Group. |
| Connection shows Disconnected | Collector stopped or the resource group was deleted | Restart or redeploy the collector; the connection reconnects on the next heartbeat. |
Updated about 9 hours ago
