diff --git a/.script/tests/KqlvalidationsTests/CustomTables/Garrison_ULTRARemote_Logs_CL.json b/.script/tests/KqlvalidationsTests/CustomTables/Garrison_ULTRARemote_Logs_CL.json new file mode 100644 index 00000000000..79ffbaf8167 --- /dev/null +++ b/.script/tests/KqlvalidationsTests/CustomTables/Garrison_ULTRARemote_Logs_CL.json @@ -0,0 +1,49 @@ +{ + "Name":"Garrison_ULTRARemoteLogs_CL", + "Properties":[ + { + "name": "TimeGenerated", + "type": "datetime" + }, + { + "name": "deviceEventClassId", + "type": "int" + }, + { + "name": "name", + "type": "string" + }, + { + "name": "start", + "type": "long" + }, + { + "name": "request", + "type": "string" + }, + { + "name": "requestContext", + "type": "string" + }, + { + "name": "reason", + "type": "string" + }, + { + "name": "dhost", + "type": "string" + }, + { + "name": "devicePayloadId", + "type": "string" + }, + { + "name": "suid", + "type": "string" + }, + { + "name": "suser", + "type": "string" + } + ] +} \ No newline at end of file diff --git a/Logos/Garrison_Logomark.svg b/Logos/Garrison_Logomark.svg new file mode 100644 index 00000000000..1451a9592ba --- /dev/null +++ b/Logos/Garrison_Logomark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/Sample Data/GarrisonULTRARemoteLogs_IngestedLogs.csv b/Sample Data/GarrisonULTRARemoteLogs_IngestedLogs.csv new file mode 100644 index 00000000000..889fdd85a76 --- /dev/null +++ b/Sample Data/GarrisonULTRARemoteLogs_IngestedLogs.csv @@ -0,0 +1,6 @@ +"TimeGenerated [UTC]",deviceEventClassId,name,start,request,requestContext,reason,dhost,devicePayloadId,suid,suser,TenantId,Type,"_ResourceId" +"15/10/2024, 13:48:49.443",1,"HTTP request",1729000129443,"ovxYqsOc>m}P,t<+cSMk9R(oL/I?*6)L>J&dNV/U@,#aK+QkLi~6jz%&#VLIGu+qfl)8mL~y3#J]>.U+p\faP[@VUL=h6^&=>gqE#AmRqM/8u.]+K>(V\21S[^{}>VFb$#+qn05$VdCV(+AZ(4st}#86odv[&\&ji$%Z2LF|=}FWy}N,I^kG,L*VT4CRO&AebMD,mQYOpy@Y(%&%%|yZ>cs5n8KoUnM40poO9u,[_K@9U0RGJO/+ea*B+0I.qdD&31@+doOeeP~]Ei@ZI/^IvU8lsENC&Of1NqR>xf)","McdoQ4TLW8e(}71m*g9o_SJ.(N5+YS|h3?pX~>+CEY}w}J.W_9vfM~T^b;d^]*WZjEiyL87tU2u4/$S|u)IAoRE3#:/j3*]X%A]%)3Jhi(P@hIpJM7pN-$bxIa>3C/u%zH&omRb;^Z3vxyoFY{Z4XkwW,,(reason=category-arms",,,c8659f393a1979b2,"316f5921-420a-49c5-b3ec-7d540ef01352","316f5921-420a-49c5-b3ec-7d540ef01352","021b4ebb-f69d-4e87-8082-e3b8b0c31520","Garrison_ULTRARemoteLogs_CL", +"15/10/2024, 13:48:49.443",0,"Page visit",1729000129443,"B-||Zw[8P?b+.}mV[t32;Ampfg||?P-=vMV~fp~y,hy]\qXYj-H5zHt4O9K[%b8voqIz>-mq\G,fOq/x@&:2#}bN*7PhSqJ*Ygy:lHZh80[Y$iZ)J63$QJ8W\n;$+jG[);eGtWH3/2yC<}7~U,&~AD_GRUbegHUBlcZQLR$W%&A<8FX]Rcxgv+1DouBy|GZW#heN*I0%YUA?}[S<&qA+]-v\KoGSEo[dF#59p\/.d})pPJ1Kgb?MN}am%5[\5zu{E##)F",a0a7f49bd73fab31,"316f5921-420a-49c5-b3ec-7d540ef01352","316f5921-420a-49c5-b3ec-7d540ef01352","021b4ebb-f69d-4e87-8082-e3b8b0c31520","Garrison_ULTRARemoteLogs_CL", diff --git a/Sample Data/GarrisonULTRARemoteLogs_RawLogs.json b/Sample Data/GarrisonULTRARemoteLogs_RawLogs.json new file mode 100644 index 00000000000..b40e11501c8 --- /dev/null +++ b/Sample Data/GarrisonULTRARemoteLogs_RawLogs.json @@ -0,0 +1,67 @@ +[ + { + "TimeGenerated": "2024-10-15 14:39:09.323000+00:00", + "deviceEventClassId": 1, + "name": "HTTP request", + "start": 1729003149323, + "request": ">{XDI$K.&=nTA8ZtdJIf;>~})l9?6tjFH7QR*vns]x16ZZ%Ot[#qvtL^x^OIZEQ#(L~S-gP}B8#3]#pNV&Z9@ITYVS%wX|&A^u)+LNiU^Tt2N:tQiLUE,&4?fAg6c(kDYl+)(h/_/f@:kT1r]hn]~hGf3%-#dxFOFT<*E", + "reason": "", + "dhost": "", + "devicePayloadId": "037dd6aad0e06621", + "suid": "cf7739fc-1056-4544-9ab4-a909c42416ec", + "suser": "cf7739fc-1056-4544-9ab4-a909c42416ec" + }, + { + "TimeGenerated": "2024-10-15 14:39:09.325000+00:00", + "deviceEventClassId": 4, + "name": "Site visit", + "start": 1729003149325, + "request": "", + "requestContext": "", + "reason": "", + "dhost": "d?iC^MUFD9\\Bu1<.+3Q>)gj9gSO3+I8/{S}yNq>A&21?:sam-IN7(/i#qf^]FMs/~", + "devicePayloadId": "b8f6848a07290a8b", + "suid": "cf7739fc-1056-4544-9ab4-a909c42416ec", + "suser": "cf7739fc-1056-4544-9ab4-a909c42416ec" + }, + { + "TimeGenerated": "2024-10-15 14:39:09.324000+00:00", + "deviceEventClassId": 3, + "name": "HTTP request blocked", + "start": 1729003149324, + "request": "/%m8\\62Nc9rfHa^7#|^z:e8cU:\\*G[s5KEG?K0Kw3|h.X0U)NjroRep6+a:f^pP)R4xw~/X/1xA>*KW%el^M)kI)IH#@KGZtpGi.qeZ*&[JCcvOh*@XlFpZ=0xwJWoK>8_eofg,Jw%CZuY]i6{G:qcp[?&;^uLlg^h.tv8kHy", + "requestContext": "fW56)_up7Z;&4C7-~[3I[f52pO5#On5tBEV[pdW|;tfd6]fkr+y9rPffQg*]?0;3XU5sp3T<%8W_O-jnpjGF\\:q|s%&oZ%g~B}>H3U&)SiR=Q*p,4$1\\3y[[0z465$JK$JYreason=category-arms", + "reason": "", + "dhost": "", + "devicePayloadId": "6b8c53f30783d5b5", + "suid": "cf7739fc-1056-4544-9ab4-a909c42416ec", + "suser": "cf7739fc-1056-4544-9ab4-a909c42416ec" + }, + { + "TimeGenerated": "2024-10-15 14:39:09.322000+00:00", + "deviceEventClassId": 0, + "name": "Page visit", + "start": 1729003149322, + "request": "={AT@@yufoRzB60yvi/GpaeEJuA@w)Ogfi#a+47y{YB|@u%\\)Y}TK/KaoqFmT[{hB[F8 **NOTE:** It is recommended to create a new Resource Group for deployment of these resources.\n3. Mark the checkbox labeled **I agree to the terms and conditions stated above**. \n4. Click **Purchase** to deploy." + } + ], + "metadata": { + "id": "919e2355-136a-4bbd-ade7-1956e5f61f83", + "version": "1.0.0", + "kind": "dataConnector", + "source": { + "kind": "solution", + "name": "Garrison ULTRA Remote Logs" + }, + "author": { + "name": "Garrison" + }, + "support": { + "tier": "developer", + "name": "Garrison" + } + } +} diff --git a/Solutions/Garrison ULTRA/Data Connectors/GarrisonULTRARemoteLogs/azuredeploy_DataCollectionResources.json b/Solutions/Garrison ULTRA/Data Connectors/GarrisonULTRARemoteLogs/azuredeploy_DataCollectionResources.json new file mode 100644 index 00000000000..6b00896a035 --- /dev/null +++ b/Solutions/Garrison ULTRA/Data Connectors/GarrisonULTRARemoteLogs/azuredeploy_DataCollectionResources.json @@ -0,0 +1,189 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "workspace-name": { + "defaultValue": "", + "type": "string", + "metadata": { + "description": "Name of Log Analytics workspace in which to deploy resources" + } + }, + "workspace-region": { + "defaultValue": "", + "type": "string", + "metadata": { + "description": "Region of Log Analytics workspace in which to deploy resources (e.g. 'uksouth')" + } + } + }, + "variables": { + "workspaceName": "[parameters('workspace-name')]", + "workspaceRegion": "[parameters('workspace-region')]", + "tableName": "Garrison_ULTRARemoteLogs_CL", + "dcrName": "gurl-dcr" + }, + "resources": [ + { + "type": "Microsoft.OperationalInsights/workspaces/tables", + "apiVersion": "2022-10-01", + "name": "[concat(variables('workspaceName'), '/', variables('tableName'))]", + "location": "[variables('workspaceRegion')]", + "properties": { + "plan": "Analytics", + "retentionInDays": "-1", + "schema": { + "name": "[variables('tableName')]", + "description": "Custom table for storing Garrison ULTRA Remote Logs", + "displayName": "Garrison ULTRA Remote Logs", + "columns": [ + { + "name": "TimeGenerated", + "type": "datetime", + "description": "Mandatory LA table field" + }, + { + "name": "deviceEventClassId", + "type": "int", + "description": "The integer identifier of the event name" + }, + { + "name": "name", + "type": "string", + "description": "The name of the event" + }, + { + "name": "start", + "type": "long", + "description": "The start time of the event - milliseconds since epoch" + }, + { + "name": "request", + "type": "string", + "description": "The URL of the page (for page visits) or resource (for background requests)" + }, + { + "name": "requestContext", + "type": "string", + "description": "The URL of the page originating the request - for background HTTP requests" + }, + { + "name": "reason", + "type": "string", + "description": "The reason given for blocking a request - for blocked events" + }, + { + "name": "dhost", + "type": "string", + "description": "The hostname of the site visited - for site visits" + }, + { + "name": "devicePayloadId", + "type": "string", + "description": "A unique ID for each event" + }, + { + "name": "suid", + "type": "string", + "description": "The user ID associated with the event" + }, + { + "name": "suser", + "type": "string", + "description": "The username associated with the event" + } + ] + }, + "totalRetentionInDays": "-1" + } + }, + { + "type": "Microsoft.Insights/dataCollectionRules", + "name": "[variables('dcrName')]", + "location": "[variables('workspaceRegion')]", + "apiVersion": "2023-03-11", + "kind": "Direct", + "properties": { + "streamDeclarations": { + "Custom-GarrisonULTRARemoteLogs": { + "columns": [ + { + "name": "TimeGenerated", + "type": "datetime" + }, + { + "name": "deviceEventClassId", + "type": "int" + }, + { + "name": "name", + "type": "string" + }, + { + "name": "start", + "type": "long" + }, + { + "name": "request", + "type": "string" + }, + { + "name": "requestContext", + "type": "string" + }, + { + "name": "reason", + "type": "string" + }, + { + "name": "dhost", + "type": "string" + }, + { + "name": "devicePayloadId", + "type": "string" + }, + { + "name": "suid", + "type": "string" + }, + { + "name": "suser", + "type": "string" + } + ] + } + }, + "destinations": { + "logAnalytics": [ + { + "workspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', variables('workspaceName'))]", + "name": "workspace" + } + ] + }, + "dataFlows": [ + { + "streams": [ + "Custom-GarrisonULTRARemoteLogs" + ], + "destinations": [ + "workspace" + ], + "outputStream": "[concat('Custom-', variables('tableName'))]" + } + ] + } + } + ], + "outputs": { + "dataCollectionRuleImmutableId": { + "type": "string", + "value": "[reference(resourceId('Microsoft.Insights/dataCollectionRules', variables('dcrName'))).immutableId]" + }, + "dataCollectionRuleLogsIngestionEndpoint": { + "type": "string", + "value": "[reference(resourceId('Microsoft.Insights/dataCollectionRules', variables('dcrName'))).endpoints.logsIngestion]" + } + } +} diff --git a/Solutions/Garrison ULTRA/Data/Solution_GarrisonULTRARemoteLogs.json b/Solutions/Garrison ULTRA/Data/Solution_GarrisonULTRARemoteLogs.json new file mode 100644 index 00000000000..264253260aa --- /dev/null +++ b/Solutions/Garrison ULTRA/Data/Solution_GarrisonULTRARemoteLogs.json @@ -0,0 +1,13 @@ +{ + "Name": "Garrison ULTRA", + "Author": "Garrison - support.ultra@garrison.com", + "Logo": "", + "Description": "The [Garrison ULTRA](https://www.garrison.com/garrison-ultra-cloud-platform) solution allows you ingest logs from Garrison ULTRA into Microsoft Sentinel.", + "Data Connectors": [ + "Data Connectors/GarrisonULTRARemoteLogs/GarrisonULTRARemoteLogs_ConnectorUI.json" + ], + "BasePath": "C:\\GitHub\\Azure-Sentinel\\Solutions\\Garrison ULTRA", + "Version": "3.0.0", + "Metadata": "SolutionMetadata.json", + "TemplateSpec": true +} \ No newline at end of file diff --git a/Solutions/Garrison ULTRA/Package/3.0.0.zip b/Solutions/Garrison ULTRA/Package/3.0.0.zip new file mode 100644 index 00000000000..f73d87f8259 Binary files /dev/null and b/Solutions/Garrison ULTRA/Package/3.0.0.zip differ diff --git a/Solutions/Garrison ULTRA/Package/createUiDefinition.json b/Solutions/Garrison ULTRA/Package/createUiDefinition.json new file mode 100644 index 00000000000..6cf0112dad6 --- /dev/null +++ b/Solutions/Garrison ULTRA/Package/createUiDefinition.json @@ -0,0 +1,85 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#", + "handler": "Microsoft.Azure.CreateUIDef", + "version": "0.1.2-preview", + "parameters": { + "config": { + "isWizard": false, + "basics": { + "description": "\n\n**Note:** Please refer to the following before installing the solution: \n\n• Review the solution [Release Notes](https://github.com/Azure/Azure-Sentinel/tree/master/Solutions/Garrison%20ULTRA/ReleaseNotes.md)\n\n • There may be [known issues](https://aka.ms/sentinelsolutionsknownissues) pertaining to this Solution, please refer to them before installing.\n\nThe [Garrison ULTRA](https://www.garrison.com/garrison-ultra-cloud-platform) solution allows you ingest logs from Garrison ULTRA into Microsoft Sentinel.\n\n**Data Connectors:** 1\n\n[Learn more about Microsoft Sentinel](https://aka.ms/azuresentinel) | [Learn more about Solutions](https://aka.ms/azuresentinelsolutionsdoc)", + "subscription": { + "resourceProviders": [ + "Microsoft.OperationsManagement/solutions", + "Microsoft.OperationalInsights/workspaces/providers/alertRules", + "Microsoft.Insights/workbooks", + "Microsoft.Logic/workflows" + ] + }, + "location": { + "metadata": { + "hidden": "Hiding location, we get it from the log analytics workspace" + }, + "visible": false + }, + "resourceGroup": { + "allowExisting": true + } + } + }, + "basics": [ + { + "name": "getLAWorkspace", + "type": "Microsoft.Solutions.ArmApiControl", + "toolTip": "This filters by workspaces that exist in the Resource Group selected", + "condition": "[greater(length(resourceGroup().name),0)]", + "request": { + "method": "GET", + "path": "[concat(subscription().id,'/providers/Microsoft.OperationalInsights/workspaces?api-version=2020-08-01')]" + } + }, + { + "name": "workspace", + "type": "Microsoft.Common.DropDown", + "label": "Workspace", + "placeholder": "Select a workspace", + "toolTip": "This dropdown will list only workspace that exists in the Resource Group selected", + "constraints": { + "allowedValues": "[map(filter(basics('getLAWorkspace').value, (filter) => contains(toLower(filter.id), toLower(resourceGroup().name))), (item) => parse(concat('{\"label\":\"', item.name, '\",\"value\":\"', item.name, '\"}')))]", + "required": true + }, + "visible": true + } + ], + "steps": [ + { + "name": "dataconnectors", + "label": "Data Connectors", + "bladeTitle": "Data Connectors", + "elements": [ + { + "name": "dataconnectors1-text", + "type": "Microsoft.Common.TextBlock", + "options": { + "text": "This Solution installs the data connector for Garrison ULTRA. You can get Garrison ULTRA custom log data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." + } + }, + { + "name": "dataconnectors-link2", + "type": "Microsoft.Common.TextBlock", + "options": { + "link": { + "label": "Learn more about connecting data sources", + "uri": "https://docs.microsoft.com/azure/sentinel/connect-data-sources" + } + } + } + ] + } + ], + "outputs": { + "workspace-location": "[first(map(filter(basics('getLAWorkspace').value, (filter) => and(contains(toLower(filter.id), toLower(resourceGroup().name)),equals(filter.name,basics('workspace')))), (item) => item.location))]", + "location": "[location()]", + "workspace": "[basics('workspace')]" + } + } +} diff --git a/Solutions/Garrison ULTRA/Package/mainTemplate.json b/Solutions/Garrison ULTRA/Package/mainTemplate.json new file mode 100644 index 00000000000..ce92429cb81 --- /dev/null +++ b/Solutions/Garrison ULTRA/Package/mainTemplate.json @@ -0,0 +1,375 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "metadata": { + "author": "Garrison - support.ultra@garrison.com", + "comments": "Solution template for Garrison ULTRA" + }, + "parameters": { + "location": { + "type": "string", + "minLength": 1, + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "Not used, but needed to pass arm-ttk test `Location-Should-Not-Be-Hardcoded`. We instead use the `workspace-location` which is derived from the LA workspace" + } + }, + "workspace-location": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "[concat('Region to deploy solution resources -- separate from location selection',parameters('location'))]" + } + }, + "workspace": { + "defaultValue": "", + "type": "string", + "metadata": { + "description": "Workspace name for Log Analytics where Microsoft Sentinel is setup" + } + } + }, + "variables": { + "email": "support.ultra@garrison.com", + "_email": "[variables('email')]", + "_solutionName": "Garrison ULTRA", + "_solutionVersion": "3.0.0", + "solutionId": "garrisontechnologyltd1725375696148.microsoft-sentinel-solution-garrison-ultra", + "_solutionId": "[variables('solutionId')]", + "uiConfigId1": "GarrisonULTRARemoteLogs", + "_uiConfigId1": "[variables('uiConfigId1')]", + "dataConnectorContentId1": "GarrisonULTRARemoteLogs", + "_dataConnectorContentId1": "[variables('dataConnectorContentId1')]", + "dataConnectorId1": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId1'))]", + "_dataConnectorId1": "[variables('dataConnectorId1')]", + "dataConnectorTemplateSpecName1": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentId1'))))]", + "dataConnectorVersion1": "1.0.0", + "_dataConnectorcontentProductId1": "[concat(take(variables('_solutionId'),50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentId1'),'-', variables('dataConnectorVersion1'))))]", + "_solutioncontentProductId": "[concat(take(variables('_solutionId'),50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]" + }, + "resources": [ + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[variables('dataConnectorTemplateSpecName1')]", + "location": "[parameters('workspace-location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "description": "Garrison ULTRA data connector with template version 3.0.0", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('dataConnectorVersion1')]", + "parameters": {}, + "variables": {}, + "resources": [ + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentId1'))]", + "apiVersion": "2021-03-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", + "location": "[parameters('workspace-location')]", + "kind": "GenericUI", + "properties": { + "connectorUiConfig": { + "id": "[variables('_uiConfigId1')]", + "title": "Garrison ULTRA Remote Logs (using Azure Functions)", + "publisher": "Garrison", + "descriptionMarkdown": "The [Garrison ULTRA](https://www.garrison.com/en/garrison-ultra-cloud-platform) Remote Logs connector allows you to ingest Garrison ULTRA Remote Logs into Microsoft Sentinel.", + "graphQueries": [ + { + "metricName": "Total data received", + "legend": "Garrison_ULTRARemoteLogs_CL", + "baseQuery": "Garrison_ULTRARemoteLogs_CL" + } + ], + "sampleQueries": [ + { + "description": "Last 10 logs", + "query": "Garrison_ULTRARemoteLogs_CL\n | top 10 by TimeGenerated desc" + } + ], + "dataTypes": [ + { + "name": "Garrison_ULTRARemoteLogs_CL", + "lastDataReceivedQuery": "Garrison_ULTRARemoteLogs_CL\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriterias": [ + { + "type": "IsConnectedQuery", + "value": [ + "Garrison_ULTRARemoteLogs_CL \n |take 1\n | project IsConnected = true " + ] + } + ], + "availability": { + "status": 1, + "isPreview": false + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "read and write permissions on the workspace are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + }, + { + "provider": "Microsoft.OperationalInsights/workspaces/sharedKeys", + "permissionsDisplayText": "read permissions to shared keys for the workspace are required. [See the documentation to learn more about workspace keys](https://docs.microsoft.com/azure/azure-monitor/platform/agent-windows#obtain-workspace-id-and-key).", + "providerDisplayName": "Keys", + "scope": "Workspace", + "requiredPermissions": { + "action": true + } + } + ], + "customs": [ + { + "name": "Garrison ULTRA", + "description": "To use this data connector you must have an active [Garrison ULTRA](https://www.garrison.com/en/garrison-ultra-cloud-platform) license." + } + ] + }, + "instructionSteps": [ + { + "description": "These steps outline the automated deployment of the Garrison ULTRA Remote Logs data connector using an ARM Tempate.\n\n1. Click the **Deploy to Azure** button below. \n\n\t[![Deploy To Azure](https://aka.ms/deploytoazurebutton)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2FAzure-Sentinel%2Frefs%2Fheads%2Fmaster%2FSolutions%2FGarrison%2520ULTRA%2FData%2520Connectors%2FGarrisonULTRARemoteLogs%2Fazuredeploy_DataCollectionResources.json) \t\t\t\n2. Provide the required details such as Resource Group, Microsoft Sentinel Workspace and ingestion configurations \n> **NOTE:** It is recommended to create a new Resource Group for deployment of these resources.\n3. Mark the checkbox labeled **I agree to the terms and conditions stated above**. \n4. Click **Purchase** to deploy.", + "title": "Deployment - Azure Resource Manager (ARM) Template" + } + ], + "metadata": { + "id": "919e2355-136a-4bbd-ade7-1956e5f61f83", + "version": "1.0.0", + "kind": "dataConnector", + "source": { + "kind": "solution", + "name": "Garrison ULTRA Remote Logs" + }, + "author": { + "name": "Garrison" + }, + "support": { + "tier": "developer", + "name": "Garrison" + } + } + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "apiVersion": "2023-04-01-preview", + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', last(split(variables('_dataConnectorId1'),'/'))))]", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId1'))]", + "contentId": "[variables('_dataConnectorContentId1')]", + "kind": "DataConnector", + "version": "[variables('dataConnectorVersion1')]", + "source": { + "kind": "Solution", + "name": "Garrison ULTRA", + "sourceId": "[variables('_solutionId')]" + }, + "author": { + "name": "Garrison", + "email": "[variables('_email')]" + }, + "support": { + "name": "Garrison", + "email": "support.ultra@garrison.com", + "tier": "Partner", + "link": "https://support.ultra.garrison.com" + } + } + } + ] + }, + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "contentId": "[variables('_dataConnectorContentId1')]", + "contentKind": "DataConnector", + "displayName": "Garrison ULTRA Remote Logs (using Azure Functions)", + "contentProductId": "[variables('_dataConnectorcontentProductId1')]", + "id": "[variables('_dataConnectorcontentProductId1')]", + "version": "[variables('dataConnectorVersion1')]" + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "apiVersion": "2023-04-01-preview", + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', last(split(variables('_dataConnectorId1'),'/'))))]", + "dependsOn": [ + "[variables('_dataConnectorId1')]" + ], + "location": "[parameters('workspace-location')]", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId1'))]", + "contentId": "[variables('_dataConnectorContentId1')]", + "kind": "DataConnector", + "version": "[variables('dataConnectorVersion1')]", + "source": { + "kind": "Solution", + "name": "Garrison ULTRA", + "sourceId": "[variables('_solutionId')]" + }, + "author": { + "name": "Garrison", + "email": "[variables('_email')]" + }, + "support": { + "name": "Garrison", + "email": "support.ultra@garrison.com", + "tier": "Partner", + "link": "https://support.ultra.garrison.com" + } + } + }, + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentId1'))]", + "apiVersion": "2021-03-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", + "location": "[parameters('workspace-location')]", + "kind": "GenericUI", + "properties": { + "connectorUiConfig": { + "title": "Garrison ULTRA Remote Logs (using Azure Functions)", + "publisher": "Garrison", + "descriptionMarkdown": "The [Garrison ULTRA](https://www.garrison.com/en/garrison-ultra-cloud-platform) Remote Logs connector allows you to ingest Garrison ULTRA Remote Logs into Microsoft Sentinel.", + "graphQueries": [ + { + "metricName": "Total data received", + "legend": "Garrison_ULTRARemoteLogs_CL", + "baseQuery": "Garrison_ULTRARemoteLogs_CL" + } + ], + "dataTypes": [ + { + "name": "Garrison_ULTRARemoteLogs_CL", + "lastDataReceivedQuery": "Garrison_ULTRARemoteLogs_CL\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriterias": [ + { + "type": "IsConnectedQuery", + "value": [ + "Garrison_ULTRARemoteLogs_CL \n |take 1\n | project IsConnected = true " + ] + } + ], + "sampleQueries": [ + { + "description": "Last 10 logs", + "query": "Garrison_ULTRARemoteLogs_CL\n | top 10 by TimeGenerated desc" + } + ], + "availability": { + "status": 1, + "isPreview": false + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "read and write permissions on the workspace are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + }, + { + "provider": "Microsoft.OperationalInsights/workspaces/sharedKeys", + "permissionsDisplayText": "read permissions to shared keys for the workspace are required. [See the documentation to learn more about workspace keys](https://docs.microsoft.com/azure/azure-monitor/platform/agent-windows#obtain-workspace-id-and-key).", + "providerDisplayName": "Keys", + "scope": "Workspace", + "requiredPermissions": { + "action": true + } + } + ], + "customs": [ + { + "name": "Garrison ULTRA", + "description": "To use this data connector you must have an active [Garrison ULTRA](https://www.garrison.com/en/garrison-ultra-cloud-platform) license." + } + ] + }, + "instructionSteps": [ + { + "description": "These steps outline the automated deployment of the Garrison ULTRA Remote Logs data connector using an ARM Tempate.\n\n1. Click the **Deploy to Azure** button below. \n\n\t[![Deploy To Azure](https://aka.ms/deploytoazurebutton)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2FAzure-Sentinel%2Frefs%2Fheads%2Fmaster%2FSolutions%2FGarrison%2520ULTRA%2FData%2520Connectors%2FGarrisonULTRARemoteLogs%2Fazuredeploy_DataCollectionResources.json) \t\t\t\n2. Provide the required details such as Resource Group, Microsoft Sentinel Workspace and ingestion configurations \n> **NOTE:** It is recommended to create a new Resource Group for deployment of these resources.\n3. Mark the checkbox labeled **I agree to the terms and conditions stated above**. \n4. Click **Purchase** to deploy.", + "title": "Deployment - Azure Resource Manager (ARM) Template" + } + ], + "id": "[variables('_uiConfigId1')]" + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentPackages", + "apiVersion": "2023-04-01-preview", + "location": "[parameters('workspace-location')]", + "properties": { + "version": "3.0.0", + "kind": "Solution", + "contentSchemaVersion": "3.0.0", + "displayName": "Garrison ULTRA", + "publisherDisplayName": "Garrison", + "descriptionHtml": "

