Migrate ArcSight Detection Rules to Microsoft Sentinel
In brief
The article was revised with updated metadata and wording, including references to the six-to-12-month rule review window, built-in templates, ArcSight-to-KQL mapping, playbooks, and related resources.
What Defender admins need to know
Administrators following the migration guide can use the updated wording and links to navigate rule conversion and related tasks.
Summaries are generated from the documentation change itself.
Documentation change
The comparison below shows only the changed extract. Use the full-page view for complete context.
title: Migrate ArcSight detection rulesDetection Rules to Microsoft Sentinel
description: Identify, compare, and migrate your ArcSight detection rules to Microsoft Sentinel analytics rules.
author: EdB-MSFT
ms.author: edbaynash
ms.topic: how-to
ms.date: 06/15/07/01/2026
ms.custom: sfi-image-nochange, msecd-doc-authoring-10141016
ai-usage: ai-assisted
Microsoft Sentinel uses machine learning analytics to create high-fidelity and actionable incidents, and some of your existing detections may be redundant in Microsoft Sentinel. Therefore, don't migrate all of your detection and analytics rules blindly. Review the following considerations as you identify your existing detection rules.
- Make sure to select use cases that justify rule migration, considering business priority and efficiency.
- Check that you understand Microsoft Sentinel rule types.
- Check that you understand the rule terminology.
- Review any rules that haven't triggered any alerts in the past
6-six to 12 months, and determine whether they're still relevant. - Eliminate low-level threats or alerts that you routinely ignore.
- Use existing functionality, and check whether Microsoft Sentinel’s built-in analytics rules might address your current use cases. Because Microsoft Sentinel uses machine learning analytics to produce high-fidelity and actionable incidents, it’s likely that some of your existing detections won’t be required anymore.
- Confirm connected data sources and review your data connection methods. Revisit data collection conversations to ensure data depth and breadth across the use cases you plan to detect.
- Explore community resources such as the SOC Prime Threat Detection Marketplace to check whether your rules are available.
- Consider whether an online query converter such as Uncoder.io might work for your rules.
- If rules aren’t available or can’t be converted, they need to be created manually, using a KQL query. Review the rules mapping to create new queries.
Learn more about best practices for migrating detection rules.
In Microsoft Sentinel, go to the **Configuration > Analytics > Rule templates** tab, and create and update each relevant analytics rule.
For more information,To learn how to create rules from built-in templates, see [Create scheduled analytics rules from templates](create-analytics-rule-from-template.md).
- **If you have detections that aren't covered by Microsoft Sentinel's built-in rules**, try an online query converter, such as [Uncoder.io](https://uncoder.io/) to convert your queries to KQL.
1. **Identify your rule criteria and logic**. At this stage, you may want to use rule templates as samples for how to construct your KQL queries.
Consider filters, correlation rules, active lists, reference sets, watchlists, detection anomalies, aggregations, and so on. You might use references provided by your legacy SIEM to understand [how[map ArcSight query syntax to best map your query syntax]KQL](#map-and-compare-rule-samples).
1. **Identify the trigger condition and rule action, and then construct and review your KQL query**. When reviewing your query, consider KQL optimization guidance resources.
Test the rule with each of your relevant use cases. If it doesn't provide expected results, you may want to review the KQL and test it again.
When you're satisfied, you can consider the rule migrated. Create a playbook for your rule action as needed.
For more information,To create and use playbooks for rule actions, see Automate threat response with playbooks in Microsoft Sentinel.
Learn more about analytics rules:
- Scheduled analytics rules in Microsoft Sentinel
.: Use alert grouping to reduce alert fatigue by grouping alerts that occur within a given timeframe. - Map data fields to entities in Microsoft Sentinel
to: To enable SOC engineers to define entities as part of the evidence to track during an investigation. Entity mapping also makes it possible for SOC analysts to take advantage of an intuitive investigation graph that can help reduce time and effort. - Investigate incidents with UEBA data
, as: As an example of how to use evidence to surface events, alerts, and any bookmarks associated with a particular incident in the incident preview pane. - Kusto Query Language (KQL)
, which you: You can use KQL to send read-only requests to your Log Analytics database to process data and return results. KQL is also used across other Microsoft services, such as Microsoft Defender for Endpoint and Application Insights.
Compare rule terminology
| ArcSight | Microsoft Sentinel | |
|---|---|---|
| Rule type | ||
| Criteria | Define in rule conditions | Define in KQL |
| Trigger condition | Threshold: Number of query results | |
| Action |
Map and compare rule samples
Use the following samples to compare and mapArcSight detection rules from ArcSight towith equivalent Microsoft Sentinel queries written in various scenarios.Kusto Query Language (KQL).
| Rule | Description | Sample detection rule (ArcSight) | Sample KQL query | Resources |
|---|---|---|---|---|
Filter (AND) |
A sample rule with AND conditions. The event must match all conditions. |
Filter (AND) example | Filter (AND) example | String filter: Numerical filter: Datetime filter: Parsing: |
Filter (OR) |
A sample rule with OR conditions. The event can match any of the conditions. |
Filter (OR) example | Filter (OR) example | |
| Nested filter | A sample rule with nested filtering conditions. The rule includes the MatchesFilter statement, which also includes filtering conditions. |
Nested filter example | Nested filter example | |
| Active list (lookup) | A sample lookup rule that uses the InActiveList statement. |
Active list (lookup) example | Active list (lookup) example | |
| Correlation (matching) | A sample rule that defines a condition against a set of base events, using the Matching Event statement. |
Correlation (matching) example | Correlation (matching) example | join operator: define statement: Aggregation: |
| Correlation (time window) | A sample rule that defines a condition against a set of base events, using the Matching Event statement, and uses the Wait time filter condition. |
Correlation (time window) example | Correlation (time window) example |
Filter (AND) example: ArcSight
isnotempty(TargetDomainName) | where SubjectUserName !~ "AutoMatedService"
As a second option, use a KQL function:
1. Save the following query as a KQL function with the `ExcludeValidUsers` alias.
```kusto
SecurityEvent
| where EventID == 4728
As a third option, use a parameter function:
1. Create a parameter function with `ExcludeValidUsers` as the name and alias.
2.1. Define the parameters of the function. For example:
```kusto
Tbl: (TimeGenerated:datetime, Computer:string,
```
1. The `parameter` function has the following query:
```kusto
Tbl
| where SubjectUserName !~ "AutoMatedService"
| join kind=leftanti ExcludeValidUsers on
$left.SubjectUserName == $right.SubjectUserName
Considerations:
Considerations
- We recommend that you use a direct filter with a
wherestatement (first option) due to its simplicity. For optimized performance, avoid usingjoin(fourth option). - To optimize your queries, avoid the
=~and!~case-insensitive operators when possible. Use the==and!=operators if the value isn't case-sensitive.
Active list (lookup) example: KQL
This rule assumes that the Cyber-Ark Exception Accounts watchlist exists in Microsoft Sentinel with an Account field.
let Activelist=(
TimeGenerated,SourceHostName,
SourceUserName, DeviceEventClassID
Order the filters by starting with the where statement that filters out the most data.
Correlation (matching) example: ArcSight
| join kind=inner event2
on $left.TargetUserName==$right.TargetUserName
Best practices:
- To optimize your query, ensure that the smaller table is on the left side of the `join` function.
- If the left side of the table is relatively small (up to 100 K records), add `hint.strategy=broadcast` for better performance.
AccountUsedToRemove,event1_Host,event2_Host,
event1_UPN,event2_UPN
Aggregation example: ArcSight
Here's a sample ArcSight rule with aggregation settings: three matches within 10 minutes.
| where Count >3
## Next steps
In this article, you learned how to map your migration rules from ArcSight to Microsoft Sentinel.
> [!div class="nextstepaction"]
> [Migrate your SOAR automation](migration-arcsight-automation.md)
The following KQL query uses the Cyber-Ark Exception Accounts watchlist to filter lookup results.
let Activelist=(
TimeGenerated,SourceHostName,
SourceUserName, DeviceEventClassID
Order the filters by starting with the where statement that filters out the most data.
Correlation (matching) example: ArcSight
| join kind=inner event2 on $left.TargetUserName==$right.TargetUserName
#### Best practices
- To optimize your query, ensure that the smaller table is on the left side of the `join` function.
- If the left side of the table is relatively small (up to 100 K records), add `hint.strategy=broadcast` for better performance.
AccountUsedToRemove,event1_Host,event2_Host,
event1_UPN,event2_UPN
Aggregation example: ArcSight
Here's a sample ArcSight rule with aggregation settings: three matches within 10 minutes. | where Count >3
## Next step
> [!div class="nextstepaction"]
> [Migrate your SOAR automation](migration-arcsight-automation.md)
@@ -1,11 +1,11 @@ ----title: Migrate ArcSight detection rules to Microsoft Sentinel+title: Migrate ArcSight Detection Rules to Microsoft Sentinel description: Identify, compare, and migrate your ArcSight detection rules to Microsoft Sentinel analytics rules. author: EdB-MSFT ms.author: edbaynash ms.topic: how-to-ms.date: 06/15/2026-ms.custom: sfi-image-nochange, msecd-doc-authoring-1014+ms.date: 07/01/2026+ms.custom: sfi-image-nochange, msecd-doc-authoring-1016 ai-usage: ai-assisted @@ -22,15 +22,15 @@ This article describes how to identify, compare, and migrate your ArcSight detec Microsoft Sentinel uses machine learning analytics to create high-fidelity and actionable incidents, and some of your existing detections may be redundant in Microsoft Sentinel. Therefore, don't migrate all of your detection and analytics rules blindly. Review the following considerations as you identify your existing detection rules. - Make sure to select use cases that justify rule migration, considering business priority and efficiency.-- Check that you [understand Microsoft Sentinel rule types](threat-detection.md). +- Check that you [understand Microsoft Sentinel rule types](threat-detection.md). - Check that you understand the [rule terminology](#compare-rule-terminology).-- Review any rules that haven't triggered any alerts in the past 6-12 months, and determine whether they're still relevant.+- Review any rules that haven't triggered any alerts in the past six to 12 months, and determine whether they're still relevant. - Eliminate low-level threats or alerts that you routinely ignore. - Use existing functionality, and check whether Microsoft Sentinel’s [built-in analytics rules](https://github.com/Azure/Azure-Sentinel/tree/master/Detections) might address your current use cases. Because Microsoft Sentinel uses machine learning analytics to produce high-fidelity and actionable incidents, it’s likely that some of your existing detections won’t be required anymore. - Confirm connected data sources and review your data connection methods. Revisit data collection conversations to ensure data depth and breadth across the use cases you plan to detect. - Explore community resources such as the [SOC Prime Threat Detection Marketplace](https://my.socprime.com/platform-overview/) to check whether your rules are available.-- Consider whether an online query converter such as Uncoder.io might work for your rules. -- If rules aren’t available or can’t be converted, they need to be created manually, using a KQL query. Review the [rules mapping](#map-and-compare-rule-samples) to create new queries. +- Consider whether an online query converter such as Uncoder.io might work for your rules.+- If rules aren’t available or can’t be converted, they need to be created manually, using a KQL query. Review the [rules mapping](#map-and-compare-rule-samples) to create new queries. Learn more about [best practices for migrating detection rules](https://techcommunity.microsoft.com/t5/microsoft-sentinel-blog/best-practices-for-migrating-detection-rules-from-arcsight/ba-p/2216417). @@ -50,7 +50,7 @@ Learn more about [best practices for migrating detection rules](https://techcomm In Microsoft Sentinel, go to the **Configuration > Analytics > Rule templates** tab, and create and update each relevant analytics rule. - For more information, see [Create scheduled analytics rules from templates](create-analytics-rule-from-template.md).+ To learn how to create rules from built-in templates, see [Create scheduled analytics rules from templates](create-analytics-rule-from-template.md). - **If you have detections that aren't covered by Microsoft Sentinel's built-in rules**, try an online query converter, such as [Uncoder.io](https://uncoder.io/) to convert your queries to KQL. @@ -64,20 +64,20 @@ Learn more about [best practices for migrating detection rules](https://techcomm 1. **Identify your rule criteria and logic**. At this stage, you may want to use rule templates as samples for how to construct your KQL queries. - Consider filters, correlation rules, active lists, reference sets, watchlists, detection anomalies, aggregations, and so on. You might use references provided by your legacy SIEM to understand [how to best map your query syntax](#map-and-compare-rule-samples).+ Consider filters, correlation rules, active lists, reference sets, watchlists, detection anomalies, aggregations, and so on. You might use references provided by your legacy SIEM to [map ArcSight query syntax to KQL](#map-and-compare-rule-samples). 1. **Identify the trigger condition and rule action, and then construct and review your KQL query**. When reviewing your query, consider KQL optimization guidance resources. 1. Test the rule with each of your relevant use cases. If it doesn't provide expected results, you may want to review the KQL and test it again. -1. When you're satisfied, you can consider the rule migrated. Create a playbook for your rule action as needed. For more information, see [Automate threat response with playbooks in Microsoft Sentinel](automate-responses-with-playbooks.md).+1. When you're satisfied, you can consider the rule migrated. Create a playbook for your rule action as needed. To create and use playbooks for rule actions, see [Automate threat response with playbooks in Microsoft Sentinel](automate-responses-with-playbooks.md). Learn more about analytics rules: -- [**Scheduled analytics rules in Microsoft Sentinel**](scheduled-rules-overview.md). Use [alert grouping](scheduled-rules-overview.md#alert-grouping) to reduce alert fatigue by grouping alerts that occur within a given timeframe.-- [**Map data fields to entities in Microsoft Sentinel**](map-data-fields-to-entities.md) to enable SOC engineers to define entities as part of the evidence to track during an investigation. Entity mapping also makes it possible for SOC analysts to take advantage of an intuitive [investigation graph](investigate-cases.md#use-the-investigation-graph-to-deep-dive) that can help reduce time and effort.-- [**Investigate incidents with UEBA data**](investigate-with-ueba.md), as an example of how to use evidence to surface events, alerts, and any bookmarks associated with a particular incident in the incident preview pane.-- [**Kusto Query Language (KQL)**](/kusto/query/?view=microsoft-sentinel&preserve-view=true), which you can use to send read-only requests to your [Log Analytics](/azure/azure-monitor/logs/log-analytics-tutorial) database to process data and return results. KQL is also used across other Microsoft services, such as [Microsoft Defender for Endpoint](https://www.microsoft.com/microsoft-365/security/endpoint-defender) and [Application Insights](/azure/azure-monitor/app/app-insights-overview).+- [**Scheduled analytics rules in Microsoft Sentinel**](scheduled-rules-overview.md): Use [alert grouping](scheduled-rules-overview.md#alert-grouping) to reduce alert fatigue by grouping alerts that occur within a given timeframe.+- [**Map data fields to entities in Microsoft Sentinel**](map-data-fields-to-entities.md): To enable SOC engineers to define entities as part of the evidence to track during an investigation. Entity mapping also makes it possible for SOC analysts to take advantage of an intuitive [investigation graph](investigate-cases.md#use-the-investigation-graph-to-deep-dive) that can help reduce time and effort.+- [**Investigate incidents with UEBA data**](investigate-with-ueba.md): As an example of how to use evidence to surface events, alerts, and any bookmarks associated with a particular incident in the incident preview pane.+- [**Kusto Query Language (KQL)**](/kusto/query/?view=microsoft-sentinel&preserve-view=true): You can use KQL to send read-only requests to your [Log Analytics](/azure/azure-monitor/logs/log-analytics-tutorial) database to process data and return results. KQL is also used across other Microsoft services, such as [Microsoft Defender for Endpoint](https://www.microsoft.com/microsoft-365/security/endpoint-defender) and [Application Insights](/azure/azure-monitor/app/app-insights-overview). ## Compare rule terminology @@ -85,23 +85,23 @@ This table helps you to clarify the concept of a rule in Microsoft Sentinel comp | |ArcSight |Microsoft Sentinel | |---------|---------|---------|-|**Rule type** |• Filter rule<br>• Join rule<br>• Active list rule<br>• And more |• Scheduled query<br>• Fusion<br>• Microsoft Security<br>• Machine Learning (ML) Behavior Analytics |+|**Rule type** |- Filter rule<br>- Join rule<br>- Active list rule<br>- And more |- Scheduled query<br>- Fusion<br>- Microsoft Security<br>- Machine Learning (ML) Behavior Analytics | |**Criteria** |Define in rule conditions |Define in KQL |-|**Trigger condition** |• Define in action<br>• Define in aggregation (for event aggregation) |Threshold: Number of query results |-|**Action** |• Set event field<br>• Send notification<br>• Create new case<br>• Add to active list<br>• And more |• Create alert or incident<br>• Integrates with Logic Apps |+|**Trigger condition** |- Define in action<br>- Define in aggregation (for event aggregation) |Threshold: Number of query results |+|**Action** |- Set event field<br>- Send notification<br>- Create new case<br>- Add to active list<br>- And more |- Create alert or incident<br>- Integrates with Logic Apps | ## Map and compare rule samples -Use the following samples to compare and map rules from ArcSight to Microsoft Sentinel in various scenarios.+Use the following samples to compare ArcSight detection rules with equivalent Microsoft Sentinel queries written in Kusto Query Language (KQL). |Rule |Description |Sample detection rule (ArcSight) |Sample KQL query |Resources | |---------|---------|---------|---------|---------|-|Filter (`AND`) |A sample rule with `AND` conditions. The event must match all conditions. |[Filter (AND) example](#filter-and-example-arcsight) |[Filter (AND) example](#filter-and-example-kql) |String filter:<br>• [String operators](/kusto/query/datatypes-string-operators?view=microsoft-sentinel&preserve-view=true#operators-on-strings)<br><br>Numerical filter:<br>• [Numerical operators](/kusto/query/numerical-operators?view=microsoft-sentinel&preserve-view=true)<br><br>Datetime filter:<br>• [ago](/kusto/query/ago-function?view=microsoft-sentinel&preserve-view=true)<br>• [Datetime](/kusto/query/datetime-timespan-arithmetic?view=microsoft-sentinel&preserve-view=true)<br>• [between](/kusto/query/between-operator?view=microsoft-sentinel&preserve-view=true)<br>• [now](/kusto/query/now-function?view=microsoft-sentinel&preserve-view=true)<br><br>Parsing:<br>• [parse](/kusto/query/parse-operator?view=microsoft-sentinel&preserve-view=true)<br>• [extract](/kusto/query/extract-function?view=microsoft-sentinel&preserve-view=true)<br>• [parse_json](/kusto/query/parse-json-function?view=microsoft-sentinel&preserve-view=true)<br>• [parse_csv](/kusto/query/parse-csv-function?view=microsoft-sentinel&preserve-view=true)<br>• [parse_path](/kusto/query/parse-path-function?view=microsoft-sentinel&preserve-view=true)<br>• [parse_url](/kusto/query/parse-url-function?view=microsoft-sentinel&preserve-view=true) |-|Filter (`OR`) |A sample rule with `OR` conditions. The event can match any of the conditions. |[Filter (OR) example](#filter-or-example-arcsight) |[Filter (OR) example](#filter-or-example-kql) |• [String operators](/kusto/query/datatypes-string-operators?view=microsoft-sentinel&preserve-view=true#operators-on-strings)<br>• [in](/kusto/query/in-operator?view=microsoft-sentinel&preserve-view=true) |-|Nested filter |A sample rule with nested filtering conditions. The rule includes the `MatchesFilter` statement, which also includes filtering conditions. |[Nested filter example](#nested-filter-example-arcsight) |[Nested filter example](#nested-filter-example-kql) |• [Use KQL functions to speed up analysis](https://techcommunity.microsoft.com/t5/azure-sentinel/using-kql-functions-to-speed-up-analysis-in-azure-sentinel/ba-p/712381)<br>• [Enrich Windows security events with a parameterized function](https://techcommunity.microsoft.com/t5/microsoft-sentinel-blog/enriching-windows-security-events-with-parameterized-function/ba-p/1712564)<br>• [join](/kusto/query/join-operator?view=microsoft-sentinel&preserve-view=true)<br>• [where](/kusto/query/where-operator?view=microsoft-sentinel&preserve-view=true) |-|Active list (lookup) |A sample lookup rule that uses the `InActiveList` statement. |[Active list (lookup) example](#active-list-lookup-example-arcsight) |[Active list (lookup) example](#active-list-lookup-example-kql) |• A watchlist is the equivalent of the active list feature. Learn more about [watchlists](watchlists.md).<br>• [Other ways to implement lookups](https://techcommunity.microsoft.com/t5/azure-sentinel/implementing-lookups-in-azure-sentinel/ba-p/1091306) |-|Correlation (matching) |A sample rule that defines a condition against a set of base events, using the `Matching Event` statement. |[Correlation (matching) example](#correlation-matching-example-arcsight) |[Correlation (matching) example](#correlation-matching-example-kql) |join operator:<br>• [join](/kusto/query/join-operator?view=microsoft-sentinel&preserve-view=true)<br>• [join with time window](/kusto/query/join-time-window?view=microsoft-sentinel&preserve-view=true)<br>• [shuffle](/kusto/query/shuffle-query?view=microsoft-sentinel&preserve-view=true)<br>• [Broadcast](/kusto/query/broadcast-join?view=microsoft-sentinel&preserve-view=true)<br>• [Union](/kusto/query/union-operator?view=microsoft-sentinel&preserve-view=true)<br><br>define statement:<br>• [let](/kusto/query/let-statement?view=microsoft-sentinel&preserve-view=true)<br><br>Aggregation:<br>• [make_set](/kusto/query/make-set-aggregation-function?view=microsoft-sentinel&preserve-view=true)<br>• [make_list](/kusto/query/make-list-aggregation-function?view=microsoft-sentinel&preserve-view=true)<br>• [make_bag](/kusto/query/make-bag-aggregation-function?view=microsoft-sentinel&preserve-view=true)<br>• [bag_pack](/kusto/query/pack-function?view=microsoft-sentinel&preserve-view=true) |-|Correlation (time window) |A sample rule that defines a condition against a set of base events, using the `Matching Event` statement, and uses the `Wait time` filter condition. |[Correlation (time window) example](#correlation-time-window-example-arcsight) |[Correlation (time window) example](#correlation-time-window-example-kql) |• [join](/kusto/query/join-operator?view=microsoft-sentinel&preserve-view=true)<br>• [Microsoft Sentinel rules and join statement](https://techcommunity.microsoft.com/t5/azure-sentinel/azure-sentinel-correlation-rules-the-join-kql-operator/ba-p/1041500) |+|Filter (`AND`) |A sample rule with `AND` conditions. The event must match all conditions. |[Filter (AND) example](#filter-and-example-arcsight) |[Filter (AND) example](#filter-and-example-kql) |String filter:<br>- [String operators](/kusto/query/datatypes-string-operators?view=microsoft-sentinel&preserve-view=true#operators-on-strings)<br><br>Numerical filter:<br>- [Numerical operators](/kusto/query/numerical-operators?view=microsoft-sentinel&preserve-view=true)<br><br>Datetime filter:<br>- [ago](/kusto/query/ago-function?view=microsoft-sentinel&preserve-view=true)<br>- [Datetime](/kusto/query/datetime-timespan-arithmetic?view=microsoft-sentinel&preserve-view=true)<br>- [between](/kusto/query/between-operator?view=microsoft-sentinel&preserve-view=true)<br>- [now](/kusto/query/now-function?view=microsoft-sentinel&preserve-view=true)<br><br>Parsing:<br>- [parse](/kusto/query/parse-operator?view=microsoft-sentinel&preserve-view=true)<br>- [extract](/kusto/query/extract-function?view=microsoft-sentinel&preserve-view=true)<br>- [parse_json](/kusto/query/parse-json-function?view=microsoft-sentinel&preserve-view=true)<br>- [parse_csv](/kusto/query/parse-csv-function?view=microsoft-sentinel&preserve-view=true)<br>- [parse_path](/kusto/query/parse-path-function?view=microsoft-sentinel&preserve-view=true)<br>- [parse_url](/kusto/query/parse-url-function?view=microsoft-sentinel&preserve-view=true) |+|Filter (`OR`) |A sample rule with `OR` conditions. The event can match any of the conditions. |[Filter (OR) example](#filter-or-example-arcsight) |[Filter (OR) example](#filter-or-example-kql) |- [String operators](/kusto/query/datatypes-string-operators?view=microsoft-sentinel&preserve-view=true#operators-on-strings)<br>- [in](/kusto/query/in-operator?view=microsoft-sentinel&preserve-view=true) |+|Nested filter |A sample rule with nested filtering conditions. The rule includes the `MatchesFilter` statement, which also includes filtering conditions. |[Nested filter example](#nested-filter-example-arcsight) |[Nested filter example](#nested-filter-example-kql) |- [Use KQL functions to speed up analysis](https://techcommunity.microsoft.com/t5/azure-sentinel/using-kql-functions-to-speed-up-analysis-in-azure-sentinel/ba-p/712381)<br>- [Enrich Windows security events with a parameterized function](https://techcommunity.microsoft.com/t5/microsoft-sentinel-blog/enriching-windows-security-events-with-parameterized-function/ba-p/1712564)<br>- [join](/kusto/query/join-operator?view=microsoft-sentinel&preserve-view=true)<br>- [where](/kusto/query/where-operator?view=microsoft-sentinel&preserve-view=true) |+|Active list (lookup) |A sample lookup rule that uses the `InActiveList` statement. |[Active list (lookup) example](#active-list-lookup-example-arcsight) |[Active list (lookup) example](#active-list-lookup-example-kql) |- A watchlist is the equivalent of the active list feature. Learn more about [watchlists](watchlists.md).<br>- [Other ways to implement lookups](https://techcommunity.microsoft.com/t5/azure-sentinel/implementing-lookups-in-azure-sentinel/ba-p/1091306) |+|Correlation (matching) |A sample rule that defines a condition against a set of base events, using the `Matching Event` statement. |[Correlation (matching) example](#correlation-matching-example-arcsight) |[Correlation (matching) example](#correlation-matching-example-kql) |join operator:<br>- [join](/kusto/query/join-operator?view=microsoft-sentinel&preserve-view=true)<br>- [join with time window](/kusto/query/join-time-window?view=microsoft-sentinel&preserve-view=true)<br>- [shuffle](/kusto/query/shuffle-query?view=microsoft-sentinel&preserve-view=true)<br>- [Broadcast](/kusto/query/broadcast-join?view=microsoft-sentinel&preserve-view=true)<br>- [Union](/kusto/query/union-operator?view=microsoft-sentinel&preserve-view=true)<br><br>define statement:<br>- [let](/kusto/query/let-statement?view=microsoft-sentinel&preserve-view=true)<br><br>Aggregation:<br>- [make_set](/kusto/query/make-set-aggregation-function?view=microsoft-sentinel&preserve-view=true)<br>- [make_list](/kusto/query/make-list-aggregation-function?view=microsoft-sentinel&preserve-view=true)<br>- [make_bag](/kusto/query/make-bag-aggregation-function?view=microsoft-sentinel&preserve-view=true)<br>- [bag_pack](/kusto/query/pack-function?view=microsoft-sentinel&preserve-view=true) |+|Correlation (time window) |A sample rule that defines a condition against a set of base events, using the `Matching Event` statement, and uses the `Wait time` filter condition. |[Correlation (time window) example](#correlation-time-window-example-arcsight) |[Correlation (time window) example](#correlation-time-window-example-kql) |- [join](/kusto/query/join-operator?view=microsoft-sentinel&preserve-view=true)<br>- [Microsoft Sentinel rules and join statement](https://techcommunity.microsoft.com/t5/azure-sentinel/azure-sentinel-correlation-rules-the-join-kql-operator/ba-p/1041500) | ### Filter (AND) example: ArcSight @@ -178,10 +178,11 @@ SecurityEvent isnotempty(TargetDomainName) | where SubjectUserName !~ "AutoMatedService" ```+ As a second option, use a KQL function: 1. Save the following query as a KQL function with the `ExcludeValidUsers` alias.- + ```kusto SecurityEvent | where EventID == 4728@@ -203,7 +204,7 @@ As a second option, use a KQL function: As a third option, use a parameter function: 1. Create a parameter function with `ExcludeValidUsers` as the name and alias.-2. Define the parameters of the function. For example:+1. Define the parameters of the function. For example: ```kusto Tbl: (TimeGenerated:datetime, Computer:string, @@ -212,7 +213,7 @@ As a third option, use a parameter function: ``` 1. The `parameter` function has the following query:- + ```kusto Tbl | where SubjectUserName !~ "AutoMatedService"@@ -247,7 +248,9 @@ events | join kind=leftanti ExcludeValidUsers on $left.SubjectUserName == $right.SubjectUserName ```-Considerations:++#### Considerations+ - We recommend that you use a direct filter with a `where` statement (first option) due to its simplicity. For optimized performance, avoid using `join` (fourth option). - To optimize your queries, avoid the `=~` and `!~` case-insensitive operators when possible. Use the `==` and `!=` operators if the value isn't case-sensitive. @@ -259,7 +262,10 @@ Here's an active list (lookup) rule in ArcSight. ### Active list (lookup) example: KQL -This rule assumes that the Cyber-Ark Exception Accounts watchlist exists in Microsoft Sentinel with an Account field.+> [!IMPORTANT]+> Before you run this query, create the **Cyber-Ark Exception Accounts** watchlist in Microsoft Sentinel and include an **Account** field.++The following KQL query uses the Cyber-Ark Exception Accounts watchlist to filter lookup results. ```kusto let Activelist=(@@ -274,6 +280,7 @@ CommonSecurityLog TimeGenerated,SourceHostName, SourceUserName, DeviceEventClassID ```+ Order the filters by starting with the `where` statement that filters out the most data. ### Correlation (matching) example: ArcSight@@ -299,7 +306,9 @@ event1 | join kind=inner event2 on $left.TargetUserName==$right.TargetUserName ```-Best practices:++#### Best practices+ - To optimize your query, ensure that the smaller table is on the left side of the `join` function. - If the left side of the table is relatively small (up to 100 K records), add `hint.strategy=broadcast` for better performance. @@ -347,6 +356,7 @@ event2_UPN=UserPrincipalName, AccountUsedToRemove,event1_Host,event2_Host, event1_UPN,event2_UPN ```+ ### Aggregation example: ArcSight Here's a sample ArcSight rule with aggregation settings: three matches within 10 minutes.@@ -364,9 +374,7 @@ SubjectDomainName | where Count >3 ``` -## Next steps--In this article, you learned how to map your migration rules from ArcSight to Microsoft Sentinel. +## Next step > [!div class="nextstepaction"] > [Migrate your SOAR automation](migration-arcsight-automation.md) 