Dans cet article, nous allons voir comment dans un environnement hybride joindre un compte de stockage Azure dans un Active Directory puis donner accès aux ressources contenues dans ce compte de stockage à nos utilisateurs.
Souvent utilisé dans les contextes VDI pour la gestion des profiles fslogix ou pour remplacer les serveurs de fichiers, les comptes de stockage Azure permettent de créer un espace de stockage SMB puis de créer des partages au même titre qu’un serveur de fichier peut le faire. Tout en s’affranchissant de la gestion de l’OS sous accent et de la gestion de la HA de ce(s) mêmes serveur(s).
Dans les environnements hybrides, il est souvent nécessaire de joindre ces comptes de stockage dans les domaines Active Directory afin d’octroyer aux utilisateurs AD l’accéder aux ressources et positionner les bonnes ACL.
Sommaire
Présentation de l'environnement
Notre maquette sera composée des éléments suivants :
- DC001 et DC002 : Contrôleur de domaine “teddy.lab”.
- DNS01 : Serveur DNS hébergé sur Azure permettant la résolution des zones privées Azure.
- AADC01 : Serveur Azure AD Connect pour la synchronisation des comptes ADDS dans AAD.
- CLT01 et CLT02 : Poste de travail des utilisateurs joint dans le domaine “teddy.lab”.
- wefileserver001 : compte de stockage Azure.
- VLN / LNG : VPN Site-A-Site entre Azure et On-Premise.
Les postes de travail accèderont aux données sur le compte de stockage “wefileserver001” via SMB au travers d’un “Private EndPoint”. D’où la présence de DNS01. Pour plus d’information sur la mise en place de ce composant, j’ai déjà traité ce sujet dans l’article ci-dessous :
L’installation d’Azure AD Connect a déjà été traitée de nombreuses fois :
Du côté Active Directory, les objets suivants sont synchronisés vers Azure AD :
- Utilisateurs :
- Homer SIMPSON : membre du groupe “G_RW_wefileserver001_data”.
- Bart SIMPSON : membre du groupe “G_RO_wefileserver001_data”.
- Lisa SIMPSON : membre du groupe “G_Admins_wefileserver001_data”.
- Groupes :
- G_Admins_wefileserver001_data : les utilisateurs de ce groupe auront le contrôle total sur le compte de stockage.
- G_RO_wefileserver001_data : les utilisateurs de ce groupe auront lecture seule sur le compte de stockage.
- G_RW_wefileserver001_data : les utilisateurs de ce groupe auront lecture et écriture sur le compte de stockage.
Configuration du compte de stockage
Le compte de stockage utilisé “wefileserver001” est un compte de type “StorageV2” traditionnel.
Réseau et Private EndPoint /DNS
Ce compte de stockage est connecté sur le réseau de l’entreprise à l’aide d’un “Private EndPoint” de type “file” et les accès publics sont désactivés.
Pour créer le “Private EndPoint” qui permètera l’accès privé via SMB aux données, se rendre dans la section :
- Networking > Private endpoint connections > + Private endpoint.
Dans le menu “Basic”, renseigner les informations de nommage autour du nouveau “Private EndPoint” :
Dans le menu “Resource”, séléctionner “file” dans le champ “Target sub-resource”. Ce choix corespond au type de service que va adresser le nouveau “Private EndPoint”, a savoir “file” pour les partage de fichiers SMB.
Dans le menu “Virtual Network”, renseigner le vNet /Sunet où le nouveau “Private EndPoint” devra être connecté.
Notons au passage qu’il est possible depuis quelques mois d’appliique une ASG aux “Private EndPoint”.
Dans le menu “DNS”, renseigner la “Private DNS Zone” où doit s’enregistrer le “private EndPoint”.
Cette étape n’est pas obligatoire, mais vivement recomender. Il est toujours plus simple d’utiliser un enregistrement DNS plutôt d’une adresse IP pour intéroger une uen ressource. La mise en place de tel zone DNS est traité dans le article :
La zone DNS à mettre en place est “privatelink.file.core.windows.net”.
Puis appliquer vos tags si besoin et lancer la création du “Private EndPoint”.
Après quelques secondes, le nouveau “private EndPoint” est créé.
Joindre le compte de stockage dans ADDS
L’étape le plus “compliqué” de ce type d’opération. Dans le contexte si, nous allons joindre notre compte de stockage “wefileserver001” dans notre domaine Active Directory. Le but de cette opération est de créer un objet de type “computer” dans Active Directory comme si notre compte de stockage était un serveur de fichier traditionnel. Cette opération nous permet par la suite d’accéder au système de fichier via SMB à l’aide de l’authentification Active Directory.
Pour commencer se rendre dans la section “File shares” du compte de stockage et cliquer sur “Active Directory”.
Cette option à déjà changée de menu plusieurs fois. En espèrant que celle-ci ne se déplace plus.
Aujourd’hui, nous utilisons ADDS. Séléctionner Active Directory. Si vous utiliser AADDS, l’intégration est nétement plus simple 😉
Nous sommes redirigés vers la documentation Microsoft qui nous guide étape par étape. L’étape qui va rééllement nous intéresser est l’étape 1. Je vous invite donc à cliquer sur le lien et à lire l’article.
Cet article nous fournit la plupart des commandes PowerShell à exécuter depuis une machine jointe dans le domaine AD.
Nous allons depuis une machine jointe dans le domaine Active Directory, créer le compte “ordinateur” correspondant à notre compte de stockage. À l’aide de la commande PowerShell “Join-AzStorageAccount” du module “AzFileHybrid”.
Commençons par les prérequis, en plus de ceux donnés par Microsoft :
Installer sur la machine les modules PowerShell “AZ”.
Install-Module -name az
Puis téléchargé le module “AzFileHybrid” depuis le lien fournis par Microsoft :
Une fois récupérer, extraire le contenu du fichier “.zip” et lancer les commande :
# Change the execution policy to unblock importing AzFilesHybrid.psm1 module
# Navigate to where AzFilesHybrid is unzipped and stored and run to copy the files into your path
.\CopyToPSPath.ps1
# Import AzFilesHybrid module
Import-Module -Name AzFilesHybrid
Ou lancer le script ci-dessous :
# Change the execution policy to unblock importing AzFilesHybrid.psm1 module
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
$SrcFolder = "c:\sources"
$OutputFile = "AzFilesHybrid.zip"
$SrcURL = "https://github.com/Azure-Samples/azure-files-samples/releases/download/v0.2.4/AzFilesHybrid.zip"
if($(Test-Path $SrcFolder) -eq $false){
mkdir $SrcFolder
Set-Location $SrcFolder
}else{Set-Location $SrcFolder}
# Download the package
function download() {$ProgressPreference="SilentlyContinue"; Invoke-WebRequest -Uri $SrcURL -OutFile $OutputFile}
download
Expand-Archive ".\$OutputFile" -Force
Start-Sleep 2
Set-Location ".\AzFilesHybrid"
# Navigate to where AzFilesHybrid is unzipped and stored and run to copy the files into your path
.\CopyToPSPath.ps1
# Import AzFilesHybrid module
Import-Module -Name AzFilesHybrid
Get-Module -name AzFilesHybrid
Vous l’aurez compris, le but du jeu est d’installer et d’importer le module “AzFilesHybrid”.
Maintenant, nous allons pouvoir passer à la seconde partie du script, à vous de renseigner les informations demandées par rapport à votre environnement.
Utilisez un compte AAD avec les droits “Contributor” sur le compte de stockage.
S’il vous plait, nous sommes en 2022, arrêtez le “RC4” et passez en “AES256” seulement. Les 2k3 et XP sont d’un autre temps !!!
Connect-AzAccount
$SubscriptionId = "xxxxxxxxxxxxxxxxxxxxx"
$ResourceGroupName = "bng_cloud"
$StorageAccountName = "wefileserver001"
$SamAccountName = "wefileserver001$"
$DomainAccountType = "ComputerAccount"
$OuDistinguishedName = "OU=SERVERS,OU=TEDDY.LAB,DC=teddy,DC=lab"
$EncryptionType = "AES256"
Select-AzSubscription -SubscriptionId $SubscriptionId
Join-AzStorageAccount `
-ResourceGroupName $ResourceGroupName `
-StorageAccountName $StorageAccountName `
-SamAccountName $SamAccountName `
-DomainAccountType $DomainAccountType `
-OrganizationalUnitDistinguishedName $OuDistinguishedName `
-EncryptionType $EncryptionType
Update-AzStorageAccountAuthForAES256 -ResourceGroupName $ResourceGroupName -StorageAccountName $StorageAccountName
Voilà, le compte de stockage est joint dans notre domaine Active Directory. Dans le portail Azure, nous pouvons voir que la partie Active Directory est maintenant configurée et du côté de l’AD, le compte de type “computer” a été créé dans l’OU.
C’est gagné, il ne nous reste plus qu’à créer nos partages côté compte de stockage, puis configurer les ACL sur ceux-ci.
Création du partage de fichier
Pour créer un nouveau partage sur notre compte de stockage, se rendre dans la section “File shares” puis “+ File share” :
Nommer le nouveau partage et sélectionner son “tier”. Le tier “Hot” convient très bien pour du partage de fichier standard. Pour les profiles type “fslogix”, privilégier le tier “Transaction optimized”. La joie d’apprendre par cœur le niveau de performance de chaque tier des comptes de stockage ^^
Notre compte de stockage est joint dans le domaine Active Directory, un nouveau partage “data” a été créé. Nous allons dans la partie suivante configurer les ACL afin que nos utilisateurs puissent accéder à ce partage.
Role RBAC pour SMB
Pour les partage de fichier de type “SMB”, il existe trois rôles RBAC prédéfinis :
- Storage File Data SMB Share Reader –> analogie NTFS : Read Only.
- Storage File Data SMB Share Contributor –> analogie NTFS : Read Write.
- Storage File Data SMB Share Elevated Contributor –> analogie NTFS : Full Control.
Et deux niveau où positionner ces droits :
- Global au compte de stockage.
Ou
- Sur un partage spécifique.
Il ne s’agit que d’un exemple de positionnement des ACL, vous pouvez faire comme bon vous semble.
L’important à comprendre est que si vous positionner un rôle RBAC sur un partage, l’utilisateur quelque soit sont rôle, accèdera uniquement au partage sur lequel le rôle a été positionné. Alors que si le rôle est positionné sur le compte de stockage, l’utilisateur aura accès à l’ensemble des partages du compte.
Accès aux données
Init des ACL
Étrangement, le positionnement des ACL de premier niveau n’est pas réalisé avec une authentification Active Directory. Il conviendra de monter le partage au travers d’un lecteur réseau en utilisant une la clef du compte de stockage depuis une machine jointe au domaine Active Directory.
Depuis le compte de stockage, se rendre sur le partage et cliquer sur “Connect”.
Le portail Azure vous fournis un script préconstruit pour monter le partage sous la forme d’un lecteur réseau.
Spécifier la lettre du lecteur que vous souhaitez utiliser, séléctionner “storage accounr key” et copier le script.
Exécuter le script afin de monter le partage sur votre machine d’administration.
Une fois le lecteur monté, effectuer un clic droit à la racine du lecteur > Properties > Security > Edit …
A vous d’ajouter les groupes que vous avez préalablement configuré au niveau RBAC en tant qu’ACL NTFS. Avec les bons droits.
Dans notre cas les groupes AD suivants :
- G_Admins_wefileserver001_data
- Rôle RBAC : Storage File Data SMB Share Elevated Contributor
- ACL NTFS : Full control …
- G_RW_wefileserver001_data
- Rôle RBAC : Storage File Data SMB Share Contributor
- ACL NTFS : Modify …
- G_RO_wefileserver001_data
- Rôle RBAC : Storage File Data SMB Share Reader
- ACL NTFS : Read …
Une fois les ACL de base positionné à la racine et au besoin sur les sous-niveau de l’arboressance, l’héritage coupé, vous pouvez démonter le lecteur.
Cette configuration devra être réalisée pour chaque partage de votre environnement.
Il s’agit de la seule méthode pour accèder aux SID provenant d’Active Directory, si vous utilisez l’authentification Active Directory, vous ne serez pas en mesure de parcourir l’annuaire.
Depuis le portail Azure, je peux accèder (à condition d’avoir les bon rôle RBAC <– contributor) aux données contenues dans les partages. Je peux ainsi les consulter mais aussi en importer.
Du coté utilisateurs
Du coté accès utilisateur, rien de plus simple, depuis le compte de stockage, se rendre sur le partage et cliquer sur “Connect”.
Cette foie plutôt que d’utiliser la clef du compte de stockage, séléctionner “Active Directory” et copier le script de montage de lecteur à exécuter sur le poste de l’utilisateur joint dans le domaine AD.
Il est important de noté, c’est que pour accèder au partage, le chemin UNC de celui-ci est :
- “\\wefileserver001.file.core.windows.net\data”
Soit :
- le FQDN du compte de stockage + le nom du partage.
Vu que je suis dans la LAN de mon entreprise (et que le DNS est bien configuré), je résous le FQDN du compte de stockage “wefileserver001.file.core.windows.net” par son IP privé (Private EndPoint).
Attention, SMBv3 !!! Les machines hors support ne fonctionnent pas très bien avec cette version.
Depuis la machine CLT02, je me connecte avec le compte “l.simpson@teddy.lab” qui est membre du groupe AD “G_Admins_wefileserver001_data”. Groupe qui a pour rôle RBAC “Storage File Data SMB Share Elevated Contributor” positionné à la racine du compte de stockage.
Dans l’explorateur Windows je tape le chemin UNC :
- \\wefileserver001.file.core.windows.net\data
Je peux accèder au contenu du compte de stockage. Et peux ajouter des nouveaux fichiers dans celui-ci. Lisa a surtout la pacassité de modifier les ACL existantes notament désactiver l’héritage des objets et ajouter supprimer des permissions.
Alors que le compte “b.simpson@teddy.lab” qui est membre du groupe “G_RO_wefileserver001_data”. Groupe qui a pour rôle RBAC “Storage File Data SMB Share Reader” positionné sur le partage.
Peut depuis l’explorateur Windows accèder aux données contenues dans le partage, mais ni les modifier ni en ajouter /supprimer.
Et pour finir, le compte “h.simpson@teddy.lab” qui est membre du groupe “G_RW_wefileserver001_data”. Groupe qui a pour rôle RBAC “Storage File Data SMB Share Contributor” positionné sur le partage.
Peut depuis l’explorateur Windows accèder aux données contenues dans le partage, les modifier, mais ne peut éditer les ACL ou encore désactiver l’héritage.
Conclusion
Donner l’accès à un partage SMB d’un compte de stockage n’est pas la chose la plus simple à réaliser. Il convient d’avoir une hybridation convenablement configurée avant de réaliser ce type d’action.
De plus, jongler entre les rôles RBAC et les ACL NTFS nécessite un peu de recule.
Une fois que cette opération a été réalisée en environnement de test et que la mécanique a été assimilée, cela devient assez simple. Si vous avez la possibilité d’utiliser AADDS au lieu d’ADDS dans vos environnements Azure, ce type d’intégration est nettement plus simple. Cependant AADDS apporte d’autres contraintes.