SOLVED

How to sync automation rules from Github to Sentinel

%3CLINGO-SUB%20id%3D%22lingo-sub-3330737%22%20slang%3D%22en-US%22%3EHow%20to%20sync%20automation%20rules%20from%20Github%20to%20Sentinel%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-3330737%22%20slang%3D%22en-US%22%3E%3CP%3EHi%2C%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EAs%20for%20the%20analytics%20rule%20synced%20from%20Github%20to%20Sentinel%2C%20we%20could%20just%20simply%20export%20the%20rules%20and%20import%20it%20to%20github.%20However%2C%20I%20am%20not%20able%20to%20export%20the%20automation%20rules%20to%20json%20file%20and%20could%20not%20find%20the%20guide%20for%20the%20sync.%3C%2FP%3E%3CP%3ECould%20you%20provide%20some%20guidance%20on%20it%3F%20Thanks%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-3330737%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3EAutomation%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3EAzure%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-3332112%22%20slang%3D%22en-US%22%3ERe%3A%20How%20to%20sync%20automation%20rules%20from%20Github%20to%20Sentinel%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-3332112%22%20slang%3D%22en-US%22%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F1310945%22%20target%3D%22_blank%22%3E%40Steven_Su%3C%2FA%3E%26nbsp%3BIt%20does%20not%20look%20like%20the%20MS%20Sentinel%20PowerShell%20(%3CA%20href%3D%22https%3A%2F%2Fwww.powershellgallery.com%2Fpackages%2FAz.SecurityInsights%2F1.1.0%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Fwww.powershellgallery.com%2Fpackages%2FAz.SecurityInsights%2F1.1.0%3C%2FA%3E)%20has%20added%20the%20functionality%20for%20automation%20yet%20so%20you%20would%20need%20to%20use%20the%20REST%20API.%26nbsp%3B%20You%20can%20go%20to%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fgithub.com%2FAzure%2Fazure-rest-api-specs%2Ftree%2Fmain%2Fspecification%2Fsecurityinsights%2Fresource-manager%2FMicrosoft.SecurityInsights%2Fpreview%2F2021-10-01-preview%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3Eazure-rest-api-specs%2Fspecification%2Fsecurityinsights%2Fresource-manager%2FMicrosoft.SecurityInsights%2Fpreview%2F2021-10-01-preview%20at%20main%20%C2%B7%20Azure%2Fazure-rest-api-specs%20(github.com)%3C%2FA%3E%26nbsp%3B%20to%20get%20the%20information%20on%20how%20to%20make%20the%20calls.%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EI%20would%20think%20you%20would%20need%20to%20make%20a%20call%20to%20LIST%20all%20the%20automation%20rules%20and%20then%20either%20break%20apart%20the%20returned%20JSON%20to%20save%20each%20one%20individually%20or%20just%20use%20it%20to%20get%20the%20individual%20rule's%20ID.%26nbsp%3B%20Then%20you%20can%20make%20a%20call%20to%20GET%20each%20individual%20rule%20and%20save%20it.%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-3332226%22%20slang%3D%22en-US%22%3ERe%3A%20How%20to%20sync%20automation%20rules%20from%20Github%20to%20Sentinel%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-3332226%22%20slang%3D%22en-US%22%3EHi%20Gary%2CThanks%20for%20your%20prompt%20reply.%3CBR%20%2F%3E%3CBR%20%2F%3EActually%20what%20we%20want%20to%20do%20is%20to%20use%20repo%20in%20github%20to%20deploy%20and%20maintain%20the%20analytic%20rules%20and%20automation%20rules%20attached.%20It%20is%20easy%20for%20analytic%20rules%20but%20difficult%20for%20automation%20rules.%3CBR%20%2F%3E%3CBR%20%2F%3EWe%20only%20have%20few%20playbooks%20like%20creating%20ticket%20but%20we%20will%20applied%20it%20to%20each%20analytics%20rule.%20So%20we%20wanna%20see%20if%20there%20is%20any%20approach%20to%20do%20so.%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-3343081%22%20slang%3D%22en-US%22%3ERe%3A%20How%20to%20sync%20automation%20rules%20from%20Github%20to%20Sentinel%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-3343081%22%20slang%3D%22en-US%22%3EHave%20you%20looked%20at%20using%20a%20MS%20Sentinel%20repository%20to%20push%20all%20the%20rules%20(I%20am%20guessing%20you%20when%20you%20say%20repo%20you%20mean%20a%20Github%20repo%20and%20not%20MS%20Sentinel%20repository).%3CBR%20%2F%3E%3CBR%20%2F%3EBTW%2C%20I%20wrote%20some%20PowerShell%20scripts%20to%20extract%20automation%20rules%20and%20a%20blog%20post%20about%20it.%20%3CA%20href%3D%22https%3A%2F%2Fwww.garybushey.com%2F2022%2F05%2F08%2Fget-or-export-microsoft-sentinel-automation-rules%2F%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Fwww.garybushey.com%2F2022%2F05%2F08%2Fget-or-export-microsoft-sentinel-automation-rules%2F%3C%2FA%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-3355863%22%20slang%3D%22en-US%22%3ERe%3A%20How%20to%20sync%20automation%20rules%20from%20Github%20to%20Sentinel%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-3355863%22%20slang%3D%22en-US%22%3EHi%20Gary%2C%3CBR%20%2F%3E%3CBR%20%2F%3EThis%20is%20a%20helpful%20documents%20to%20export%20the%20config.%20As%20tested%2C%20i%20still%20need%20to%20modify%20the%20format%20of%20the%20output%20to%20meet%20the%20requirement%20of%20the%20syntax%20so%20that%20I%20could%20create%20the%20new%20automation%20rule%20with%20this%20approach.%3CBR%20%2F%3EReally%20thanks%20for%20your%20reply.%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-3357012%22%20slang%3D%22en-US%22%3ERe%3A%20How%20to%20sync%20automation%20rules%20from%20Github%20to%20Sentinel%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-3357012%22%20slang%3D%22en-US%22%3EI'd%20be%20interested%20in%20hearing%20what%20changes%20you%20needed%20to%20make%20so%20I%20can%20make%20them%20to%20the%20PowerShell%20script.%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-3368207%22%20slang%3D%22en-US%22%3ERe%3A%20How%20to%20sync%20automation%20rules%20from%20Github%20to%20Sentinel%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-3368207%22%20slang%3D%22en-US%22%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F46875%22%20target%3D%22_blank%22%3E%40Gary%20Bushey%3C%2FA%3E%26nbsp%3BHi%2C%20this%20is%20the%20format%20i%20used%20to%20sync%20from%20Github%20repo%20to%20Sentinel.%26nbsp%3B%3C%2FP%3E%3CP%3Eps.%20I%20masked%20some%20information%20with%20xxxx%2Fyyyy%2Fzzzz%2Fwwww%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-json%22%3E%3CCODE%3E%7B%0A%20%20%20%20%22%24schema%22%3A%20%22https%3A%2F%2Fschema.management.azure.com%2Fschemas%2F2019-04-01%2FdeploymentTemplate.json%23%22%2C%0A%20%20%20%20%22contentVersion%22%3A%20%221.0.0.1%22%2C%0A%20%20%20%20%22parameters%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%22workspace%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22type%22%3A%20%22String%22%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%2C%20%20%20%20%0A%20%20%20%20%22resources%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22id%22%3A%20%22%5Bconcat(resourceId('Microsoft.OperationalInsights%2Fworkspaces%2Fproviders'%2C%20parameters('workspace')%2C%20'Microsoft.SecurityInsights')%2C'%2FAutomationRules%2Fyyyyyyyyyy')%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22%5Bconcat(parameters('workspace')%2C'%2FMicrosoft.SecurityInsights%2Fyyyyyyyyyy')%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22type%22%3A%20%22Microsoft.OperationalInsights%2Fworkspaces%2Fproviders%2FautomationRules%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22apiVersion%22%3A%20%222021-10-01-preview%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22properties%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22displayName%22%3A%20%22testing%20_jira_0511_0336%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22order%22%3A%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22triggeringLogic%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22isEnabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22triggersOn%22%3A%20%22Incidents%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22triggersWhen%22%3A%20%22Created%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22conditions%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22conditionType%22%3A%20%22Property%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22conditionProperties%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22propertyName%22%3A%20%22IncidentRelatedAnalyticRuleIds%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22operator%22%3A%20%22Contains%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22propertyValues%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%2Fsubscriptions%2Fxxxxxxxxxxxxxx%2FresourceGroups%2Fendpoint_log_testing%2Fproviders%2FMicrosoft.OperationalInsights%2Fworkspaces%2Fendpoint-log-testing%2Fproviders%2FMicrosoft.SecurityInsights%2FalertRules%2Fzzzzzzzzzz%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22conditionType%22%3A%20%22Property%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22conditionProperties%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22propertyName%22%3A%20%22IncidentStatus%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22operator%22%3A%20%22Equals%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22propertyValues%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22New%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22actions%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22order%22%3A%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22actionType%22%3A%20%22RunPlaybook%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22actionConfiguration%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22logicAppResourceId%22%3A%20%22%2Fsubscriptions%2Fxxxxxxxxxxxxxx%2FresourceGroups%2Fendpoint_log_testing%2Fproviders%2FMicrosoft.Logic%2Fworkflows%2FCreateJiraIssue%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22tenantId%22%3A%20%22wwwwwwwwww%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%5D%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E
Contributor

