P

K

PAVEL KUCERA

PAVEL KUCERA

PAVEL KUCERA

NETWORK SECURITY ARCHITECTURE

Industrial tank farm at dusk with a digital-twin wireframe overlay, representing OT log telemetry flowing to a SIEM.

Strata Logging Service to Microsoft Sentinel: the DCR migration

Palo Alto's legacy Data Collector path loses support on 14 September 2026. This is the DCR-based Log Ingestion API migration end to end — including the silent schema failure the vendor documentation barely mentions.

·

8 min read

·

Palo Alto Networks

Microsoft Sentinel

Log Forwarding

Detection Engineering

Applies to

  • Source: Strata Logging Service (logs originating from Palo Alto Networks NGFWs and Prisma Access)

  • Destination: Microsoft Sentinel via the Azure Monitor Log Ingestion API (DCR-based)

  • Console: Strata Cloud Manager — Sentinel forwarding no longer appears in the classic Strata Logging Service console

  • Replaces: the legacy Azure Monitor HTTP Data Collector API

  • Licensing: an NGFW or Prisma Access source, plus Strata Cloud Manager Pro or Strata Logging Service

Key takeaways

  • The legacy Data Collector API reaches end of support on 14 September 2026. The DCR-based Log Ingestion API is the supported path — but this is end of support, not a hard shutdown, so migrate deliberately rather than in a panic.

  • Sentinel forwarding now lives only in Strata Cloud Manager, not the Strata Logging Service console.

  • The DCR defines the table schema, and that schema is enforced. A field whose name or type doesn't match — or that the DCR never declares — is dropped on ingestion.

  • An HTTP 204 confirms receipt, not ingestion. Empty columns are almost always a schema or type mismatch, not a transport failure.

  • Authentication is an Entra service principal with the Monitoring Metrics Publisher role on the DCR. No interactive redirect URI.

  • Migrating a legacy table? Strip the type suffixes from every column (Action_sAction) before reusing the schema.

What this migration actually is

For years, forwarding Strata Logging Service logs into a Log Analytics workspace meant the Azure Monitor HTTP Data Collector API: a workspace ID, a shared key, and a POST. It worked, but it was a 2016-era design — symmetric-key authentication, no server-side shaping, and Azure inventing column types from whatever you happened to send.

The Log Ingestion API replaces it. Authentication moves to an Entra service principal over OAuth. A Data Collection Rule (DCR) sits in front of the workspace, declares the table schema explicitly, and can apply a KQL transformation at ingestion time. You gain role-based access control, private-link support, and the ability to shape data before it lands. You also inherit one consequence that runs through the rest of this piece: the schema is now enforced, and anything that doesn't fit is discarded quietly.

This walkthrough covers both a clean build and a migration from the legacy sink. I ran it end to end against a production Strata Logging Service tenant; the screenshots are from that work.

Why now — read the deadline carefully

Two Microsoft dates matter. On 1 March 2026 the Data Collector API endpoint stopped accepting TLS versions below 1.2, so any client that can't negotiate TLS 1.2 already can't ingest. On 14 September 2026 the legacy API reaches end of support.

That second date is widely misread. Microsoft's current guidance is explicit that existing ingestion keeps working for TLS 1.2+ clients after that date; what ends is support — no new features, no further investment, only critical security fixes. The older Azure Updates retirement announcement said the endpoints would become unavailable after the cut-over, and that wording — now outdated — is the source of most of the confusion.

The practical reading: nothing breaks overnight, but you should not be standing up new production ingestion on a deprecated API, and you should migrate what you already run — not least because the Data Collector API never supported Azure Monitor Private Link. That is the whole reason this walkthrough exists.

The moving parts

Everything on the Azure side has to exist before Strata Cloud Manager has anything to authenticate to. In order: a Data Collection Endpoint, a Data Collection Rule with a defined table, an Entra service principal with a secret, and a role assignment. Only then does the forwarding profile have somewhere to send.

One note on where the setting lives. As Palo Alto migrates features into Strata Cloud Manager, Sentinel forwarding now appears only in SCM, not in the classic Strata Logging Service console. As of June 2026 the option had to be enabled per tenant by raising a support case; by the time you read this it is likely generally available.

