Aller au contenu

Configuration et utilisation d'un stockage Azure

Contexte

Nous avons besoin d'un stockage cloud afin de stocker temporairement des données. Azure Storage est une solution possible. Voici les étapes nécessaires pour configurer et mettre à disposition ce stockage.

Configurations initiales

Création d'un compte de stockage Azure

La première étape consiste à créer un compte de stockage Azure. Cela se réalise depuis cette page.

Microsoft propose plusieurs possibilités quant au lieu où seront stockées les données, la redondance du stockage et bien d'autres paramètres. Nous avons opté pour les options suivantes :

  • Lieu de stockage : Centre de la France
  • Performances : Standard
  • Réplication : LRS (Stockage localement redondant)
  • Type de compte : Storage V2

Authentification Active Directory pour l'accès au stockage avec PowerShell AzFilesHybrid

Il est nécessaire de créer un connecteur pour permettre aux services de domaine Active Directory (AD DS) de s'identifier auprès du compte de stockage Azure. Le mécanisme proposé par Microsoft pour permettre cette connexion est de créer un objet AD de type ordinateur pour représenter le stockage Azure dans notre AD local. Ainsi, nous pourrons utiliser les informations d’identification Active Directory local pour l’authentification auprès des partages de fichiers Azure. Conformément aux préconisations de Microsoft, nous utiliserons AzFilesHybrid.

Mot de passe des ordinateurs

Microsoft indique sur cette page que les objets AD de type ordinateur sont eux aussi susceptibles d'avoir des mots de passe périmant tous les 30 jours.

Pré-requis

Source

  • Utiliser un PC déjà joint au domaine
  • Présence sur ce PC de .NET Framework 4.7.2 minimum
  • PowerShell 5.1 minimum
  • Côté Active Directory local, exécuter PowerShell avec un compte Active Directory disposant des droits pour créer un ordinateur dans AD
  • Côté Azure, ce même utilisateur doit être au minimum lecteur sur le groupe de ressource dans lequel se trouve le compte de stockage cible et au moins contributeur sur le compte de stockage à joindre à AD.
  • Présence des modules AzurePowerShell et Az.storage.
  • Présence du module Active Directory PowerShell
  • Télécharger et décompresser le module Powershell AzFilesHybrid sur ce PC.

Création de l'ordinateur de jonction dans Active Directory

Le script PowerShell suivant est fourni par Microsoft sur cette page va nous créer l'"ordinateur" dans AD.

Modifier les variables

Adapter les variables avant d'exécuter le script ! Le script est bien commenté et propose plusieurs options intéressantes.

# Change the execution policy to unblock importing AzFilesHybrid.psm1 module
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser

# 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 -Verbose

# Login to Azure using a credential that has either storage account owner or contributor Azure role 
# assignment. If you are logging into an Azure environment other than Public (ex. AzureUSGovernment) 
# you will need to specify that.
# See https://learn.microsoft.com/azure/azure-government/documentation-government-get-started-connect-with-ps
# for more information.
Connect-AzAccount

# Define parameters
# $StorageAccountName is the name of an existing storage account that you want to join to AD
# $SamAccountName is the name of the to-be-created AD object, which is used by AD as the logon name 
# for the object. It must be 20 characters or less and has certain character restrictions.
# Make sure that you provide the SamAccountName without the trailing '$' sign.
# See https://learn.microsoft.com/windows/win32/adschema/a-samaccountname for more information.
$SubscriptionId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
$ResourceGroupName = "My-Ressource-Group-Name"
$StorageAccountName = "My-Storage-Group-Name"
$SamAccountName = "Name-of-object-to-create"
$DomainAccountType = "ComputerAccount" # Default is set as ComputerAccount
# If you don't provide the OU name as an input parameter, the AD identity that represents the 
# storage account is created under the root directory.
$OuDistinguishedName = "OU=SERVICE_ACCOUNTS,OU=Utilisateurs,DC=in,DC=domain,DC=fr"
# Encryption method is AES-256 Kerberos.

# Select the target subscription for the current session
Select-AzSubscription -SubscriptionId $SubscriptionId 