Hi,

 

As for the analytics rule synced from Github to Sentinel, we could just simply export the rules and import it to github. However, I am not able to export the automation rules to json file and could not find the guide for the sync.

Could you provide some guidance on it? Thanks

6 Replies

@Steven_Su It does not look like the MS Sentinel PowerShell (https://www.powershellgallery.com/packages/Az.SecurityInsights/1.1.0) has added the functionality for automation yet so you would need to use the REST API.  You can go to azure-rest-api-specs/specification/securityinsights/resource-manager/Microsoft.SecurityInsights/prev...  to get the information on how to make the calls. 

 

I would think you would need to make a call to LIST all the automation rules and then either break apart the returned JSON to save each one individually or just use it to get the individual rule's ID.  Then you can make a call to GET each individual rule and save it.

Hi Gary,Thanks for your prompt reply.

Actually what we want to do is to use repo in github to deploy and maintain the analytic rules and automation rules attached. It is easy for analytic rules but difficult for automation rules.

We only have few playbooks like creating ticket but we will applied it to each analytics rule. So we wanna see if there is any approach to do so.
best response confirmed by Steven_Su (Contributor)
Solution
Have you looked at using a MS Sentinel repository to push all the rules (I am guessing you when you say repo you mean a Github repo and not MS Sentinel repository).

BTW, I wrote some PowerShell scripts to extract automation rules and a blog post about it. https://www.garybushey.com/2022/05/08/get-or-export-microsoft-sentinel-automation-rules/
Hi Gary,

This is a helpful documents to export the config. As tested, i still need to modify the format of the output to meet the requirement of the syntax so that I could create the new automation rule with this approach.
Really thanks for your reply.
I'd be interested in hearing what changes you needed to make so I can make them to the PowerShell script.

@Gary Bushey Hi, this is the format i used to sync from Github repo to Sentinel. 

ps. I masked some information with xxxx/yyyy/zzzz/wwww

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.1",
    "parameters": {
        "workspace": {
            "type": "String"
        }
    },    
    "resources": [
        {
            "id": "[concat(resourceId('Microsoft.OperationalInsights/workspaces/providers', parameters('workspace'), 'Microsoft.SecurityInsights'),'/AutomationRules/yyyyyyyyyy')]",
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/yyyyyyyyyy')]",
            "type": "Microsoft.OperationalInsights/workspaces/providers/automationRules",
            "apiVersion": "2021-10-01-preview",
            "properties": {
                "displayName": "testing _jira_0511_0336",
                "order": 1,
                "triggeringLogic": {
                    "isEnabled": true,
                    "triggersOn": "Incidents",
                    "triggersWhen": "Created",
                    "conditions": [
                        {
                            "conditionType": "Property",
                            "conditionProperties": {
                                "propertyName": "IncidentRelatedAnalyticRuleIds",
                                "operator": "Contains",
                                "propertyValues": [
                                    "/subscriptions/xxxxxxxxxxxxxx/resourceGroups/endpoint_log_testing/providers/Microsoft.OperationalInsights/workspaces/endpoint-log-testing/providers/Microsoft.SecurityInsights/alertRules/zzzzzzzzzz"
                                ]
                            }
                        },
                        {
                            "conditionType": "Property",
                            "conditionProperties": {
                                "propertyName": "IncidentStatus",
                                "operator": "Equals",
                                "propertyValues": [
                                    "New"
                                ]
                            }
                        }
                    ]
                },
                "actions": [
                    {
                        "order": 1,
                        "actionType": "RunPlaybook",
                        "actionConfiguration": {
                            "logicAppResourceId": "/subscriptions/xxxxxxxxxxxxxx/resourceGroups/endpoint_log_testing/providers/Microsoft.Logic/workflows/CreateJiraIssue",
                            "tenantId": "wwwwwwwwww"
                        }
                    }
                ]
            }
        }
    ]
}