The procedure

1. Create the Data Collection Endpoint

The DCE is the ingestion front door. In the Azure portal, search for Data collection endpoints, create one in the same region as your Log Analytics workspace, and note the Logs Ingestion URL from the overview — you'll need it when you assemble the SLS.

Azure portal Data Collection Endpoint overview showing the Logs Ingestion URL.

2. Create the Data Collection Rule and define the schema

This is where the integration quietly succeeds or fails. Create a DCR of platform type Custom, associate the DCE and the workspace, and define a table whose columns match — exactly — the fields Strata Logging Service sends. The field definitions for each log type are in Palo Alto's network log reference.

Azure Data Collection Rule overview with the JSON View control highlighted.

Open the DCR's JSON View to read the two values the forwarding profile needs.

From the JSON view you need two things: the immutableId under properties, and the stream name under dataFlows. Both go into the SLS URL later.

DCR JSON view showing the immutableId field under properties.

The immutable ID sits under properties.

DCR JSON view showing the stream name under dataFlows.

The stream name sits under dataFlowsstreams.

If you're migrating an existing Classic table, you can reuse its schema — but strip the legacy type suffixes from every column first. The Data Collector API appended a type marker to each name (_s string, _d double, _b boolean); the DCR schema uses the bare name. Action_s becomes Action, and so on.

Two constraints bite here:

  • No hyphens in column names. Azure Log Analytics forbids them, so Palo Alto's X-Forwarded-ForIP has to be renamed — usually to X_Forwarded_ForIP via a KQL transformation in the DCR.

  • TimeGenerated (datetime) is mandatory. Every row needs it; the transformation typically sets it from the log's own timestamp.

3. Create the service principal

Authentication is a non-interactive, machine-to-machine connection. In the Entra admin centre, create an app registration and leave the Redirect URI blank — there's no interactive sign-in, so no redirect path is needed, even under a federated Id

Entra admin centre app registrations screen.

A plain app registration — no redirect URI.

Then create a client secret and record its Value immediately. The Value is shown only once; the Secret ID is not what you n

Certificates and secrets screen with a new client secret.

ecord the secret's Value, not its Secret ID.

4. Assign the ingestion role

The service principal needs permission to push to Azure Monitor. On the DCR, open Access control (IAM) and assign Monitoring Metrics Publisher to the app registration. Scope it to the DCR itself rather than the resource group if you want least privilege.

DCR Access control showing a Monitoring Metrics Publisher role assignment to a service principal.

Monitoring Metrics Publisher, scoped to the DCR, granted to the service principal.

5. Build the forwarding profile in Strata Cloud Manager

In SCM, go to System Settings → Strata Logging Service → Log Forwarding → HTTPS and add a new HTTPS profile:

Strata Cloud Manager Log Forwarding HTTPS profiles list.

Give the profile a name. If you split each log type into its own Sentinel table, use the profile name to correspond with log type.

SCM Step 1 configure HTTPS forwarding profile.

Step 1 of the profile — name and destination URL.

The URL and the client-authorisation fields are the crux. Map them as follows:

SLS field

Value


URL (Destination)

https://<DCE-Name>.<Region>.ingest.monitor.azure.com/dataCollectionRules/<DCR-Immutable-ID>/streams/<Stream-Name>?api-version=2023-01-01


MS Tenant ID

Entra ID → Overview → Tenant ID


Client Request ID

App registration's Application (client) ID


Client Secret

The secret's Value (not the Secret ID)


Token Endpoint

https://login.microsoftonline.com/<Tenant-ID>/oauth2/v2.0/token


Scope

https://monitor.azure.com/.d



SCM client authorization fields for Microsoft Sentinel.

Two things the field labels invite you to get wrong: SCM's Client Request ID is the Entra Application (client) ID, and Client Secret is the secret Value, not the Secret ID. Cross either and the test fails with an opaque error. And only api-version 2023-01-01 was accepted in testing, even though Azure exposes other versions.

SCM Test Connection returning a green Success.

