15 septembre 2024
Protégez vos VM Azure avec Just-In-Time (JIT) : Sécurité et Automatisation pour vos Pipelines DevOps
La sécurité des machines virtuelles dans le cloud ne peut pas être remise à plus tard. L'accès Just-In-Time (JIT) dans Azure réduit considérablement les risques d'accès non autorisé, en accordant l'accès uniquement lorsque c'est nécessaire et pour une durée limitée. Cet article explique comment configurer et utiliser le JIT dans Azure, comment ouvrir des ports sur demande, et surtout, comment l'intégrer à vos pipelines Azure DevOps pour garantir un maximum de sécurité et d’automatisation.
Qu'est-ce que JIT et pourquoi est-ce essentiel ?

Just-In-Time (JIT) est une fonctionnalité du Centre de sécurité Azure conçue pour contrôler l'accès aux machines virtuelles en autorisant l'ouverture des ports pendant une période limitée et uniquement à la demande. L'objectif principal du JIT est de minimiser la surface d'attaque en fermant tous les ports qui ne sont pas normalement utilisés en permanence, tels que RDP (3389) et SSH (22). Lorsque l'accès JIT est activé, les ports ne sont ouverts qu'après approbation explicite de la demande et sont automatiquement fermés après un délai déterminé.

Contrairement à l'ouverture permanente des ports (l'approche standard), l'accès JIT réduit considérablement le risque d'attaques par force brute ou de vulnérabilités de type « zero-day ». Au lieu d'un accès ouvert en permanence, vous obtenez un système qui ne fournit un accès que lorsqu'il est réellement nécessaire, ce qui minimise les risques.


Configuration JIT via le Portail Azure et PowerShell

Pré-requis:

Vous devez disposer d'un abonnement Microsoft Defender for Cloud level Defender for Servers Plan 2 pour utiliser JIT. Vous pouvez en savoir plus ici.

Création d'une politique de JIT

Portail Azure

  1. Dans le portail Azure, accédez à « Microsoft Defender for Cloud ».
  2. Dans le menu latéral, sélectionnez « Workload protections » → « Just-in-time VM access ».
  3. Sélectionnez l'onglet « Configuré » ou « Non configuré » pour afficher les machines virtuelles disponibles.
  4. Sélectionnez une machine virtuelle et cliquez sur « Enable JIT ».
  5. Spécifiez les ports à ouvrir sur demande et la durée maximale de validité de l'autorisation.
  6. Cliquez sur « Enregistrer » pour appliquer la politique.

Azure PowerShell:

Pour automatiser cette opération, vous pouvez utiliser la cmdlet Set-AzJitNetworkAccessPolicy Azure PowerShell. Par exemple:
$JitPolicy = (@{
    id="/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Compute/virtualMachines/<VM_NAME>";
    ports=(@{
        number=22;
        protocol="*";
        allowedSourceAddressPrefix=@("*");
        maxRequestAccessDuration="PT3H"},
        @{
        number=3389;
        protocol="TCP";
        allowedSourceAddressPrefix=@("*");
        maxRequestAccessDuration="PT3H"})})
$JitPolicyArr=@($JitPolicy)
Set-AzJitNetworkAccessPolicy -Kind "Basic" -Location "<LOCATION>" -Name "default" -ResourceGroupName "<RESOURCE_GROUP>" -VirtualMachine $JitPolicyArr
Ce script permet l'accès juste à temps à une VM spécifique avec les règles suivantes :

  • Fermer les ports 22 et 3389
  • Définir une fenêtre de temps maximale de 3 heures pour chacun d'entre eux afin qu'ils puissent être ouverts par demande approuvée
  • Permettre à l'utilisateur qui demande l'accès de contrôler les adresses IP source
  • Permettre à l'utilisateur qui demande l'accès d'établir une session réussie lors d'une demande d'accès juste à temps approuvée.

Ces politiques fermeront les ports par défaut et vous devrez demander explicitement l'ouverture des ports pour accéder aux machines virtuelles.

Ouvrir les ports lorsque la connectivité est requise.

Portail Azure:

$JitPolicyVm1 = (@{
    id="/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Compute/virtualMachines/<VM_NAME>";
    ports=(@{
      number=22;
      endTimeUtc="2020-07-15T17:00:00.3658798Z";
      allowedSourceAddressPrefix=@("IPV4ADDRESS")})})
$JitPolicyArr=@($JitPolicyVm1)
Start-AzJitNetworkAccessPolicy -ResourceId "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Security/locations/<LOCATION>/jitNetworkAccessPolicies/default" -VirtualMachine $JitPolicyArr
Ce script vous permet d'ouvrir une demande d'accès juste à temps à une VM spécifique pour le port 22, pour une adresse IP spécifique et pour une durée spécifique.

Intégrer le JIT dans les pipelines Azure DevOps

Et peut-être le plus important. Souvent, nous devons travailler dans des machines virtuelles protégées par un accès JIT à partir d'Azure DevOps Pipelines. À cette fin, nous pouvons utiliser la tâche AzurePowerShell pour ouvrir un connection vers une machine virtuelle:
- task: AzurePowerShell@5
  inputs:
    azureSubscription: 'ваша Azure-подписка'
    ScriptType: 'InlineScript'
    Inline: |
$JitPolicyVm1 = (@{    id="/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Compute/virtualMachines/<VM_NAME>";
    ports=(@{
       number=22;
       endTimeUtc=[DateTime]::UtcNow.AddMinutes(10);
       allowedSourceAddressPrefix=@("*")})})
$JitPolicyArr=@($JitPolicyVm1)
Start-AzJitNetworkAccessPolicy -ResourceId "/subscriptions/SUBSCRIPTIONID/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Security/locations/<LOCATION>/jitNetworkAccessPolicies/default" -VirtualMachine $JitPolicyArr
Cet exemple ouvre l'accès au port 22 à la machine virtuelle à partir de n'importe quelle adresse pendant 10 minutes à partir du moment où cette tâche est exécutée.

Cela permet d'ouvrir dynamiquement l'accès uniquement pendant la phase de construction ou de déploiement, ce qui offre un niveau de sécurité élevé.