From b4b4a976674d6ef956da5d7a964a9b11c66044f8 Mon Sep 17 00:00:00 2001 From: alexandre verkinderen Date: Tue, 31 Aug 2021 15:24:02 +1000 Subject: [PATCH] pipeline --- .../Pipeline/Migrate-LA-to-ADX-Pipeline.ps1 | 746 ++++++++++++++++++ Tools/AzureDataExplorer/Pipeline/Readme.MD | 38 + .../azure-pipeline-es-MigrateLAtoADX.yml | 23 + Tools/AzureDataExplorer/images/Pipeline.PNG | Bin 0 -> 84580 bytes .../images/VariableGroup.PNG | Bin 0 -> 22627 bytes 5 files changed, 807 insertions(+) create mode 100644 Tools/AzureDataExplorer/Pipeline/Migrate-LA-to-ADX-Pipeline.ps1 create mode 100644 Tools/AzureDataExplorer/Pipeline/Readme.MD create mode 100644 Tools/AzureDataExplorer/Pipeline/azure-pipeline-es-MigrateLAtoADX.yml create mode 100644 Tools/AzureDataExplorer/images/Pipeline.PNG create mode 100644 Tools/AzureDataExplorer/images/VariableGroup.PNG diff --git a/Tools/AzureDataExplorer/Pipeline/Migrate-LA-to-ADX-Pipeline.ps1 b/Tools/AzureDataExplorer/Pipeline/Migrate-LA-to-ADX-Pipeline.ps1 new file mode 100644 index 0000000000..66c44da82d --- /dev/null +++ b/Tools/AzureDataExplorer/Pipeline/Migrate-LA-to-ADX-Pipeline.ps1 @@ -0,0 +1,746 @@ +<# + THE SCRIPT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SCRIPT OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + .SYNOPSIS + This PowerShell script integrates given Log Analytics Workspace tables data into Azure Data Explorer for long term retention. + For more information on how to use this script please visit: https://github.com/Azure/Azure-Sentinel/tree/master/Tools/AzureDataExplorer + + .DESCRIPTION + It performs the following actions: + 1. Queries the Log Analytics workspace tables. + 2. Validates table names against data export supported tables AdxSupportedTables.json. + 3. Creates target Table, Raw and Mapping in Azure Data Explorer. + 4. Creates Event Hub namespaces (Standard) by dividing #1 tables by 10. + 5. Creates data export rules via Azure REST API on Log Analytics workspace. + 6. Creates data connection rules in Azure Data Explorer (ADX) database. + + .PARAMETER SecretKey + Enter the SecretKey for the account that will be running this script + + .PARAMETER LogAnalyticsSubscriptionId + Enter the Log Analytics subscription ID (required) + + .PARAMETER LogAnalyticsWorkSpaceName + Enter the Log Analytics workspace name (required) + + .PARAMETER LogAnalyticsResourceGroup + Enter the Resource Group name of Log Analytics workspace (required) + + .PARAMETER AdxResourceGroup + Enter the Resource Group name of Azure Data Explorer (ADX) (required) + + .PARAMETER AdxClusterURL + Enter the Resource Group name of Azure Data Explorer (ADX) Cluster URL (required) + + .PARAMETER AdxDBName + Enter the Resource Group name of Azure Data Explorer (ADX) Database Name (required) + + .PARAMETER UserInputTables + Comma separated list of Tables to export (optional) + + .PARAMETER CreateDataConnection + Create data connection rules for each table with corresponding Event Hub topic, TableRaw and TableRawMapping (switch, default false) + + .NOTES + Original AUTHOR: Sreedhar Ande + Modified to make it work with Pipelines: Alexandre Verkinderen + + + .EXAMPLE + .\Migrate-LA-to-ADX.ps1 -LogAnalyticsResourceGroup la-resgrp1 -LogAnalyticsWorkspaceName la-workspace-1 ` + -AdxResourceGroup adx-resgrp1 -AdxClusterURL "https://adxcluster1.eastus2.kusto.windows.net" -AdxDBName AdxClusterDb1 -CreateDataConnection +#> + +#region UserInputs + +param( + + [parameter(Mandatory = $true, HelpMessage = "Enter the subscriptionid for the Log Analytics workspace.")] + [string]$LogAnalyticsSubscriptionId, + + [parameter(Mandatory = $true, HelpMessage = "Enter the user credential (key) to pass to Kusto CLI (User ID will be from Azure Context.Account.Id) ")] + [string]$SecretKey, + + [parameter(Mandatory = $true, HelpMessage = "Enter the resource group location for the Log Analytics workspace.")] + [string]$LogAnalyticsResourceGroup, + + [parameter(Mandatory = $true, HelpMessage = "Enter the Log Analytics workspace name from which to export data.")] + [string]$LogAnalyticsWorkspaceName, + + [parameter(Mandatory = $true, HelpMessage = "Enter the resource group location for the existing Azure Data Explorer (ADX) cluster for which to export data.")] + [string]$AdxResourceGroup, + + [parameter(Mandatory = $true, HelpMessage = "Enter the Azure Data Explorer (ADX) cluster URL.")] + [string]$AdxClusterURL, + + [parameter(Mandatory = $true, HelpMessage = "Enter the Azure Data Explorer (ADX) cluster database name.")] + [string]$AdxDBName, + + [parameter(Mandatory = $false, HelpMessage = "To use a specific set of tables (leave blank for all), Enter selected Log Analytics workspace table names separated by comma (,) (Case-Sensitive)")] + [string]$UserInputTables, + + [parameter(Mandatory = $false, HelpMessage = "Create data connection rules for each table with corresponding Event Hub topic, TableRaw and TableRawMappings? (If Yes, the script will wait for 30 minutes, If No, you must create the data connection rules manually.)")] + [switch]$CreateDataConnection +) + +#endregion UserInputs + +#region StaticValues + +[string]$AdxEngineUrl = "$AdxClusterURL/$AdxDBName" +[string]$KustoToolsPackage = "microsoft.azure.kusto.tools" +[string]$KustoConnectionString = "$AdxEngineUrl;Fed=True" +[string]$NuGetIndex = "https://api.nuget.org/v3/index.json" +[string]$NuGetDownloadUrl = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" +[string]$nugetPackageLocation = "$($env:USERPROFILE)\.nuget\packages" + +#endregion StaticValues + +#region HelperFunctions + +function Write-Log { + <# + .DESCRIPTION + Write-Log is used to write information to a log file and to the console. + + .PARAMETER Severity + parameter specifies the severity of the log message. Values can be: Information, Warning, or Error. + #> + + [CmdletBinding()] + param( + [parameter()] + [ValidateNotNullOrEmpty()] + [string]$Message, + [string]$LogFileName, + + [parameter()] + [ValidateNotNullOrEmpty()] + [ValidateSet('Information', 'Warning', 'Error')] + [string]$Severity = 'Information' + ) + # Write the message out to the correct channel + switch ($Severity) { + "Information" { Write-Host $Message -ForegroundColor Green } + "Warning" { Write-Host $Message -ForegroundColor Yellow } + "Error" { Write-Host $Message -ForegroundColor Red } + } + try { + [PSCustomObject]@{ + Time = (Get-Date -f g) + Message = $Message + Severity = $Severity + } | Export-Csv -Path "$PSScriptRoot\$LogFileName" -Append -NoTypeInformation -Force + } + catch { + Write-Error "An error occurred in Write-Log() method" -ErrorAction SilentlyContinue + } +} + +function Get-RequiredModules { + <# + .DESCRIPTION + Get-Required is used to install and then import a specified PowerShell module. + + .PARAMETER Module + parameter specifices the PowerShell module to install. + #> + + [CmdletBinding()] + param ( + [parameter(Mandatory = $true)] $Module + ) + + try { + $installedModule = Get-InstalledModule -Name $Module -ErrorAction SilentlyContinue + if ($null -eq $installedModule) { + Write-Log -Message "The $Module PowerShell module was not found" -LogFileName $LogFileName -Severity Warning + #check for Admin Privleges + $currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent()) + + if (-not ($currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))) { + #Not an Admin, install to current user + Write-Log -Message "Can not install the $Module module. You are not running as Administrator" -LogFileName $LogFileName -Severity Warning + Write-Log -Message "Installing $Module module to current user Scope" -LogFileName $LogFileName -Severity Warning + + Install-Module -Name $Module -Scope CurrentUser -Force + Import-Module -Name $Module -Force + } + else { + #Admin, install to all users + Write-Log -Message "Installing the $Module module to all users" -LogFileName $LogFileName -Severity Warning + Install-Module -Name $Module -Force -ErrorAction continue + Import-Module -Name $Module -Force -ErrorAction continue + } + } + # Install-Module will obtain the module from the gallery and install it on your local machine, making it available for use. + # Import-Module will bring the module and its functions into your current powershell session, if the module is installed. + } + catch { + Write-Log -Message "An error occurred in Get-RequiredModules() method" -LogFileName $LogFileName -Severity Error + exit + } +} + +function Split-ArrayBySize { + [CmdletBinding()] + param ( + [parameter(Mandatory = $true)] $AdxTabsArray, + [parameter(Mandatory = $true)] $ArraySize + ) + try { + $slicedArraysResult = Split-Array -Item $AdxTabsArray -Size $ArraySize | ForEach-Object { '{0}' -f ($_ -join '","') } + return $slicedArraysResult + } + catch { + Write-Error "An error occurred in Split-ArrayBySize() method" -ErrorAction stop + exit + } +} + +function Split-Array { + [CmdletBinding()] + param ( + [parameter(Mandatory = $true)] [String[]]$Item, + [parameter(Mandatory = $true)] [int]$Size + ) + + begin { $Items = @() } + process { + foreach ($i in $Item ) { $Items += $i } + } + end { + 0..[math]::Floor($Items.count / $Size) | ForEach-Object { + $x, $Items = $Items[0..($Size - 1)], $Items[$Size..$Items.Length]; , $x + } + } +} + +function Start-SleepMessage { + <# + .DESCRIPTION + Start-SleepMessage is used to display a progress bar. + + .PARAMETER Seconds + Specifices the path the the file that includes the commands to execute + + .PARAMETER WaitMessage + Specifies the message to display with the progress bar. + + #> + + [CmdletBinding()] + param( + $Seconds, + $WaitMessage + ) + + $DoneDT = (Get-Date).AddSeconds($seconds) + + while ($DoneDT -gt (Get-Date)) { + $SecondsLeft = $doneDT.Subtract((Get-Date)).TotalSeconds + $Percent = ($Seconds - $SecondsLeft) / $seconds * 100 + Write-Progress -Activity $WaitMessage -Status "Please wait..." -SecondsRemaining $SecondsLeft -PercentComplete $Percent + [System.Threading.Thread]::Sleep(500) + } + + Write-Progress -Activity $waitMessage -Status "Please wait..." -SecondsRemaining 0 -Completed +} + +#endregion + +#region MainFunctions + +function Invoke-KustoCLI { + <# + .DESCRIPTION + Invoke-KustoCLI is used to execute the KustoCLI with the specified AdxCommandsFile. + + .PARAMETER AdxCommandsFile + parameter specifices the path the the file that includes the commands to execute + #> + + [CmdletBinding()] + param ( + [parameter(Mandatory = $true)] $AdxCommandsFile + ) + + try { + $KustoToolsDir = "$env:USERPROFILE\.nuget\packages\$KustoToolsPackage\" + $CurrentDir = Get-Location + Set-Location $ScriptDir + + + if (!(Test-Path $KustoToolsDir)) { + if (!(Test-Path nuget)) { + Write-Log -Message "The NuGet module is not found" -LogFileName $LogFileName -Severity Warning + Write-Log -Message "Downloading NuGet package" -LogFileName $LogFileName -Severity Information + (New-Object net.webclient).downloadFile($NuGetDownloadUrl, "$pwd\nuget.exe") + } + + Write-Log -Message "Installing Kusto Tools Package" -LogFileName $LogFileName -Severity Information + &.\nuget.exe install $kustoToolsPackage -Source $nugetIndex -OutputDirectory $nugetPackageLocation + } + + $KustoExe = $KustoToolsDir + @(Get-ChildItem -Recurse -Path $KustoToolsDir -Name kusto.cli.exe)[-1] + + if (!(Test-Path $KustoExe)) { + Write-Log -Message "Unable to find Kusto client tool $KustoExe. exiting" -LogFileName $LogFileName -Severity Warning + Write-Warning "Unable to find Kusto client tool $KustoExe. exiting" + return + } + + Write-Log -Message "Executing queries on Azure Data Explorer (ADX)" -LogFileName $LogFileName -Severity Information + Invoke-Expression "$kustoExe `"$kustoConnectionString`" -script:`"$adxCommandsFile`"" + Set-Location $CurrentDir + } + catch { + Write-Log -Message "An error occurred in Invoke-KustoCLI() method" -LogFileName $LogFileName -Severity Error + exit + } +} + +function New-AdxRawMappingTables { + <# + .DESCRIPTION + New-AdxRawMappingTables is used to create raw mapping tables + + .PARAMETER LaTables + Parameter specifices the Log Analytics tables to create + #> + [CmdletBinding()] + param ( + [parameter(Mandatory = $true)] $LaTables, + [parameter(Mandatory = $true)] $LaMappingDecision + ) + + if (!(Test-Path "$PSScriptRoot\KustoQueries" -PathType Container)) { + New-Item -Path $PSScriptRoot -Name "KustoQueries" -ItemType "directory" + } + + if (Test-Path "$PSScriptRoot\ADXSupportedTables.json") { + $supportedTables = Get-Content "$PSScriptRoot\ADXSupportedTables.json" | ConvertFrom-Json + } + else { + Write-Log " Unable to load $($PSScriptRoot)\ADXSupportedTables.json" -Severity Error + exit + } + + foreach ($table in $LaTables) { + if ($LaMappingDecision) { + $TableName = $table.'$table' + } + else { + $TableName = $table + } + + if ($TableName -match '_CL$') { + Write-Log -Message "Custom log table : $TableName not supported" -LogFileName $LogFileName -Severity Information + } + elseif ($supportedTables.SupportedTables -ccontains $TableName.ToString().Trim()) { + Write-Log -Message "Retrieving schema and mappings for $TableName" -LogFileName $LogFileName -Severity Information + $query = $TableName + ' | getschema | project ColumnName, DataType' + $AdxTablesArray.Add($TableName.Trim()) + + Write-Verbose "Executing: (Invoke-AzOperationalInsightsQuery -WorkspaceId $LogAnalyticsWorkspaceId -Query $query).Results" + $output = (Invoke-AzOperationalInsightsQuery -WorkspaceId $LogAnalyticsWorkspaceId -Query $query -DefaultProfile $Context).Results + + $TableExpandFunction = $TableName + 'Expand' + $TableRaw = $TableName + 'Raw' + $RawMapping = $TableRaw + 'Mapping' + + $FirstCommand = @() + $ThirdCommand = @() + + foreach ($record in $output) { + if ($record.DataType -eq 'System.DateTime') { + $dataType = 'datetime' + $ThirdCommand += $record.ColumnName + " = todatetime(events." + $record.ColumnName + ")," + } + else { + $dataType = 'string' + $ThirdCommand += $record.ColumnName + " = tostring(events." + $record.ColumnName + ")," + } + $FirstCommand += $record.ColumnName + ":" + "$dataType" + "," + } + + $schema = ($FirstCommand -join '') -replace ',$' + $function = ($ThirdCommand -join '') -replace ',$' + + $CreateRawTable = '.create table {0} (Records:dynamic)' -f $TableRaw + + $CreateRawMapping = @' + .create table {0} ingestion json mapping '{1}' '[{{"column":"Records","Properties":{{"path":"$.records"}}}}]' +'@ -f $TableRaw, $RawMapping + + $CreateRetention = '.alter-merge table {0} policy retention softdelete = 0d' -f $TableRaw + + $CreateTable = '.create table {0} ({1})' -f $TableName, $schema + + $CreateFunction = @' + .create-or-alter function {0} {{{1} | mv-expand events = Records | project {2} }} +'@ -f $TableExpandFunction, $TableRaw, $function + + $CreatePolicyUpdate = @' + .alter table {0} policy update @'[{{"Source": "{1}", "Query": "{2}()", "IsEnabled": "True", "IsTransactional": true}}]' +'@ -f $TableName, $TableRaw, $TableExpandFunction + + $scriptDir = "$PSScriptRoot\KustoQueries" + New-Item "$scriptDir\adxCommands.txt" + Add-Content "$scriptDir\adxCommands.txt" "`n$CreateRawTable" + Add-Content "$scriptDir\adxCommands.txt" "`n$CreateRawMapping" + Add-Content "$scriptDir\adxCommands.txt" "`n$CreateRetention" + Add-Content "$scriptDir\adxCommands.txt" "`n$CreateTable" + Add-Content "$scriptDir\adxCommands.txt" "`n$CreateFunction" + Add-Content "$scriptDir\adxCommands.txt" "`n$CreatePolicyUpdate" + + try { + Invoke-KustoCLI -AdxCommandsFile "$scriptDir\adxCommands.txt" + Remove-Item $ScriptDir\adxCommands.txt -Force -ErrorAction Ignore + } + catch { + Write-Log -Message "An error occurred in New-AdxRawMappingTables() method" -LogFileName $LogFileName -Severity Error + exit + } + Write-Log -Message "Successfully created Raw and Mapping tables for: $TableName in ADX cluster database." -LogFileName $LogFileName -Severity Information + } + else { + Write-Log -Message "$TableName table is not supported by data export." -LogFileName $LogFileName -Severity Error + } + } +} + +function New-EventHubNamespace { + <# + .DESCRIPTION + New-EventHubNamespace is used to create an Event Hub namespace. + + .PARAMETER ArraysObject + Parameter specifices the Event Hub namespace. + #> + [CmdletBinding()] + param ( + [parameter(Mandatory = $true)] $ArraysObject + ) + try { + $EventHubsArray = @() + foreach ($slicedArray in $ArraysObject) { + if ($slicedArray.Length -gt 0) { + #Create Event Hub NameSpace + $randomNumber = Get-Random + $EventHubNamespaceName = "$($LogAnalyticsWorkspaceName)-$($randomNumber)" + $EventHubsArray += $EventHubNamespaceName + + Write-Verbose "Executing: New-AzEventHubNamespace -ResourceGroupName $LogAnalyticsResourceGroup -NamespaceName $EventHubNamespaceName ` + -Location $LogAnalyticsLocation -SkuName Standard -SkuCapacity 12 -EnableAutoInflate -MaximumThroughputUnits 20" + + try { + Write-Log -Message "Create a new Event Hub Namespace:$EventHubNamespaceName in resource group:$LogAnalyticsResourceGroup" -LogFileName $LogFileName -Severity Information + Set-Item Env:\SuppressAzurePowerShellBreakingChangeWarnings "true" + $ResultEventHubNS = New-AzEventHubNamespace -ResourceGroupName $LogAnalyticsResourceGroup ` + -NamespaceName $EventHubNamespaceName ` + -Location $LogAnalyticsLocation ` + -SkuName "Standard" ` + -SkuCapacity 12 ` + -EnableAutoInflate ` + -MaximumThroughputUnits 20 + + if ($ResultEventHubNS.ProvisioningState.Trim().ToLower() -eq "succeeded") { + Write-Log -Message "$EventHubNamespaceName created successfully" -LogFileName $LogFileName -Severity Information + } + } + catch { + + Write-Log -Message "$($_.Exception.Response.StatusCode.value__)" -LogFileName $LogFileName -Severity Error + Write-Log -Message "$($_.Exception.Response.StatusDescription)" -LogFileName $LogFileName -Severity Error + } + } + } + return $EventHubsArray + } + catch { + Write-Log -Message "An error occurred in Create-EventHubNamespace() method" -LogFileName $LogFileName -Severity Error + exit + } +} + +function New-LaDataExportRule { + <# + .DESCRIPTION + New-LaDataExportRule is used to create the Log Analytics export rule, + + .PARAMETER AdxEventHubs + Parameter specifices Azure Data Explorer Event Hub to create export rule. + + .PARAMETER TablesArrayCollection + Parameter specifies the table names used to create the export rule. + #> + + [CmdletBinding()] + param ( + [Parameter(Mandatory = $true, Position = 0)] $AdxEventHubs, + [Parameter(Mandatory = $true, Position = 1)] $TablesArrayCollection + ) + + Write-Log -Message "Creating Log Analytics data export rules" -LogFileName $LogFileName -Severity Information + + try { + $Count = 0 + + foreach ($AdxEventHub in $AdxEventHubs) { + $EventHubNameSpace = Get-AzEventHubNamespace -ResourceGroupName $LogAnalyticsResourceGroup -NamespaceName $AdxEventHub + + if ($AdxEventHubs.Count -gt 1) { + $ExportRuleTables = '"{0}"' -f ($TablesArrayCollection[$count] -join '","') + } + else { + $ExportRuleTables = '"{0}"' -f ($TablesArrayCollection -join '","') + } + + if ($EventHubNameSpace.ProvisioningState -eq "Succeeded") { + $RandomNumber = Get-Random + $LaDataExportRuleName = "$($LogAnalyticsWorkspaceName)-$($RandomNumber)" + $DataExportAPI = "https://management.azure.com/subscriptions/$SubscriptionId/resourcegroups/$LogAnalyticsResourceGroup/providers/Microsoft.operationalInsights/workspaces/$LogAnalyticsWorkspaceName/dataexports/$laDataExportRuleName" + "?api-version=2020-08-01" + + $AzureAccessToken = (Get-AzAccessToken).Token + $LaAPIHeaders = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" + $LaAPIHeaders.Add("Content-Type", "application/json") + $LaAPIHeaders.Add("Authorization", "Bearer $AzureAccessToken") + + $DataExportBody = @" + { + "properties": { + "destination": { + "resourceId": "$($EventHubNameSpace.Id)" + }, + "tablenames": [$ExportRuleTables], + "enable": true + } + } +"@ + + Write-Verbose "Executing: Invoke-RestMethod -Uri $DataExportAPI -Method 'PUT' -Headers $LaAPIHeaders -Body $DataExportBody" + + try { + $CreateDataExportRule = Invoke-RestMethod -Uri $DataExportAPI -Method "PUT" -Headers $LaAPIHeaders -Body $DataExportBody + Write-Log -Message $CreateDataExportRule -LogFileName $LogFileName -Severity Information + } + catch { + Write-Log -Message $($_.Exception.Response.StatusCode.value__) -LogFileName $LogFileName -Severity Error + Write-Log -Message $($_.Exception.Response.StatusDescription) -LogFileName $LogFileName -Severity Error + } + $Count++ + } + else { + Start-SleepMessage 300 + } + } + } + catch { + Write-Error "An error occurred in Create-LaDataExportRule() method" -ErrorAction stop + exit + } +} + +function New-ADXDataConnectionRules { + [CmdletBinding()] + param ( + [Parameter(Mandatory = $true, Position = 0)] $AdxEventHubs + ) + + try { + Register-AzResourceProvider -ProviderNamespace Microsoft.Kusto + Write-Log -Message "Creating Azure Data Explorer data connection" -LogFileName $LogFileName -Severity Information + $ADXClusterName = $ADXClusterURL.split('.')[0].replace("https://", "").Trim() + foreach ($AdxEH in $AdxEventHubs) { + Write-Verbose "Executing: Get-AzEventHub -ResourceGroup $LogAnalyticsResourceGroup -NamespaceName $AdxEH" + try { + $EventHubTopics = Get-AzEventHub -ResourceGroup $LogAnalyticsResourceGroup -NamespaceName $AdxEH + + if ($null -ne $EventHubTopics) { + foreach ($EventHubTopic in $EventHubTopics) { + $TableEventHubTopic = $EventHubTopic.Name.split('-')[1] + # The above statement will return Table name in lower case + # Azure Kusto Data connection is expecting the table name in title case (Case Sensitive) + # In order to get exact same case table name, getting it from Source array + $AdxTables = $AdxTablesArray.ToArray() + $ArrIndex = $AdxTables.ForEach{ $_.ToLower() }.IndexOf($tableEventHubTopic) + $EventHubResourceId = $EventHubTopic.Id + $AdxTableRealName = $AdxTables[$ArrIndex].Trim().ToString() + $AdxTableRaw = "$($AdxTableRealName)Raw" + $AdxTableRawMapping = "$($AdxTableRealName)RawMapping" + $DataConnName = "dc-$($TableEventHubTopic)" + + $DataConnAPI = "https://management.azure.com/subscriptions/$SubscriptionId/resourceGroups/$ADXResourceGroup/providers/Microsoft.Kusto/clusters/$ADXClusterName/databases/$ADXDBName/dataConnections/$dataConnName" + "?api-version=2021-01-01" + + $AzureAccessToken = (Get-AzAccessToken).Token + $DataConnAPIHeaders = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" + $DataConnAPIHeaders.Add("Content-Type", "application/json") + $DataConnAPIHeaders.Add("Authorization", "Bearer $AzureAccessToken") + + $DataConnBody = @" + { + "location": "$LogAnalyticsLocation", + "kind": "EventHub", + "properties": { + "eventHubResourceId": "$EventHubResourceId", + "consumerGroup": "$('$Default')", + "dataFormat":"JSON", + "tableName":"$AdxTableRaw", + "mappingRuleName":"$AdxTableRawMapping", + "compression":"None" + } + } +"@ + Write-Verbose "Executing: Invoke-RestMethod -Uri $DataConnAPI -Method 'PUT' -Headers $LaAPIHeaders -Body $DataConnBody" + + try { + $CreateDataConnRule = Invoke-RestMethod -Uri $DataConnAPI -Method "PUT" -Headers $DataConnAPIHeaders -Body $DataConnBody + Write-Log -Message $CreateDataConnRule -LogFileName $LogFileName -Severity Information + } + catch { + + Write-Log -Message "An error occurred in creating data connection for $($eventHubTopic.Name)" -LogFileName $LogFileName -Severity Error + Write-Log -Message $($_.Exception.Response.StatusCode.value__) -LogFileName $LogFileName -Severity Error + Write-Log -Message $($_.Exception.Response.StatusDescription) -LogFileName $LogFileName -Severity Error + } + + } + } + else { + Write-Log -Message "Event Hub topics not available in $AdxEH" -LogFileName $LogFileName -Severity Error + } + + } + catch { + + Write-Log -Message "An error occurred in retrieving Event Hub topics from $AdxEH" -LogFileName $LogFileName -Severity Error + } + } + } + catch { + Write-Log -Message "An error occurred in Create-ADXDataConnectionRules() method" -LogFileName $LogFileName -Severity Error + exit + } +} + +#endregion + +#region DriverProgram + +Get-RequiredModules("Az.Resources") +Get-RequiredModules("Az.OperationalInsights") + +# Check Powershell version, needs to be 5 or higher +if ($host.Version.Major -lt 5) { + Write-Log "Supported PowerShell version for this script is 5 or above" -LogFileName $LogFileName -Severity Error + exit +} + +$TimeStamp = Get-Date -Format yyyyMMdd_HHmmss +$LogFileName = '{0}_{1}.csv' -f "ADXMigration", $TimeStamp + +Write-Output "`n`n Starting Migrate-LA-to-Adx.ps1 at: $(Get-Date)" +Write-Output " Creating log $LogFileName" + +Write-Host "`n`n`r`If not already authenticated, you will be prompted to sign in to Azure.`nMake sure that your credentials have:" -BackgroundColor Blue +Write-Host "`n > Azure Log Analytics workspace 'Read' permissions on: $($LogAnalyticsWorkspaceName)`n > Azure Data Explorer Database 'User' permissions on: $($AdxDBName). `n`nThese permissions are required for the script to read the Log Analytics workspace tables and to create tables in Azure Data Explorer.`r`n" -BackgroundColor Blue + +Set-AzContext -Subscription $LogAnalyticsSubscriptionId +$Context = Get-AzContext + +if (!$Context) { + Write-Output "Context was not set. Connecting with Connect-AzAccount" + Connect-AzAccount -SubscriptionId $LogAnalyticsSubscriptionId + $Context = Get-AzContext +} + +$SubscriptionId = $LogAnalyticsSubscriptionId +$KustoConnectionString = $KustoConnectionString + ";Authority Id=$($Context.tenant.id);AppClientId=$($Context.Account.id);AppKey=$SecretKey" + +Write-Verbose "Executing: Get-AzOperationalInsightsWorkspace -Name $LogAnalyticsWorkspaceName -ResourceGroupName $LogAnalyticsResourceGroup -DefaultProfile $context" + +try { + $WorkspaceObject = Get-AzOperationalInsightsWorkspace -Name $LogAnalyticsWorkspaceName -ResourceGroupName $LogAnalyticsResourceGroup -DefaultProfile $Context + $LogAnalyticsLocation = $WorkspaceObject.Location + $LogAnalyticsWorkspaceId = $WorkspaceObject.CustomerId + if ($null -ne $LogAnalyticsWorkspaceId) { + Write-Log -Message "Workspace named $LogAnalyticsWorkspaceName in region $LogAnalyticsLocation exists." -LogFileName $LogFileName -Severity Information + } + else { + Write-Log -Message "$LogAnalyticsWorkspaceName not found" -LogFileName $LogFileName -Severity Error + } +} +catch { + Write-Log -Message "Error occurred in retreiving Log Analytics workspace: $LogAnalyticsWorkspaceName" -LogFileName $LogFileName -Severity Error +} + +#region ADXTableCreation +if ([string]::IsNullOrEmpty($UserInputTables)){ + $LaTablesQuestionDecision = $true +} +else { + $LaTablesQuestionDecision = $false +} + +if ($LaTablesQuestionDecision) { + Write-Verbose "Executing: Invoke-AzOperationalInsightsQuery -WorkspaceId $LogAnalyticsWorkspaceId -Query $QueryAllTables" + + try { + Write-Log -Message "Retrieving tables from $LogAnalyticsWorkspaceName" -LogFileName $LogFileName -Severity Information + $QueryAllTables = 'search *| distinct $table| sort by $table asc nulls last' + $ResultsAllTables = (Invoke-AzOperationalInsightsQuery -WorkspaceId $LogAnalyticsWorkspaceId -Query $QueryAllTables -DefaultProfile $Context).Results + } + catch { + Write-Log -Message "An error occurred in querying table names from $LogAnalyticsWorkspaceName" -LogFileName $LogFileName -Severity Error + exit + } +} +else { + try { + Write-Host "`nEnter selected Log Analytics workspace table names separated by comma (,) (Case-Sensitive)" -ForegroundColor Blue + $ResultsAllTables = $UserInputTables.Split(',') + } + catch { + Write-Log -Message "Incorrect user input! Table names must be separated by comma (,)" -LogFileName $LogFileName -Severity Error + exit + } +} + +$AdxTablesArray = New-Object System.Collections.Generic.List[System.Object] +New-AdxRawMappingTables -LaTables $ResultsAllTables -LaMappingDecision $LaTablesQuestionDecision +#endregion + +#region EventHubsCreation +Write-Verbose " There are $($AdxTablesArray.ToArray().Count) supported tables to map." + +if ($AdxTablesArray.ToArray().Count -gt 0) { + $AdxMappedTables = Split-ArrayBySize -AdxTabsArray $AdxTablesArray.ToArray() -ArraySize 10 + + Write-Verbose "Executing: New-EventHubNamespace -ArraysObject $AdxMappedTables" + $EventHubsForADX = New-EventHubNamespace -ArraysObject $AdxMappedTables +} +else { + Write-Log "There are $($AdxTablesArray.ToArray().Count) supported tables to map in $($LogAnalyticsWorkspaceName), you must choose a workspace with at least one supported table." -LogFileName $LogFileName -Severity Error + exit +} + +#endregion + +#region LogAnalyticsDataExportRule +New-LaDataExportRule -AdxEventHubs $EventHubsForADX -TablesArrayCollection $AdxMappedTables +#endregion + +#region ADXDataConnectionRule + +if ($CreateDataConnection) { + Start-SleepMessage -Seconds 1800 -waitMessage "Provisioning Event Hub topics for Log Analytics tables" + New-ADXDataConnectionRules -AdxEventHubs $EventHubsForADX +} +else { + Write-Log -Message "Please manually create data connection rules for $AdxDBName in $AdxEngineUrl" -LogFileName $LogFileName -Severity Warning +} +#endregion \ No newline at end of file diff --git a/Tools/AzureDataExplorer/Pipeline/Readme.MD b/Tools/AzureDataExplorer/Pipeline/Readme.MD new file mode 100644 index 0000000000..0fa46298b1 --- /dev/null +++ b/Tools/AzureDataExplorer/Pipeline/Readme.MD @@ -0,0 +1,38 @@ +# Integrate Azure Data Explorer (ADX) for long-term log retention with a Azure DevOps Pipeline + +**Author: Alexandre Verkinderen** + +As part of our Azure Enterprise Scale deployment we also provision Log Analytics and Sentinel and have a need to export this data for archviving purpose. The excellent script provided by Sreedhar Ande was the missing piece to be able automate the export of the Log Analtyics logs. + +Our Enterprise Scale deployment is fully automated and repeatable accross different environments using Azure DevOps Pipelines. This script is slightly modified from the original one and is intented to be executed from within an Azure DevOps Pipeline to configure Log Analtyics workspace to an Eventhubs and setup ADX connectors for ingestion. The provided yaml pipeline is just an example and can be modified to your requirements. + +## Prerequisites + +- Make sure you have all the prerequisites in place as described here . +- Make sure that the SPN you use for the Service Connection within your Pipeline has permissions as mentioned above +- Get the SPN secret from your SPN +- Create a variable group (we call it ES-General) with the following variables and fill in the values with your Azure Resources + - ARM_CLIENT_SECRET (secret of the appID) + - LogAnalyticsSubscriptionId + - LogAnalyticsWorkSpaceName + - LogAnalyticsResourceGroup + - AdxResourceGroup + - AdxClusterURL + - AdxDBName + - LAExportTablesToADX (specify tables you want to export like AzureActivity,SecurityRecommendation) + +![VariableGroup](../images/VariableGroup.PNG) + +## Script + +The script requires one extra parameter compared to the original script: "SecretKey". This is because the kustocli.exe is prompting for authentication. . As we are using an SPN to connect to Azure we have to pass the ApplicationClientId and ApplicationKey. + +`$KustoConnectionString = $KustoConnectionString + ";Authority Id=$($Context.tenant.id);AppClientId=$($Context.Account.id);AppKey=$SecretKey"` + +## Pipeline + +Import the provided yaml pipeline in your Azur DevOps environment and change the ScriptPath parameter to match the location where you stored the script in your repository. Once done execute the script. + +![Pipeline](../images/Pipeline.PNG) + +The script will take roughly 30 minutes to execute. diff --git a/Tools/AzureDataExplorer/Pipeline/azure-pipeline-es-MigrateLAtoADX.yml b/Tools/AzureDataExplorer/Pipeline/azure-pipeline-es-MigrateLAtoADX.yml new file mode 100644 index 0000000000..556beadf1e --- /dev/null +++ b/Tools/AzureDataExplorer/Pipeline/azure-pipeline-es-MigrateLAtoADX.yml @@ -0,0 +1,23 @@ +# Pipeline Policies +name: $(BuildDefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r) +trigger: none + +pool: + vmImage: 'windows-latest' + +variables: + - group: ES-General + +jobs: +- job: MigrateLAtoADX + condition: true + displayName: 'Migrate LA to ADX' + steps: + - task: AzurePowerShell@5 + displayName: 'Migrate LA to ADX' + inputs: + azureSubscription: 'Root Management Group' + ScriptType: 'FilePath' + ScriptPath: 'Code/Scripts/adx/Migrate-LA-to-ADX.ps1' + ScriptArguments: '-SecretKey $(ARM_CLIENT_SECRET) -LogAnalyticsSubscriptionId $(LogAnalyticsSubscriptionId) -LogAnalyticsWorkSpaceName $(LogAnalyticsWorkSpaceName) -LogAnalyticsResourceGroup $(LogAnalyticsResourceGroup) -AdxResourceGroup $(AdxResourceGroup) -AdxClusterURL $(AdxClusterURL) -AdxDBName $(AdxDBName) -UserInputTables "$(LAExportTablesToADX)" -CreateDataConnection' + azurePowerShellVersion: 'LatestVersion' diff --git a/Tools/AzureDataExplorer/images/Pipeline.PNG b/Tools/AzureDataExplorer/images/Pipeline.PNG new file mode 100644 index 0000000000000000000000000000000000000000..233532764755b17c547e6826bcc8366dcfbe1e43 GIT binary patch literal 84580 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

T|LKFSD{H-P%Mw4SFnfrj6J_0Hy$+nc@k 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 C-BBk1 literal 0 HcmV?d00001 diff --git a/Tools/AzureDataExplorer/images/VariableGroup.PNG b/Tools/AzureDataExplorer/images/VariableGroup.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6d3af47475ccfe7461a336508297a1b97ebddba8 GIT binary patch literal 22627 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