Azure

Provisionner votre Azure Bastion automatiquement avec Azure Automation

Provisionnement automatique de Azure Bastion avec Azure Automation

Rappel du principe d’Azure Bastion

Aujourd’hui je vous propose d’utiliser Azure Automation afin de provisionner votre Bastion dans le Cloud mais uniquement lorsque vous en avez besoin. Si vous suivez un peu le blog, vous savez probablement qu’Azure Bastion est un service que j’apprécie particulièrement. Ce composant permet d’accéder de manière sécurisée en RDP ou en SSH à une machine Windows ou Linux dans votre Cloud Microsoft.

L’intérêt de cette solution est qu’elle permet de se connecter à vos serveurs sans avoir besoin « d’ouvrir les tuyaux » sur Internet de manière publique puisque l’accès RDP/SSH s’effectue directement depuis le portail web d’Azure avec un compte Azure AD approuver.

C’est donc une rapproche fortement recommandée si vous souhaitez respecter la méthodologie de sécurité que l’on appelle Zero Trust. Le problème, c’est qu’Azure Bastion est un composant qui reste assez onéreux si vous envisagez de le laisser actif de manière permanente (jour, nuit, weekend, etc.) – je vous propose donc de voir comment automatiser sa création et sa suppression vu qu’il ne peut pas être interrompu / désactivé temporairement. 🙂

Avant d’aller plus loin je vous encourage à consulter les 2 liens ci-dessous :

Etape 0 – Prérequis

Pour mettre en place mon scénario, voici ce que j’ai créé dans un Resource Group de test. Juste une machine virtuelle avec tout ce qui est nécessaire en termes de réseau.

Je vous rappelle les points clés :

  • La VM dispose d’un NSG affecté à sa carte réseau qui permet d’autoriser la connexion sur le port 22/TCP (SSH) – nous aurions pu tester sur un VM Windows, j’ai choisi une Linux.
  • Notez bien que la VM ne dispose de pas de sa propre adresse IP publique. Nous n’en avons pas besoin car nous ne souhaitons pas que la VM soit accessible d’un point de vue public sur Internet. Nous utiliserons notre Azure Bastion pour l’administrer. 🙂
Une VM de test dans Azure

Autre prérequis nécessaire, si nous voulons pouvoir créer et supprimer notre Azure Bastion sans avoir à gérer les dépendances il faut que nous créions notre subnet AzureBastionSubnet sur votre VNET. Pour rappel, vous devez respecter la convention de nommage pour ce nom et il doit s’agit d’un /26 au minimum. C’est ce que j’ai fait sur le VNET qui est utilisé par ma VM.

Création du Subnet nécessaire pour Azure Bastion

Le prix de ce Subnet est anecdotique dans notre facture nous pouvons donc le créer dès à présent. 😉

Etape 1 – Création de notre objet Azure Automation

L’objectif de notre scénario c’est de pouvoir éviter que notre Bastion fonctionne de manière permanente et que nous puissions le supprimer et le créer en fonction de notre besoin (le matin création et suppression en fin de journée par exemple).

Dans votre portail Azure, cherchez maintenant un objet Azure Automation. C’est cet objet que nous allons utiliser pour générer des automatismes dans Azure. Et point intéressant, ce composant ne coûte vraiment pas grand-chose. Nous allons utiliser l’option « Runbooks » afin de créer 2 scripts PowerShell : un exécuté le matin pour créer le Bastion et un le soir pour supprimer le Bastion. De cette façon, nous allons économiser les frais de fonctionnement du Bastion pour la nuit. 👍

"Please enable appropriate RBAC permissions to the system identity of this automation account. Otherwise, the runbook may fail..."

try
{
    "Logging in to Azure..."
    Connect-AzAccount -Identity
}
catch {
    Write-Error -Message $_.Exception
    throw $_.Exception
}

Write-Output "Connection successful"
Write-Output "Trying to create the Azure Bastion..."