# Register the target storage account with your active directory environment under the target OU 
# (for example: specify the OU with Name as "UserAccounts" or DistinguishedName as 
# "OU=UserAccounts,DC=CONTOSO,DC=COM"). You can use this PowerShell cmdlet: Get-ADOrganizationalUnit 
# to find the Name and DistinguishedName of your target OU. If you are using the OU Name, specify it 
# with -OrganizationalUnitName as shown below. If you are using the OU DistinguishedName, you can set it 
# with -OrganizationalUnitDistinguishedName. You can choose to provide one of the two names to specify 
# the target OU. You can choose to create the identity that represents the storage account as either a 
# Service Logon Account or Computer Account (default parameter value), depending on your AD permissions 
# and preference. Run Get-Help Join-AzStorageAccountForAuth for more details on this cmdlet.

Join-AzStorageAccount `
        -ResourceGroupName $ResourceGroupName `
        -StorageAccountName $StorageAccountName `
        -SamAccountName $SamAccountName `
        -DomainAccountType $DomainAccountType `
        -OrganizationalUnitDistinguishedName $OuDistinguishedName

# You can run the Debug-AzStorageAccountAuth cmdlet to conduct a set of basic checks on your AD configuration 
# with the logged on AD user. This cmdlet is supported on AzFilesHybrid v0.1.2+ version. For more details on 
# the checks performed in this cmdlet, see Azure Files Windows troubleshooting guide.
Debug-AzStorageAccountAuth -StorageAccountName $StorageAccountName -ResourceGroupName $ResourceGroupName -Verbose

Confirmer que la fonctionnalité est activée

Cet autre script powershell fourni sur la même page que le précédent permet de vérifier si AD est activé sur le compte de stockage Azure.

# Get the target storage account
$storageaccount = Get-AzStorageAccount `
        -ResourceGroupName "<your-resource-group-name-here>" `
        -Name "<your-storage-account-name-here>"

# List the directory service of the selected service account
$storageAccount.AzureFilesIdentityBasedAuth.DirectoryServiceOptions

# List the directory domain information if the storage account has enabled AD DS authentication for file shares
$storageAccount.AzureFilesIdentityBasedAuth.ActiveDirectoryProperties

Configuration du stockage Azure

Nous pouvons à présent nous connecter à un partage SMB stocké dans Azure Storage.
Depuis Windows, le chemin réseau sera celui-ci : \\My_Share.file.core.windows.net\Nom_du_Partage.

Le portail Azure génère le script suivant pour se connecter au stockage Azure en utilisant les identifiants de l'utilisateur qui l'a lancé :

1
2
3
4
5
6
7
$connectTestResult = Test-NetConnection -ComputerName My_Share.file.core.windows.net -Port 445
if ($connectTestResult.TcpTestSucceeded) {
    # Monter le lecteur
    New-PSDrive -Name Z -PSProvider FileSystem -Root "\\My_Share.file.core.windows.net\share2" -Persist
} else {
    Write-Error -Message "Unable to reach the Azure storage account via port 445. Check to make sure your organization or ISP is not blocking port 445, or use Azure P2S VPN, Azure S2S VPN, or Express Route to tunnel SMB traffic over a different port."
}

Pour disposer de tous les droits sur ce partage, par exemple pour modifier les ACL, il est possible de se connecter avec la clé du compte de stockage. Le script sera alors le suivant.

Modifier les variables

Adapter les variables avant d'exécuter le script ! Notamment la clé du compte ou la lettre du lecteur.

1
2
3
4
5
6
7
8
9
$connectTestResult = Test-NetConnection -ComputerName My_Share.file.core.windows.net -Port 445
if ($connectTestResult.TcpTestSucceeded) {
    # Enregistrer le mot de passe pour rendre le lecteur persistant au redémarrage
    cmd.exe /C "cmdkey /add:`"My_Share.file.core.windows.net`" /user:`"localhost\My_Share`" /pass:`"MODIFY_ME`""
    # Monter le lecteur
    New-PSDrive -Name Z -PSProvider FileSystem -Root "\\My_Share.file.core.windows.net\share2" -Persist
} else {
    Write-Error -Message "Unable to reach the Azure storage account via port 445. Check to make sure your organization or ISP is not blocking port 445, or use Azure P2S VPN, Azure S2S VPN, or Express Route to tunnel SMB traffic over a different port."
}