
Explanation:

To hunt for resource changes in an Azure subscription via Microsoft Sentinel, the correct telemetry source is the AzureActivity table. Microsoft documents state that Azure Activity logs record control-plane operations against Azure resources (e.g., create/update/delete) and include fields such as OperationNameValue , ActivityStatusValue , Caller , ResourceId , and EventSubmissionTimestamp . Filtering with OperationNameValue endswith " write " captures change operations (create/update), while ActivityStatusValue == " Succeeded " ensures only successful changes are counted. For time-series analysis over fixed intervals and to substitute missing data points with 0 , use the KQL make-series operator with the default=0 parameter. This operator builds per-principal daily series using on EventSubmissionTimestamp in range(ago(7d), now(), 1d) by Caller , and dcount(ResourceId) (or count() ) returns the number of resource changes each day per Microsoft Entra security principal. This aligns with Sentinel hunting best practices: use AzureActivity for subscription-level changes, filter to succeeded writes, and leverage make-series to produce a 7-day daily series with zero-fill for gaps-minimizing false impressions caused by missing events.
Final KQL:
AzureActivity
| where OperationNameValue endswith " write "
| where ActivityStatusValue == " Succeeded "
| make-series dcount(ResourceId) default=0
on EventSubmissionTimestamp in range(ago(7d), now(), 1d)
by Caller