Archives de catégorie : BluePrint

Découverte d’Azure BluePrint

Lorsqu’on consulte la documentation Azure sur le thème de la gouvernance, on constate que des services comme Azure BluePrint, Management Group et Azure Policies constituent un socle pour mettre en place nos infrastructures Azure en segmentant les périmètres en de multiples souscriptions. Mettre en œuvre ce type d’organisation implique d’industrialiser la mise en place des multiples souscriptions. C’est pour cela que la fonctionnalité BluePrint a été conçue.

Cette isolation implique de mettre à disposition des ressources partagées entre les multiples souscriptions. C’est le modèle Hub spoke network tologoly with shared services. Appliqué au niveau réseau, cela veut dire qu’on devra mettre en place des accords de Peerings entre un VNET dit « Hub » et les VNET dépendants des souscriptions. Selon la documentation Microsoft, cela se présente ainsi :

clip_image002

Dans ce billet, nous allons nous focaliser sur la mise en œuvre de l’interconnexion réseau en utilisant les Peerings ainsi qu’en s’assurant que tout le trafic sortant de ces nouveaux VNET soient automatiquement redirigés vers une instance du service Azure Firewall localisé dans notre souscription Hub. L’ensemble de ces opérations sera réalisé avec BluePrint.

Nous disposons d’un Virtual Network nommé « CoreNetwork » qui est localisé dans le Resource Group du même nom. Ce Groupe de ressource dépend de la souscription « Hub ». L’Azure BluePrint que nous allons mettre en œuvre va :

  • Créer le groupe de ressources « LocalNetwork » dans la souscription « Spoke »
  • Créer une instance de User-Defined Route Table pour envoyer le traffc sortant vers notre instance centrale d’Azure Firewall
  • Créer une instance de Virtual Network avec deux sous-réseaux pour lesquels la User-Defined Route aura été associée
  • Mettre en place un Peering entre ce nouveau Virtual Network et le « Core Network »
  • Verrouiller l’ensemble des ressources déployées

 

Etape n°1 : Le contexte avec Managed Identity

Le déploiement de ressources implique un contexte et donc une identité. Pour déployer nos ressources, nous allons utiliser une Managed Identity et plus particulièrement une identité de type « User-Assigned ». Nous allons commencer par créer cette identité qui sera ensuite utilisée lors de l’assignation de notre BluePrint. A ce jour, la fonctionnalité est encore en preview. C’est certainement pour cette raison que c’est encore un module AZ à part à installer avec la commande ci-dessous : install-module -Name Az.ManagedServiceIdentity

clip_image004

 

Ne nous reste plus qu’à mettre en œuvre notre User-Managed Idenity. C’est un objet au sens Azure, nous allons le créer dans la souscription « Hub » et plus particulièrement dans le groupe de ressources « CoreNetwork » à l’aide de la commande PowerShell suivante : New-AzUserAssignedIdentity -ResourceGroupName CoreNetwork -Name MIPeering

clip_image006

 

Notre identité devra disposer des permissions suivantes :

  • Souscription Hub : Network Contributor
  • Souscription Cible : Owner (car doit mettre en place des objets et assigner des permissions)

 

Nous allons donc commencer par nous positionner sur la souscription Hub

Set-AzContext -Subscriptionid <SubscriptionID for Hub subscription>

$identity = get-AzUserAssignedIdentity -ResourceGroupName CoreNetwork -name MIPeering

New-AzRoleAssignment -ResourceGroupName CoreNetwork -RoleDefinitionName « Network Contributor » -ObjectID $identity.PrincipalID

clip_image008

 

Puis nous allons nous repositionner sur la souscription « Hub » pour positionner les permissions :

Set-AzContext -Subscriptionid <SubscriptionID for Hub subscription>

New-AzRoleAssignment -RoleDefinitionName « Owner » -ObjectID $identity.PrincipalID -Scope « /subscriptions/$((get-azcontext).subscription.id) »

clip_image010

 

Etape n°2 : Manage-AzureRMBluePrint

A ce jour, Azure BluePrint est encore en Preview. Afin de palier à certains manques, la communauté a développé Manage-AzureRmBluePrint. Ce script permet d’importer/exporter des définitions de BluePrints entre différents environnements. Que ce soit dans CloudShell ou localement, nous devons commencer par déclarer la PSGallery de Microsoft comme une source d’installation sure à l’aide de la commande suivante :

Set-PSRepository -Name PSGallery -InstallationPolicy Trusted

clip_image012

 

Ne reste plus qu’à installer le script à l’aide de la commande suivante :

Install-script -Name Manage-AzureRmBluePrint

clip_image013

 