Note: Please refer to the following before installing the solution:

\n

• Review the solution Release Notes

\n

• There may be known issues pertaining to this Solution, please refer to them before installing.

\n

The Garrison ULTRA solution allows you ingest logs from Garrison ULTRA into Microsoft Sentinel.

\n

Data Connectors: 1

\n

Learn more about Microsoft Sentinel | Learn more about Solutions

\n", + "contentKind": "Solution", + "contentProductId": "[variables('_solutioncontentProductId')]", + "id": "[variables('_solutioncontentProductId')]", + "icon": "", + "contentId": "[variables('_solutionId')]", + "parentId": "[variables('_solutionId')]", + "source": { + "kind": "Solution", + "name": "Garrison ULTRA", + "sourceId": "[variables('_solutionId')]" + }, + "author": { + "name": "Garrison", + "email": "[variables('_email')]" + }, + "support": { + "name": "Garrison", + "email": "support.ultra@garrison.com", + "tier": "Partner", + "link": "https://support.ultra.garrison.com" + }, + "dependencies": { + "operator": "AND", + "criteria": [ + { + "kind": "DataConnector", + "contentId": "[variables('_dataConnectorContentId1')]", + "version": "[variables('dataConnectorVersion1')]" + } + ] + }, + "firstPublishDate": "2024-10-04", + "providers": [ + "Garrison" + ], + "categories": { + "domains": [ + "Application", + "User Behavior (UEBA)" + ] + } + }, + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('_solutionId'))]" + } + ], + "outputs": {} +} diff --git a/Solutions/Garrison ULTRA/Package/testParameters.json b/Solutions/Garrison ULTRA/Package/testParameters.json new file mode 100644 index 00000000000..e55ec41a9ac --- /dev/null +++ b/Solutions/Garrison ULTRA/Package/testParameters.json @@ -0,0 +1,24 @@ +{ + "location": { + "type": "string", + "minLength": 1, + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "Not used, but needed to pass arm-ttk test `Location-Should-Not-Be-Hardcoded`. We instead use the `workspace-location` which is derived from the LA workspace" + } + }, + "workspace-location": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "[concat('Region to deploy solution resources -- separate from location selection',parameters('location'))]" + } + }, + "workspace": { + "defaultValue": "", + "type": "string", + "metadata": { + "description": "Workspace name for Log Analytics where Microsoft Sentinel is setup" + } + } +} diff --git a/Solutions/Garrison ULTRA/ReleaseNotes.md b/Solutions/Garrison ULTRA/ReleaseNotes.md new file mode 100644 index 00000000000..8a3c2ffdab8 --- /dev/null +++ b/Solutions/Garrison ULTRA/ReleaseNotes.md @@ -0,0 +1,3 @@ +| **Version** | **Date Modified (DD-MM-YYYY)** | **Change History** | +|-------------|--------------------------------|--------------------------------------------------------------------| +| 3.0.0 | 22-11-2024 | Initial Solution Release | \ No newline at end of file diff --git a/Solutions/Garrison ULTRA/SolutionMetadata.json b/Solutions/Garrison ULTRA/SolutionMetadata.json new file mode 100644 index 00000000000..42530d1b513 --- /dev/null +++ b/Solutions/Garrison ULTRA/SolutionMetadata.json @@ -0,0 +1,19 @@ +{ + "publisherId": "garrisontechnologyltd1725375696148", + "offerId": "microsoft-sentinel-solution-garrison-ultra", + "firstPublishDate": "2024-10-04", + "providers": ["Garrison"], + "categories": { + "domains": [ + "Application", + "User Behavior (UEBA)" + ], + "verticals": [] + }, + "support": { + "name": "Garrison", + "email": "support.ultra@garrison.com", + "tier": "Partner", + "link": "https://support.ultra.garrison.com" + } +}