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 :
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 :
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.
Le prix de ce Subnet est anecdotique dans notre facture nous pouvons donc le créer dès à présent. 😉
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.
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.
Nous avons pu vérifier que nos 2 scripts PowerShell fonctionnaient correctement et que l’objet Bastion était bien supprimé de notre Resource Group. 🙂
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.
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 :
La version finale de Windows Server 2025 est disponible Windows Server 2025 est désormais disponible…
Locaux Google France à Paris Introduction L'intelligence artificielle révolutionne tous les secteurs, et le développement…
Microsoft va renforcer la sécurité dans Entra ID en rendant le MFA obligatoire Renforcement de…
Teams fait peau neuve : conversations et équipes fusionnent pour une expérience simplifiée 31 octobre…
La synchronisation des Passkeys par Google, vers la fin des mots de passe ? Google…
cloud sovereignty Why Cloud Sovereignty is important? In today's increasingly digital world, cloud sovereignty has…