Maintenant, nous pouvons utiliser le script Manage-AzureRmBluePrint pour importer la définition qui a été mise à disposition ici. Avant de la rendre disponible sur Github, j’ai préparé la définition de ma Blueprint sur une souscription dédiée. Une fois au point, j’ai utilisé la fonctionnalité d’export de ManageAzurermBluePrint comme illustré ci-dessous :

$exportdir = « c:\temp\ »

manage-azurermblueprint -Mode Export -ModuleMode Az -ManagementGroupID « <Management Group> » -SubscriptionId « <SubscriptionID> » -BlueprintName SpokeCoreNetwork -ExportDir $ExportDir

clip_image015

 

Nous reviendrons sur le contenu de la BluePrint plus tard. Une fois uploadé sur Github, c’est prêt à consommer dans les autres souscriptions. Ce qui est bien c’est qu’on a GIT déjà présent dans CloudShell, pratique pour récupérer la dernière version de la politique mise à disposition. Pour faciliter les choses, le contenu est disponible à l’URL suivante : https://github.com/Benoitsautierecellenza/DemoBluePrint

clip_image017

 

Il ne nous reste plus qu’à importer notre BluePrint avec les commandes ci-dessous :

$SourceDirectory = « /home/by/DemoBluePrint/SpokeCoreNetwork »

$DestinationSubscription = « <Destination subscriptionID> »

$Managementgroup = « <Destination Management Group> »

Manage-AzureRMBlueprint.ps1 -Mode Import -Module Az -ImportDir $SourceDirectory -SubscriptionID $DestinationSubscription -ManagementGroup $Managementgroup -Force

clip_image019

 

Etape n°3 : Publication de notre Artefact BluePrint

Notre définition de BluePrint est maintenant disponible (dans le Management regroupant toutes mes souscriptions) sous forme de Draft.

clip_image021

 

Nous allons la publier en version 1.0. La notion de versionning deviendra importante dans BluePrint quand on procédera à des mises à jour.

clip_image023

 

Notre BluePrint est maintenant prête à l’emploi. Nous allons donc pouvoir l’assigner.

clip_image025

 

Etape n°4 : Assignation de Blueprint

Prochaine étape, c’est d’assigner ce BluePrint à une souscription dite « Spoke/Satellite » (Dépendant du même Tenant Azure AD). L’assignation sera réalisée :

  • Au niveau de la souscription dite « Spoke »
  • Dans une région azure donnée, en utilisant notre version précédemment publie de BluePrint
  • Le déploiement sera réalisé en utilisant notre User-Managed Identity

 

Une fois le déploiement terminé, les ressources seront lockées de manière à ce que même le owner la souscription dans laquelle on déploie ne puisse pas revoir la configuration des ressources

clip_image027

 

Le contenu du BluePrint est assez basique. Il créé un groupe de ressources et y déploie un Template ARM pour les ressources réseau. A ce jour, BluePrint prend en charge le déploiement des artefacts suivants :

  • Création de groupe de ressources
  • Assignation de rôles
  • Assignation de Policy Azure
  • Déploiement de templates ARM

 

Ce que nous voyons dans l’illustration ci-dessous, ce sont les paramètres de mon template ARM. On peut fournir les paramètres au niveau du BluePrint (donc commun à toutes les futures assignations) ou spécifique à chaque assignation, ce qui est mon cas. Le template ARM est disponible ici.

clip_image029

 

Si le déploiement se déroule normalement, on doit avoir le résultat ci-dessous :

clip_image031

 

A noter qu’il est possible de réaliser l’assignation en PowerShell avec le module AZ adéquat. Quand on voit sa version, on comprend qu’il est tout neuf et que c’est certainement pour cela qu’il n’est pas référencé en tant que dépendance AZ.

Install-Module -Name Az.Blueprint

Get-Command -Module Az.Blueprint

clip_image033

 

En termes de ressources, on doit avoir :

  • Un groupe de ressources nommé Spoke01Network
  • Un objet Route table pour mettre en place le routage des flux sortants vers une instance d’Azure Firewall situé dans notre souscription Hub
  • Un objet VNET comprenant deux sous-réseaux pour lesquels notre route table a été associée

clip_image035

 

Quand on creuse un peu plus la configuration, on retrouve bien les éléments configurés :

$vnet = Get-AzVirtualNetwork -ResourceGroupName Spoke01Network

$vnet | select-Object virtualNetworkPeerings -Expand virtualnetworkpeerings

$vnet.subnets | select name, routetable

clip_image037

 

Conclusion

BluePrint est certes encore en Preview mais il est déjà utilisable pour industrialiser la mise en place des socles infrastructure ainsi que pour la mise en place des Azure Policies. On attend le support de nouveaux artefacts prochainement. BluePrint nous offre la possibilité de travailler en mode « macro-management » à l’opposé des Resource Groups (Micro-Management).

 

BenoitS – Simple and Secure by design but business compliant