Press Test Connection. A green Success means auth and the endpoint resolve, and the Next button unlocks.

6. Choose what to forward

Step 2 defines the payload. Leave the format as ARRAY_JSON and add a filter per log type — Network Logs, hipmatch, threat, and so on — so only the logs you intend reach this tabl

SCM Step 2 payload filters with a per-log-type filter.

A filter scoping the profile to a single log type.

Saving is permanent. The warning about changes being made permanent is not boilerplate — it commits the filter set.

7. Provision, then confirm ingestion

After saving, the profile moves through Pending and Provisioning before Running.

SCM profile status list showing Pending and Provisioning states.

Within a few minutes the Sentinel table populates. Query it by name and confirm rows are arriving.

Microsoft Sentinel query returning rows in the custom Palo Alto table.

A 204 is a receipt, not a guarantee

This is the failure mode to internalise, because it's the one the vendor documentation mentions once and moves past. The DCE returns HTTP 204 when it accepts your payload. That confirms the endpoint received the data — nothing more. If a field's name or type doesn't match the table, or the field was never declared, Azure drops it on ingestion. The transport looks perfectly healthy while the column stays empty.

So when a Sentinel column comes up blank, don't chase the network path. The cause is almost always the schema.


Palo Alto field type

Examples

Azure data type

Time / date

receive_time, time_generated

datetime

Identifiers / IPs

src, dst, rule, sessionid

string

Counts / bytes

bytes, packets, repeatcnt

long

Ports

sport, dport

int

Column names are case-sensitive. Booleans must be JSON true/false. Hexadecimal strings such as Flags and ActionFlags must be declared as strings. Fix the schema or the transformation — not the pipe.

Deleting a profile — one quiet caveat

Worth knowing before you clean up. Deleting a forwarding profile in SCM gives no confirmation dialog and no immediate feedback: the page sits for about five seconds, then a success toast appears top-right. All remaining profiles briefly flip to Provisioning, but forwarding to Sentinel is not interrupted. It looks alarming the first time; it's normal.

In short

  • The legacy Data Collector API is end-of-support on 14 September 2026; the DCR-based Log Ingestion API is the supported path. Migrate — but you're not racing a hard shutdown.

  • Build the Azure side first: DCE, then a DCR with an exact table schema, then a service principal with Monitoring Metrics Publisher on the DCR.

  • Sentinel forwarding lives only in Strata Cloud Manager now.

  • The schema is enforced. A 204 means received, not stored — empty columns are a schema problem, not a transport one.

  • Migrating a legacy table? Strip the _s/_d/_b suffixes; the DCR uses bare column names.

FAQ

Do I have to migrate off the Data Collector API? You should. Support ends 14 September 2026. Existing ingestion continues for TLS 1.2+ clients afterwards, but the API gets only critical security fixes and no new capability, and it never supported Azure Monitor Private Link. Treat anything still on it as legacy.

My Sentinel table is empty but the connection test passed — what's wrong? Almost always a schema mismatch. A 204 from the endpoint confirms receipt, not ingestion. Check column names (case-sensitive), types (hex as string, booleans as JSON true/false), and that every field you send is declared in the DCR or handled in the transformation. Undeclared fields are dropped silently.

Where is the Sentinel forwarding setting — I can't find it in Strata Logging Service? It moved to Strata Cloud Manager: System Settings → Strata Logging Service → Log Forwarding → HTTPS. As of mid-2026 it may need enabling per tenant via a support case.

Can I keep my existing custom table? Yes — migrate it to the Log Ingestion API and reuse the schema, but remove the legacy type suffixes from the column names first (Action_sAction). Alternatively, create a fresh table and delete the legacy one once you've verified data is landing.

Which api-version should the URL use? 2023-01-01. Other versions exist, but this was the only one accepted in testing.


Pavel Kucera is an independent network security architect (CCIE No. 61291) working on firewall policy, segmentation, and OT/IoT visibility across enterprise and industrial environments. If you are planning a log-forwarding migration or reviewing Microsoft Sentinel ingestion architecture, let’s talk.

Sources

All vendor references verified 14 September 2026.