Thanks a lot for your quick reply Noa :-)
I have done some more testing just now and can confirm that there is in fact changes as you mentioned. For Sentinel tables there is no longer a need for ReportId and other required columns, and detections that use either Sentinel only tables or XDR only tables work just fine.
However, my testing shows that there still appears to be major limitations when it comes to detections using Sentinel data. A custom XDR detection rule that looks at Sentinel data will only be successful if the query has no reference to an XDR table, for example in the form of a join or union. A custom detection rule that refers to both a Sentinel table and an XDR table will fail if results come from the Sentinel table, and give the error "No events match the given event identifiers (a combination of ReportId, AlertId, BehaviorId, or DeviceId and Timestamp). Edit the query's aggregation expressions for these columns and try again."
This means that even though you can have a XDR detection rule that looks as Sentinel data, it must be ONLY Sentinel data in that rule, and no reference to XDR tables.
Two super simple examples just to demonstrate the error follow. Both of these queries are successful in Advanced Hunting, but fail when run as XDR Custom Detection Rules.
Example 1: Leftouter join (e..g for enrichment) - always fails:
let timeframe = 1h;
SecurityEvent
| where ingestion_time() > ago(timeframe)
| where EventID == 4688
| where CommandLine contains "test evil"
| extend DeviceName = Computer
| join kind = leftouter (DeviceProcessEvents | take 1) on $left.Computer == $right.DeviceName // simulate enrichment just to replicate error
Example 2: Union with XDR and Sentinel table:
let timeframe = 1h;
let MDE = DeviceProcessEvents
| where ingestion_time() > ago(timeframe)
| where ProcessCommandLine contains "test evil";
let Sentinel = SecurityEvent
| where ingestion_time() > ago(timeframe)
| where EventID == 4688
| where CommandLine contains "test evil"
| extend DeviceName = Computer;
union MDE, Sentinel
This query does a union with a XDR table and a Sentinel table. It will be successful if results are only from the XDR table, but always fail if there is any results from the Sentinel table.
Both of these examples are successful in advanced hunting, but still fail as detection rules. So seems like as long as there is a reference to any XDR table in the query, it defaults over to "XDR-mode" and expects ReportId etc in each result in the result set, otherwise fails.