Cliquez pour évaluer cet article !
0 avis

Dans cet article, je vais vous montrer une méthode pour envoyer des données de manière sécurisée dans Log Analytics v2 en utilisant Azure Automation et l’API Log Ingestion.

Contexte

Log Analytics est très utile pour créer des tableaux de bord personnalisés avec des données spécifiques.
Par exemple, vous pouvez utiliser un script de remédiation Intune pour collecter des données depuis vos appareils et les envoyer à Log Analytics.
Pour cela, vous devez utiliser l’API Log Ingestion. Par défaut, Microsoft recommande de créer une app registration pour utiliser l’API Log Ingestion.
Le problème est qu’il faut inclure dans son script des informations sur l’application : appid, secret.
Dans cet article, nous voulons éviter cela et découvrir une autre méthode.

La solution

Voici comment cela fonctionne :

  1. Un compte Azure Automation configuré avec identité managée
  2. Un script de remédiation est utilisé pour collecter des données sur vos appareils
  3. Le script envoie les données au runbook Automation via un webhook
  4. Le runbook Automation envoie les données à Log Analytics via l’identité managée

Comme mentionné, c’est une méthode pour sécuriser le processus. Vous pouvez également utiliser une fonction Azure (je publierai bientôt un article similaire avec Azure Function).

Télécharger le script

Cliquez sur l’image GitHub ci-dessous pour télécharger les scripts.
Vous y trouverez :

  • Assign_permissions.ps1 : script pour ajouter des permissions à l’identité managée.
  • Runbook.ps1 : le runbook Azure Automation.
  • Un exemple de dossier avec des scripts de remédiation.

Prérequis

Vous devez d’abord ajouter les prérequis pour utiliser l’API Log Ingestion, également appelée Log Analytics v2.
Voir mon article ici pour plus d’informations.

Création d’un compte Automation

Objectif : ici, nous allons créer le compte Automation qui sera utilisé pour exécuter le script.

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

Configuration de l’identité managée

Objectif : l’identité managée est utilisée pour s’authentifier auprès du tenant, de sorte qu’aucun identifiant ne soit requis.
Lors de la configuration de l’identité managée, une nouvelle application d’entreprise Azure sera créée.
Cette application sera utilisée pour s’authentifier auprès de votre tenant et effectuer des appels API.

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

Ajout des permissions

Objectif : pour vérifier si l’appareil existe est géré, nous avons besoin des permissions suivantes :

  1. Modifiez le script Assign_permissions.ps1
  2. Changez les variables: TenantID et DisplayNameOfMSI
  3. Exécutez le script avec des droits d’administrateur global

Création du Runbook

Objectif : ici, nous allons créer le script qui va envoyer les données dans Log Analytics.

  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 dans le runbook.
  6. Copiez le contenu du script Runbook.ps1
  7. Cliquez sur Save
  8. Cliquez sur Publish

Ajout d’un webhook

  1. Accédez à votre Runbook.
  2. Cliquez sur Add a webhook.
  3. Sélectionnez Create new webhook.
  4. Entrez un nom
  5. Cliquez sur Enabled
  6. Copiez l’URL du webhook.
  7. Cliquez sur OK

Ajout d’un rôle DCR

Nous devons donner à l’application les permissions pour utiliser le DCR.

  1. Allez dans votre DCR.
  2. Allez dans Access Control (IAM)
  1. Cliquez sur Add role assignment
  1. Sélectionnez Monitoring Metrics Publisher
  1. Cliquez sur Next
  2. Sélectionnez Utilisateur, groupe ou principal de service
  3. Cliquez sur Select members
  4. Recherchez l’identité managée de l’application
  1. Cliquez sur Select.

Sécuriser le processus

Dans le script de remédiation

Ici, nous travaillons sur le script qui envoie des données à Log Analytics (via le runbook Automation).
Le processus est simple :

  1. Collectez les données dans un tableau
  2. Ajoutez le nom de la table et l’ID DCR au tableau
  3. Convertissez le contenu en JSON
  4. Envoyez les données au runbook via le webhook

Dans le dossier des exemples de scripts de remédiation, vous trouverez deux scripts :

  • Send_drivers.ps1
  • Send_services.ps1

Prenons le premier script comme exemple.

  1. Fournissez les informations sur le $DCR, $Table, et $webhookURI
  2. Collectez les informations nécessaires (par exemple, les pilotes)
$PNPSigned_Drivers = get-ciminstance win32_PnpSignedDriver | where {($_.manufacturer -ne "microsoft") -and ($_.driverprovidername -ne "microsoft") -and`
($_.DeviceName -ne $null)} | select-object @{label="TimeGenerated";Expression={get-date -Format "dddd MM/dd/yyyy HH:mm K"}},`
@{Label="DCR";Expression={$DCR}},`
@{Label="Table";Expression={$Table}},`
@{Label="DeviceName";Expression={$env:computername}},`
@{Label="ModelFriendlyName";Expression={$Model_FriendlyName}},`
@{Label="DeviceManufacturer";Expression={$Manufacturer}},`
@{Label="Model";Expression={$Model}},`
@{Label="DriverName";Expression={$_.DeviceName}},DriverVersion,`
@{Label="DriverDate";Expression={$_.ConvertToDateTime($_.DriverDate)}},`
DeviceClass, DeviceID, manufacturer,InfName,Location

Convertissez le contenu en JSON :

$PS_Version = ($psversiontable).PSVersion.Major
If($PS_Version -eq 7)
    {
        $Body_JSON = $PNPSigned_Drivers | ConvertTo-Json -AsArray;
    }Else{
        $Body_JSON = $PNPSigned_Drivers | ConvertTo-Json
    }

Envoyez les données via le webhook :

$Secure_header = @{message='Iam_a_bi_more_secure'}
$webhookURI = ""
$response = Invoke-WebRequest -Method Post -Uri $webhookURI -Body $Body_JSON -UseBasicParsing -Headers $Secure_header 

Vous remarquerez que dans l’en-tête, un mot de passe est ajouté dans une variable nommée <strong>Secure_header</strong>.
Il sera utilisé par le runbook pour vérifier que l’appel provient d’un script sécurisé.

Dans le runbook

Par défaut, pour récupérer les informations envoyées depuis le webhook, utilisez le code suivant :

param (
    [Parameter (Mandatory = $false)]
    [object] $WebHookData
)
$Inputs = ConvertFrom-Json $webhookdata.RequestBody 

Dans le script qui envoie les données, un mot de passe a été ajouté. Pour le vérifier dans le runbook :

If($WebhookData.RequestHeader.message -ne 'Iam_a_bi_more_secure')
    {
        "RequestHeader not valid"
        EXIT
    } 
  1. Si le mot de passe fourni dans le script de remédiation ne correspond pas, le script du runbook s’arrête.
  2. Pour sécuriser davantage, assurez-vous que la source des données est valide.
    Pour cela, vérifiez si l’appareil source est conforme et géré.

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