Cliquez pour évaluer cet article !
0 avis

Dans cet article, nous allons voir comment exécuter des requêtes KQL sur un espace de travail Log Analytics via Azure Automation et PowerShell.

Autres articles

Que souhaitons nous ?

  • Vous avez un espace de travail Log Analytics
  • Vous avez différents journaux
  • Vous voulez exécuter des requêtes sur les journaux via Azure Automation

La solution

Nous procéderons comme suit :

  1. Créer un compte Azure Automation
  2. Le configurer avec une identité managée
  3. Attribuer un rôle au compte d’automatisation
  4. S’authentifier à l’espace de travail avec l’identité managée
  5. Exécuter une requête KQL avec PowerShell

Création du compte Azure Automation

Objectif : Ici, nous allons créer le compte Azure Automation qui sera utilisé pour exécuter le script et exécuter la requête KQL.

  1. Allez dans Azure
  2. Allez dans Azure Automation
  3. Cliquez sur Create
  4. Saisissez un nom
  5. Choisissez un abonnement, groupe de ressources, région
  6. Cliquez sur Create

Configuration de l’identité managée

Objectif : L’identité managée est utilisée pour s’authentifier sur votre tenant, permettant ainsi de ne pas fournir d’identifiants ou secret.
Lorsque vous configurez l’identité managée, une nouvelle application d’entreprise Azure sera créée.
Celle-ci sera utilisée pour s’authentifier auprès de notre tenant et effectuer des appels API.
Pour cela, nous procéderons comme suit :

  1. Allez dans Azure Automation
  2. Allez dans Identity
  3. Allez sur System assigned
  4. Sélectionnez Enable
  5. Cliquez sur Save
  6. Cliquer sur Yes
  7. Une fois configurée, une nouvelle application d’entreprise sera créée avec le même nom que le compte d’automatisation

Donner accès au compte d’automatisation

Objectif : Pour pouvoir exécuter des requêtes KQL au travers de Azure Automation, nous devons ajouter un rôle.
Nous procéderons comme suit :

  1. Allez dans votre espace de travail Log Analytics
  2. Allez dans Access Control (IAM)
  1. Cliquez sur Add > Add role assignment
  2. Allez dans Roles > Log Analytics contributor > Add
  1. Cliquez sur Select members > managed identity votre identité managée
  1. Cliquez sur Review + Assign

Création du Runbook

Objectif : Ici, nous allons créer le script qui exécutera la requête KQL.

  1. Cliquez sur Create a runbook
  2. Saisissez un nom
  3. Dans Runbook type, sélectionnez PowerShell
  4. Cliquez sur Create
  5. Cliquez sur Modify sur le runbook

Interroger Log Analytics avec le Runbook

Authentification

La première étape consiste à obtenir un token qui prouvera que nous pouvons accéder à l’espace de travail et exécuter une requête.
L’authentification sera effectuée via l’identité managée à l’aide du code ci-dessous :

$url = $env:IDENTITY_ENDPOINT 
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER) 
$headers.Add("Metadata", "True") 
$body = @{resource='https://api.loganalytics.io' } 
$script:accessToken = (Invoke-RestMethod $url -Method 'POST' -Headers $headers -ContentType 'application/x-www-form-urlencoded' -Body $body ).access_token
Connect-AzAccount -Identity | out-null
$headers = @{
    'Content-Type' = 'application/json'
    Accept = 'application/json'
    Authorization = "Bearer $accessToken"
}

Requêtes KQL

Voir ci-dessous la requête KQL que nous souhaitons exécuter :

IntuneDevices
| where manufacturer contains "lenovo"


Voir ci-dessous le code PowerShell utilisé pour exécuter la requête KQL :

$AdvancedQueries_URL = "https://api.loganalytics.io/v1/workspaces/$workspace_ID/query"
$My_Query = 'IntuneDevices | where manufacturer contains "lenovo"'
$Query_Body = @{query = $My_Query} | ConvertTo-Json
$Query_response = Invoke-WebRequest -Method Post -Uri $AdvancedQueries_URL -Headers $headers -Body $Query_Body -UseBasicParsing
$resultsTable = $Query_response.Content | ConvertFrom-Json
$count = 0
foreach ($table in $resultsTable.Tables) {
$count += $table.Rows.Count
}
$results = New-Object object[] $count
$i = 0;
foreach ($table in $resultsTable.Tables) {
    foreach ($row in $table.Rows) {
        $properties = @{}
        for ($columnNum=0; $columnNum -lt $table.Columns.Count; $columnNum++) {
            $properties[$table.Columns[$columnNum].name] = $row[$columnNum]
        }      
        $results[$i] = (New-Object PSObject -Property $properties)
        $null = $i++
    }
}
$results

Voir ci-dessous le script complet du runbook :

$url = $env:IDENTITY_ENDPOINT 
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER) 
$headers.Add("Metadata", "True") 
$body = @{resource='https://api.loganalytics.io' } 
$script:accessToken = (Invoke-RestMethod $url -Method 'POST' -Headers $headers -ContentType 'application/x-www-form-urlencoded' -Body $body ).access_token
Connect-AzAccount -Identity | out-null
$headers = @{
    'Content-Type' = 'application/json'
    Accept = 'application/json'
    Authorization = "Bearer $accessToken"
}
 
$AdvancedQueries_URL = "https://api.loganalytics.io/v1/workspaces/$workspace_ID/query"
$My_Query = 'IntuneDevices | where manufacturer contains "lenovo"'
$Query_Body = @{query = $My_Query} | ConvertTo-Json
$Query_response = Invoke-WebRequest -Method Post -Uri $AdvancedQueries_URL -Headers $headers -Body $Query_Body -UseBasicParsing
$resultsTable = $Query_response.Content | ConvertFrom-Json
$count = 0
foreach ($table in $resultsTable.Tables) {
$count += $table.Rows.Count
}
$results = New-Object object[] $count
$i = 0;
foreach ($table in $resultsTable.Tables) {
    foreach ($row in $table.Rows) {
        $properties = @{}
        for ($columnNum=0; $columnNum -lt $table.Columns.Count; $columnNum++) {
            $properties[$table.Columns[$columnNum].name] = $row[$columnNum]
        }      
        $results[$i] = (New-Object PSObject -Property $properties)
        $null = $i++
    }
}
$results

Notez cet article

Vous avez aimé cet article ?

Rendez-le plus visible auprès des internautes en lui mettant une bonne note.

Cliquez pour évaluer cet article !
0 avis

Articles pouvant vous intéresser