try
{
    Select-AzSubscription -SubscriptionId "b23edba1-your-subscribtion-id"
    New-AzBastion -ResourceGroupName "Test" -Name "ThibaultBastion2" `
    -PublicIpAddressRgName "Test" -PublicIpAddressName "VMLinuxTest-vnet-ip" `
    -VirtualNetworkRgName "Test" -VirtualNetworkName "VMLinuxTest-vnet" `
    -Sku "Basic"
}
catch {
    Write-Error -Message $_.Exception
    throw $_.Exception
}

J’ai gardé le modèle de script qui est mis à disposition par défaut par Microsoft. Vous pouvez bien entendu changer et adapter le nom des composants en fonction de votre scénario. Même chose, nous aurions pu utiliser des variables – j’ai été au plus rapide pour notre exemple. C’est la ligne qui contient New-AzBastion qui va permettre de créer notre Azure Bastion.

Lorsque vous êtes prêt, vous pouvez tenter d’exécuter manuellement votre script pour vérifier que l’opération se déroule correctement. Vous pourrez voir dans les Logs et dans votre Resource Group qu’un nouveau Bastion a été créé avec succès.

Confirmation que notre Bastion a bien été créé

Etape 2 – Suppression du Bastion

Pour réaliser la suppression de notre Bastion nous allons maintenant utiliser le même script que précédemment mais remplacer la ligne commençant par New-AzBastion par Remove-AzBastion.

"Please enable appropriate RBAC permissions to the system identity of this automation account. Otherwise, the runbook may fail..."

try
{
    "Logging in to Azure..."
    Connect-AzAccount -Identity
}
catch {
    Write-Error -Message $_.Exception
    throw $_.Exception
}

Write-Output "Connection successful"
Write-Output "Trying to create the Azure Bastion..."

try
{
    Select-AzSubscription -SubscriptionId "b23edba1-your-subscribtion-id"
    Remove-AzBastion -ResourceGroupName "Test" -Name "ThibaultBastion2" -Force
}

catch {
    Write-Error -Message $_.Exception
    throw $_.Exception
}

Exécutez le script pour vérifier que cela fonctionne et que votre objet Bastion va bien finir par disparaître.

N’oubliez pas que la création et la suppression de votre objet Azure Bastion peut prendre jusqu’à 10 minutes. Il est donc normal de devoir attendre durant les phases d’exécution de vos 2 scripts. Et cette information est clairement indiqué dans la documentation officielle de Microsoft.

Etape 3 – Automatisation de nos scripts

Nous avons pu vérifier que nos 2 scripts PowerShell fonctionnaient correctement et que l’objet Bastion était bien supprimé de notre Resource Group. 🙂

Confirmation de la suppression en cours de Azure Bastion

Il nous reste maintenant à automatiser nos 2 scripts. Imaginons que vos équipes commencent le matin à 9h vous pouvez planifier le premier script à 8h30. Si vous terminez à 17h et bien pareil vous pouvez supprimer l’objet Bastion à 17h30.

Pour cette partie, je vous encourage à consulter mon ancien article car je l’ai déjà expliqué.

Sur chacun de vos scripts, vous allez devoir créer un Schedule.

Planification de l’exécution et de la récurrence de votre script
Mais que faire si vous en avez besoin immédiatement ? Et bien vous pouvez bien entendu exécuter le script manuellement pour forcer la création ou la suppression de votre Bastion. Et si vous souhaitez aller plus vite – vous pouvez toujours revenir à l’ancienne méthode et affecter une IP publique et ouvrir les ports sur votre VM cible.
Gardez bien en tête que derrière cette méthode l’objectif c’est de pouvoir utiliser notre Bastion – 1) à moindre coût et surtout 2) en respectant la norme du Zero Trust puisque vous n’ouvrez pas votre port d’administration sur Internet !

Cette gestion de l’accès à nos VM peut être rapprochée de l’option Just-In-Time VM Access qui est disponible dans Microsoft Defender for Cloud. Je vous avais d’ailleurs déjà parlé de cette option dans l’article suivant. La différence principale entre les 2 méthodes est d’ailleurs très intéressante :

  • Avec Just-In-Time VM Access, il y une véritable ouverture de flux qui est réalisée. Le port 22/SSH ou 3389/RDP est en effet ouvert pour une durée limitée dans le temps au niveau de votre VNet/NSG.
  • En revanche, avec la méthode Azure Bastion, il n’y a pas d’ouverture de flux qui soit réalisée au niveau de votre VM, NSG ou VNet. Vous accédez à la VM via déport d’affichage graphique depuis le portail web Azure. Cette seconde méthode est donc plus intéressante d’un point de vue sécurité si l’on se conforme au modèle Zero Trust. 🛡️
Share
Published by
thibault

Recent Posts

La version finale de Windows Server 2025 est disponible

La version finale de Windows Server 2025 est disponible Windows Server 2025 est désormais disponible…

2 heures ago

L’IA, le nouveau copilote des développeurs : une productivité démultipliée

Locaux Google France à Paris Introduction L'intelligence artificielle révolutionne tous les secteurs, et le développement…

1 jour ago

Microsoft va renforcer la sécurité dans Entra ID en rendant le MFA obligatoire

Microsoft va renforcer la sécurité dans Entra ID en rendant le MFA obligatoire Renforcement de…

2 jours ago

Teams fait peau neuve : conversations et équipes fusionnent pour une expérience simplifiée

Teams fait peau neuve : conversations et équipes fusionnent pour une expérience simplifiée 31 octobre…

3 jours ago

La synchronisation des Passkeys par Google, la fin des mots de passe ?

La synchronisation des Passkeys par Google, vers la fin des mots de passe ? Google…

1 semaine ago

Cloud Sovereignty: A crucial issue for businesses

cloud sovereignty Why Cloud Sovereignty is important? In today's increasingly digital world, cloud sovereignty has…

1 semaine ago