Azure Files fournit deux principaux types de points de terminaison pour accéder aux partages de fichiers Azure :
Cet article se concentre sur la configuration d’un point de terminaison privé pour accéder directement au partage de fichiers Azure. Une grande partie de cet article s’applique également à l’interopérabilité d’Azure File Sync avec des points de terminaison publics et privés pour le compte de stockage. Pour plus d’informations sur les considérations réseau pour Azure File Sync, consultez configurer les paramètres du proxy et du pare-feu Azure File Sync.
Vous pouvez configurer vos points de terminaison pour restreindre l’accès réseau à votre compte de stockage et aux partages de fichiers. Pour restreindre l’accès à un réseau virtuel, utilisez l’une des approches suivantes :
Lorsque vous créez un point de terminaison privé pour vos partages de fichiers, vous déployez les ressources Azure suivantes :
Le processus de création d’un point de terminaison privé diffère légèrement selon que vous utilisez le partage de fichiers classique ou le nouveau modèle de partage de fichiers. Pour les partages de fichiers classiques, vous créez un point de terminaison privé pour le compte de stockage contenant les partages de fichiers. Pour les partages de fichiers créés avec Microsoft.FileShares, vous créez un point de terminaison privé pour le partage de fichiers lui-même.
Beaucoup d’étapes sont identiques pour les deux expériences. Seules la référence de la ressource, l’identifiant du groupe et le nom de l’enregistrement DNS diffèrent, comme indiqué dans le tableau suivant.
Accédez au groupe de ressources dans lequel vous souhaitez créer un point de terminaison privé. Sélectionnez + Créer et rechercher un point de terminaison privé. Sélectionnez la ressource de point de terminaison privé, puis sélectionnez Créer.
L’Assistant comprend plusieurs pages dont vous devez suivre les instructions.
Dans la page Informations de base , sélectionnez l’abonnement, le groupe de ressources, le nom, le nom de l’interface réseau et la région de votre point de terminaison privé. Vous devez créer le point de terminaison privé dans la même région que le réseau virtuel dans lequel vous souhaitez créer le point de terminaison privé. Sélectionnez ensuite Suivant : Ressource .
Si vous utilisez des partages de fichiers classiques dans un compte de stockage :
Sur la page Ressources, sélectionnez Microsoft. Storage/storageAccounts depuis le menu déroulant pour Type de ressource.
Pour Ressource, sélectionnez le compte de stockage spécifique auquel vous souhaitez vous connecter. Pour la sous-ressource cible, sélectionnez file. Sélectionnez ensuite Suivant : réseau virtuel.
Si vous utilisez des partages de fichiers créés avec le fournisseur de ressources Microsoft.FileShares :
Sur la page Ressources, sélectionnez Microsoft. FileShares/fileShares depuis le menu déroulant pour le type de ressource.
Pour Ressource, sélectionnez le partage de fichiers spécifique auquel vous souhaitez vous connecter. La sous-ressource cible se remplit automatiquement avec FileShare. Sélectionnez ensuite Suivant : réseau virtuel.
La page Réseau virtuel vous permet de sélectionner le virtual network et le sous-réseau spécifiques auquel vous souhaitez ajouter votre point de terminaison privé. Sélectionnez l’allocation d’adresse IP dynamique ou statique pour le nouveau point de terminaison privé. Si vous sélectionnez statique, vous devez également fournir un nom et une adresse IP privée. Si vous le souhaitez, vous pouvez également spécifier un groupe de sécurité d’application. Quand vous avez terminé, cliquez sur Suivant : DNS.
La page DNS contient les informations permettant d’intégrer votre point de terminaison privé à une zone DNS privée. Vérifiez que l’abonnement et le groupe de ressources sont corrects, puis sélectionnez Suivant : Balises.
Vous pouvez éventuellement appliquer des étiquettes pour classer vos ressources, telles que l’application du nom Environnement et de la valeur Test à toutes les ressources de test. Si vous le souhaitez, entrez des paires nom/valeur, puis sélectionnez Suivant : Vérifier + créer.
Sélectionnez Créer pour créer le point de terminaison privé.
Pour créer un point de terminaison privé, commencez par obtenir une référence à votre compte de stockage ou à votre partage de fichiers et au sous-réseau de réseau virtuel dans lequel vous souhaitez ajouter le point de terminaison privé. Remplacez les valeurs d’espace réservé dans le code suivant par vos propres valeurs.
Pour les partages de fichiers classiques, obtenez une référence au compte de stockage :
$storageAccountResourceGroupName = "<storage-account-resource-group-name>"
$storageAccountName = "<storage-account-name>"
$storageAccount = Get-AzStorageAccount `
-ResourceGroupName $storageAccountResourceGroupName `
-Name $storageAccountName `
-ErrorAction SilentlyContinue
if ($null -eq $storageAccount) {
$errorMessage = "Storage account $storageAccountName not found "
$errorMessage += "in resource group $storageAccountResourceGroupName."
Write-Error -Message $errorMessage -ErrorAction Stop
}
# Set common variables for private endpoint creation
$resourceGroupName = $storageAccountResourceGroupName
$privateLinkResourceId = $storageAccount.Id
$groupId = "file"
$dnsRecordName = $storageAccountName
Pour les partages de fichiers créés à l’aide du fournisseur de ressources Microsoft.FileShares, obtenez une référence au partage de fichiers :
$fileShareResourceGroupName = "<resource-group-name>"
$fileShareName = "<file-share-name>"
$fileShare = Get-AzFileShare `
-ResourceGroupName $fileShareResourceGroupName `
-ResourceName $fileShareName `
-ErrorAction SilentlyContinue
if ($null -eq $fileShare) {
$errorMessage = "File share $fileShareName not found "
$errorMessage += "in resource group $fileShareResourceGroupName."
Write-Error -Message $errorMessage -ErrorAction Stop
}
# Extract hostName and hostNamePrefix for DNS record
$hostName = $fileShare.HostName
$hostNamePrefix = $hostName.Split('.')[0]
# Set common variables for private endpoint creation
$resourceGroupName = $fileShareResourceGroupName
$privateLinkResourceId = $fileShare.Id
$groupId = "FileShare"
$dnsRecordName = $hostNamePrefix
Après avoir défini les variables communes, les étapes restantes sont les mêmes pour les deux expériences. Obtenez des références au réseau virtuel et au sous-réseau :
$virtualNetworkResourceGroupName = "<vnet-resource-group-name>"
$virtualNetworkName = "<vnet-name>"
$subnetName = "<vnet-subnet-name>"
# Get virtual network reference, and throw error if it doesn't exist
$virtualNetwork = Get-AzVirtualNetwork `
-ResourceGroupName $virtualNetworkResourceGroupName `
-Name $virtualNetworkName `
-ErrorAction SilentlyContinue
if ($null -eq $virtualNetwork) {
$errorMessage = "Virtual network $virtualNetworkName not found "
$errorMessage += "in resource group $virtualNetworkResourceGroupName."
Write-Error -Message $errorMessage -ErrorAction Stop
}
# Get reference to virtual network subnet, and throw error if it doesn't exist
$subnet = $virtualNetwork | `
Select-Object -ExpandProperty Subnets | `
Where-Object { $_.Name -eq $subnetName }
if ($null -eq $subnet) {
Write-Error `
-Message "Subnet $subnetName not found in virtual network $virtualNetworkName." `
-ErrorAction Stop
}
Pour créer un point de terminaison privé, vous devez créer une connexion de service de liaison privée. La connexion au service sous forme de liaison privée est une entrée pour la création du point de terminaison privé.
# Disable private endpoint network policies
$subnet.PrivateEndpointNetworkPolicies = "Disabled"
$virtualNetwork = $virtualNetwork | `
Set-AzVirtualNetwork -ErrorAction Stop
# Create a private link service connection.
$privateEndpointConnection = New-AzPrivateLinkServiceConnection `
-Name "$dnsRecordName-Connection" `
-PrivateLinkServiceId $privateLinkResourceId `
-GroupId $groupId `
-ErrorAction Stop
# Create a new private endpoint.
$privateEndpoint = New-AzPrivateEndpoint `
-ResourceGroupName $resourceGroupName `
-Name "$dnsRecordName-PrivateEndpoint" `
-Location $virtualNetwork.Location `
-Subnet $subnet `
-PrivateLinkServiceConnection $privateEndpointConnection `
-ErrorAction Stop
Si vous créez une zone DNS privée Azure, le nom d’hôte d’origine se résout en l’adresse IP privée au sein du réseau virtuel. Bien que optionnel du point de vue de la création d'un point de terminaison privé, il est explicitement nécessaire pour monter le partage de fichiers Azure directement via un principal utilisateur Active Directory (AD) ou pour accéder via l'API REST.
# Get the host name suffix (core.windows.net for public cloud).
# This is done like this so this script will seamlessly work for non-public Azure.
$hostNameSuffix = Get-AzContext | `
Select-Object -ExpandProperty Environment | `
Select-Object -ExpandProperty StorageEndpointSuffix
# For public cloud, this will generate the following DNS suffix:
# privatelink.file.core.windows.net.
$dnsZoneName = "privatelink.file.$hostNameSuffix"
# Find a DNS zone matching desired name attached to this virtual network.
$dnsZone = Get-AzPrivateDnsZone | `
Where-Object { $_.Name -eq $dnsZoneName } | `
Where-Object {
$privateDnsLink = Get-AzPrivateDnsVirtualNetworkLink `
-ResourceGroupName $_.ResourceGroupName `
-ZoneName $_.Name `
-ErrorAction SilentlyContinue
$privateDnsLink.VirtualNetworkId -eq $virtualNetwork.Id
}
if ($null -eq $dnsZone) {
# No matching DNS zone attached to virtual network, so create new one.
$dnsZone = New-AzPrivateDnsZone `
-ResourceGroupName $virtualNetworkResourceGroupName `
-Name $dnsZoneName `
-ErrorAction Stop
$privateDnsLink = New-AzPrivateDnsVirtualNetworkLink `
-ResourceGroupName $virtualNetworkResourceGroupName `
-ZoneName $dnsZoneName `
-Name "$virtualNetworkName-DnsLink" `
-VirtualNetworkId $virtualNetwork.Id `
-ErrorAction Stop
}
Maintenant que vous avez une référence à la zone DNS privée, vous devez créer un enregistrement.
$privateEndpointIP = $privateEndpoint | `
Select-Object -ExpandProperty NetworkInterfaces | `
Select-Object @{
Name = "NetworkInterfaces";
Expression = { Get-AzNetworkInterface -ResourceId $_.Id }
} | `
Select-Object -ExpandProperty NetworkInterfaces | `
Select-Object -ExpandProperty IpConfigurations | `
Select-Object -ExpandProperty PrivateIpAddress
$privateDnsRecordConfig = New-AzPrivateDnsRecordConfig `
-IPv4Address $privateEndpointIP
New-AzPrivateDnsRecordSet `
-ResourceGroupName $virtualNetworkResourceGroupName `
-Name $dnsRecordName `
-RecordType A `
-ZoneName $dnsZoneName `
-Ttl 600 `
-PrivateDnsRecords $privateDnsRecordConfig `
-ErrorAction Stop | `
Out-Null
Pour créer un point de terminaison privé, commencez par obtenir une référence à votre compte de stockage ou partage de fichiers, ainsi que le sous-réseau de réseau virtuel dans lequel vous souhaitez ajouter le point de terminaison privé. Remplacez les valeurs d’espace réservé dans les étapes suivantes par vos propres valeurs.
Pour les partages de fichiers classiques, obtenez une référence au compte de stockage :
storageAccountResourceGroupName="<storage-account-resource-group-name>"
storageAccountName="<storage-account-name>"
# Get storage account ID
privateLinkResourceId=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "id" --output tsv)
# Set common variables for private endpoint creation
resourceGroupName=$storageAccountResourceGroupName
groupId="file"
dnsRecordName=$storageAccountName
Pour les partages de fichiers créés à l’aide du fournisseur de ressources Microsoft.FileShares, obtenez une référence au partage de fichiers :
# Install the fileshare extension
az extension add --name fileshare
fileShareResourceGroupName="<resource-group-name>"
fileShareName="<file-share-name>"
# Get the file share resource ID and host name
privateLinkResourceId=$(az fileshare show \
--resource-group $fileShareResourceGroupName \
--name $fileShareName \
--query "id" --output tsv)
hostName=$(az fileshare show \
--resource-group $fileShareResourceGroupName \
--name $fileShareName \
--query "properties.hostName" --output tsv)
hostNamePrefix=$(echo $hostName | cut -d'.' -f1)
# Set common variables for private endpoint creation
resourceGroupName=$fileShareResourceGroupName
groupId="FileShare"
dnsRecordName=$hostNamePrefix
Après avoir défini les variables communes, les étapes restantes sont les mêmes pour les deux expériences. Obtenez des références au réseau virtuel et au sous-réseau :
virtualNetworkResourceGroupName="<vnet-resource-group-name>"
virtualNetworkName="<vnet-name>"
subnetName="<vnet-subnet-name>"
virtualNetwork=$(az network vnet show \
--resource-group $virtualNetworkResourceGroupName \
--name $virtualNetworkName \
--query "id" --output tsv)
subnet=$(az network vnet subnet show \
--resource-group $virtualNetworkResourceGroupName \
--vnet-name $virtualNetworkName \
--name $subnetName \
--query "id" --output tsv)
Pour créer un point de terminaison privé, vérifiez que la stratégie de réseau de point de terminaison privé du sous-réseau est désactivée, puis créez le point de terminaison privé avec az network private-endpoint create.
# Disable private endpoint network policies
az network vnet subnet update \
--ids $subnet \
--disable-private-endpoint-network-policies \
--output none
# Get virtual network location
region=$(az network vnet show \
--ids $virtualNetwork \
--query "location" --output tsv)
# Create a private endpoint
privateEndpoint=$(az network private-endpoint create \
--resource-group $resourceGroupName \
--name "$dnsRecordName-PrivateEndpoint" \
--location $region \
--subnet $subnet \
--private-connection-resource-id $privateLinkResourceId \
--group-id $groupId \
--connection-name "$dnsRecordName-Connection" \
--query "id" --output tsv)
Si vous créez une zone DNS privée dans Azure, le nom d’hôte d’origine se résout en adresse IP privée au sein du réseau virtuel. Bien que optionnel du point de vue de la création d'un point de terminaison privé, il est nécessaire pour monter le partage de fichiers Azure en utilisant un principal utilisateur AD ou en y accédant via l'API FileREST.
# Get the desired storage account suffix (core.windows.net for public cloud).
# This is done so the script will work for non-public Azure clouds.
storageAccountSuffix=$(az cloud show \
--query "suffixes.storageEndpoint" --output tsv)
# For public cloud, this generates the DNS suffix:
# privatelink.file.core.windows.net.
dnsZoneName="privatelink.file.$storageAccountSuffix"
# Find a DNS zone matching the desired name attached to this virtual network.
possibleDnsZones=$(az network private-dns zone list \
--query "[?name == '$dnsZoneName'].id" \
--output tsv)
dnsZone=""
for possibleDnsZone in $possibleDnsZones
do
possibleResourceGroupName=$(az resource show \
--ids $possibleDnsZone \
--query "resourceGroup" --output tsv)
link=$(az network private-dns link vnet list \
--resource-group $possibleResourceGroupName \
--zone-name $dnsZoneName \
--query "[?virtualNetwork.id == '$virtualNetwork'].id" \
--output tsv)
if [ -n "$link" ]
then
dnsZoneResourceGroup=$possibleResourceGroupName
dnsZone=$possibleDnsZone
break
fi
done
if [ -z "$dnsZone" ]
then
# No matching DNS zone attached to the virtual network, so create a new one.
dnsZone=$(az network private-dns zone create \
--resource-group $virtualNetworkResourceGroupName \
--name $dnsZoneName \
--query "id" --output tsv)
az network private-dns link vnet create \
--resource-group $virtualNetworkResourceGroupName \
--zone-name $dnsZoneName \
--name "$virtualNetworkName-DnsLink" \
--virtual-network $virtualNetwork \
--registration-enabled false \
--output none
dnsZoneResourceGroup=$virtualNetworkResourceGroupName
fi
Maintenant que vous avez une référence à la zone DNS privée, créez un enregistrement A.
privateEndpointNIC=$(az network private-endpoint show \
--ids $privateEndpoint \
--query "networkInterfaces[0].id" --output tsv)
privateEndpointIP=$(az network nic show \
--ids $privateEndpointNIC \
--query "ipConfigurations[0].privateIPAddress" --output tsv)
az network private-dns record-set a create \
--resource-group $dnsZoneResourceGroup \
--zone-name $dnsZoneName \
--name $dnsRecordName \
--output none
az network private-dns record-set a add-record \
--resource-group $dnsZoneResourceGroup \
--zone-name $dnsZoneName \
--record-set-name $dnsRecordName \
--ipv4-address $privateEndpointIP \
--output none
Si vous disposez d’une machine virtuelle à l’intérieur de votre réseau virtuel ou que vous avez configuré le transfert DNS comme décrit dans Configuration du transfert DNS pour Azure Files, vous pouvez tester que votre point de terminaison privé est configuré correctement. Exécutez les commandes suivantes à partir de PowerShell, de la ligne de commande ou du terminal (fonctionne pour Windows, Linux ou macOS).
Pour les partages de fichiers classiques, remplacez <storage-account-name> par le nom du compte de stockage approprié :
nslookup <storage-account-name>.file.core.windows.net
Pour les partages de fichiers créés avec le fournisseur de ressources Microsoft.FileShares, utilisez le nom d’hôte du partage de fichiers. Dans l’onglet Vue d’ensemble du partage de fichiers, sélectionnez la vue JSON en haut à droite. Dans la vue JSON, sous propriétés, copiez la valeur de hostName. Le format ressemble à fs-xxxxxxxxxxxxxxxxx.xx.file.storage.azure.net.
nslookup <file-share-host-name>
Si elle réussit, vous voyez la sortie similaire à la suivante, où 192.168.0.5 est l’adresse IP privée du point de terminaison privé dans votre réseau virtuel (sortie indiquée pour Windows).
Pour les partages de fichiers classiques :
Server: UnKnown
Address: 10.2.4.4
Non-authoritative answer:
Name: storageaccount.privatelink.file.core.windows.net
Address: 192.168.0.5
Aliases: storageaccount.file.core.windows.net
Pour les partages de fichiers créés avec le fournisseur de ressources Microsoft.FileShares :
Server: UnKnown
Address: 10.2.4.4
Non-authoritative answer:
Name: <hostNamePrefix>.privatelink.file.core.windows.net
Address: 192.168.0.5
Aliases: <hostNamePrefix>.<zone>.file.storage.azure.net
Si vous avez une machine virtuelle à l’intérieur de votre réseau virtuel ou que vous avez configuré le transfert DNS comme décrit dans Configuration du transfert DNS pour Azure Files, vous pouvez tester que votre point de terminaison privé est configuré correctement en exécutant les commandes suivantes :
Pour les partages de fichiers classiques :
$storageAccountHostName = [System.Uri]::new($storageAccount.PrimaryEndpoints.file) | `
Select-Object -ExpandProperty Host
Resolve-DnsName -Name $storageAccountHostName
Pour les partages de fichiers créés avec le fournisseur de ressources Microsoft.FileShares :
Resolve-DnsName -Name $fileShare.HostName
Si elle réussit, vous voyez la sortie similaire à ce qui suit, où 192.168.0.5 est l’adresse IP privée du point de terminaison privé dans votre réseau virtuel.
Pour les partages de fichiers classiques :
Name Type TTL Section NameHost
---- ---- --- ------- --------
storageaccount.file.core.windows CNAME 60 Answer storageaccount.privatelink.file.core.windows.net
.net
Name : storageaccount.privatelink.file.core.windows.net
QueryType : A
TTL : 600
Section : Answer
IP4Address : 192.168.0.5
Pour les partages de fichiers créés avec le fournisseur de ressources Microsoft.FileShares :
Name Type TTL Section NameHost
---- ---- --- ------- --------
<hostNamePrefix>.<zone>.file.storage.azur CNAME 60 Answer <hostNamePrefix>.privatelink.file.core.windows.net
e.net
Name : <hostNamePrefix>.privatelink.file.core.windows.net
QueryType : A
TTL : 600
Section : Answer
IP4Address : 192.168.0.5
Si vous avez une machine virtuelle à l’intérieur de votre réseau virtuel ou que vous avez configuré le transfert DNS comme décrit dans Configuration du transfert DNS pour Azure Files, vous pouvez tester que votre point de terminaison privé est configuré correctement en exécutant les commandes suivantes :
Pour les partages de fichiers classiques :
httpEndpoint=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "primaryEndpoints.file" --output tsv)
hostName=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint) | tr -d "/")
nslookup $hostName
Pour les partages de fichiers créés avec le fournisseur de ressources Microsoft.FileShares :
hostName=$(az fileshare show \
--resource-group $fileShareResourceGroupName \
--name $fileShareName \
--query "properties.hostName" --output tsv)
nslookup $hostName
Si elle réussit, vous voyez la sortie similaire à ce qui suit, où 192.168.0.5 est l’adresse IP privée du point de terminaison privé dans votre réseau virtuel. Vous devez toujours utiliser le nom d’hôte d’origine (storageaccount.file.core.windows.net pour l’expérience classique, ou le hostName du partage de fichiers pour la nouvelle expérience) pour monter votre partage de fichiers au lieu du chemin privatelink.
Pour les partages de fichiers classiques :
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
storageaccount.file.core.windows.net canonical name = storageaccount.privatelink.file.core.windows.net.
Name: storageaccount.privatelink.file.core.windows.net
Address: 192.168.0.5
Pour les partages de fichiers créés avec le fournisseur de ressources Microsoft.FileShares :
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
<hostNamePrefix>.<zone>.file.storage.azure.net canonical name = <hostNamePrefix>.privatelink.file.core.windows.net.
Name: <hostNamePrefix>.privatelink.file.core.windows.net
Address: 192.168.0.5
Pour limiter l’accès au point de terminaison public, désactivez tout d’abord l’accès général au point de terminaison public. La désactivation de l’accès au point de terminaison public n’affecte pas les points de terminaison privés. Après avoir désactivé le point de terminaison public, sélectionnez des réseaux ou des adresses IP spécifiques qui peuvent continuer à y accéder. En général, la plupart des stratégies de pare-feu d’un compte de stockage limitent l’accès réseau à un ou plusieurs réseaux virtuels.
Lorsque vous désactivez l’accès au réseau public, vous restreignez l’accès entrant tout en autorisant l’accès sortant. Vous pouvez toujours accéder au compte de stockage via ses points de terminaison privés. Sinon, les requêtes vers le point public du compte de stockage sont rejetées, sauf si elles proviennent d’une source spécifiquement autorisée.
Pour désactiver l’accès public au réseau pour les partages de fichiers classiques, suivez ces étapes :
- Allez au compte de stockage où vous souhaitez restreindre tout accès entrant au point de terminaison public.
- Dans le menu du service, sous Sécurité + réseau, sélectionnez Mise en réseau.
- Sous Accès au réseau public, sélectionnez Gérer.
- Sélectionnez Désactiver, puis sélectionnez Continuer.
- Cliquez sur Enregistrer.
Pour les partages de fichiers créés avec le fournisseur de ressources Microsoft.FileShares :
Accédez au partage de fichiers dans lequel vous souhaitez désactiver l’accès public. Dans le menu du service, sous Paramètres, sélectionnez Configuration. Définissez l’accès au réseau publicsur Désactivé, puis sélectionnez Enregistrer.
Pour les partages de fichiers classiques, la commande PowerShell suivante refuse tout le trafic vers le point de terminaison public du compte de stockage. Définissez le paramètre -Bypass sur AzureServices pour autoriser les services approuvés de première partie tels qu’Azure File Sync à accéder au compte de stockage via le point de terminaison public.
# This assumes $storageAccount is still defined from the beginning of this guide.
$storageAccount | Update-AzStorageAccountNetworkRuleSet `
-DefaultAction Deny `
-Bypass AzureServices `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Out-Null
Pour les partages de fichiers créés avec le fournisseur de ressources Microsoft.FileShares, définissez -PublicNetworkAccess sur Disabled sur le partage de fichiers.
# To learn more about the Az.FileShare module, see https://www.powershellgallery.com/packages/Az.FileShare/1.0.0
Install-Module -Name Az.FileShare -Repository PSGallery -RequiredVersion 1.0.0
$fileShareResourceGroupName = "<resource-group-name>"
$fileShareName = "<file-share-name>"
Update-AzFileShare `
-ResourceGroupName $fileShareResourceGroupName `
-ResourceName $fileShareName `
-PublicNetworkAccess Disabled
Pour les partages de fichiers classiques, la commande CLI suivante bloque tout le trafic vers le point de terminaison public du compte de stockage. Définissez le paramètre --bypass sur AzureServices pour autoriser les services approuvés de première partie tels qu’Azure File Sync à accéder au compte de stockage via le point de terminaison public.
# This assumes $storageAccountResourceGroupName and $storageAccountName
# are still defined from the beginning of this guide.
az storage account update \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--bypass "AzureServices" \
--default-action "Deny" \
--output none
Pour les partages de fichiers créés avec le fournisseur de ressources Microsoft.FileShares, définissez --public-network-access sur Disabled sur le partage de fichiers.
# Install the fileshare extension
az extension add --name fileshare
fileShareResourceGroupName="<resource-group-name>"
fileShareName="<file-share-name>"
az fileshare update \
--name $fileShareName \
--resource-group $fileShareResourceGroupName \
--public-network-access Disabled
Lorsque vous restreignez l’accès au point public à des réseaux spécifiques, vous autorisez les requêtes vers le point public depuis des réseaux virtuels ou adresses IP spécifiés. Cette restriction fonctionne en utilisant une capacité appelée terminaux de service. Vous pouvez utiliser des terminaux de service avec ou sans points privés.
Pour les partages de fichiers classiques, suivez ces étapes pour restreindre le point public à des réseaux spécifiques.
- Allez sur le compte de stockage où vous souhaitez restreindre le point public à des réseaux spécifiques.
- Dans le menu du service, sous Sécurité + réseau, sélectionnez Mise en réseau.
- Sous Étendue d’accès au réseau public, sélectionnez Activer parmi les réseaux sélectionnés. Cette sélection révèle un certain nombre de paramètres pour contrôler la restriction du point de terminaison public.
- Dans la section Réseaux virtuels, sélectionnez Ajouter un réseau>virtuel Ajouter un réseau virtuel existant pour sélectionner le réseau virtuel qui devrait être autorisé à accéder au compte de stockage via le point de terminaison public. Sélectionnez un réseau virtuel et un sous-réseau pour ce réseau virtuel, puis sélectionnez Activer. Si vous souhaitez créer un nouveau réseau virtuel à cette fin, sélectionnez Ajouter un réseau>virtuel Ajouter un nouveau réseau virtuel, fournissez les détails, puis sélectionnez Créer.
-
Dans Adresses IPv4, spécifiez toutes les adresses IP publiques que vous souhaitez pouvoir accéder au compte de stockage.
- Sélectionnez la case à cocher « Autoriser les services Microsoft approuvés à accéder à cette ressource » afin de permettre à des services Microsoft propriétaires approuvés, tels qu’Azure File Sync, d’accéder au compte de stockage.
- Cliquez sur Enregistrer.
Pour les partages de fichiers créés avec le fournisseur de ressources Microsoft.FileShares :
Accédez au partage de fichiers dans lequel vous souhaitez restreindre l’accès public. Dans le menu du service, sous Paramètres, sélectionnez Configuration. Sous Accès au réseau public, sélectionnez Activé à partir de réseaux virtuels sélectionnés, ajoutez les réseaux virtuels et les sous-réseaux autorisés à accéder au partage, puis sélectionnez Enregistrer.
Pour les partages de fichiers classiques, limitez l’accès au point de terminaison public du compte de stockage à des réseaux virtuels spécifiques à l’aide de points de terminaison de service. Tout d’abord, collectez des informations sur le compte de stockage et le réseau virtuel. Remplacez les valeurs d’espace réservé dans les étapes suivantes par vos propres valeurs.
$storageAccountResourceGroupName = "<storage-account-resource-group>"
$storageAccountName = "<storage-account-name>"
$restrictToVirtualNetworkResourceGroupName = "<vnet-resource-group-name>"
$restrictToVirtualNetworkName = "<vnet-name>"
$subnetName = "<subnet-name>"
$storageAccount = Get-AzStorageAccount `
-ResourceGroupName $storageAccountResourceGroupName `
-Name $storageAccountName `
-ErrorAction Stop
$virtualNetwork = Get-AzVirtualNetwork `
-ResourceGroupName $restrictToVirtualNetworkResourceGroupName `
-Name $restrictToVirtualNetworkName `
-ErrorAction Stop
$subnet = $virtualNetwork | `
Select-Object -ExpandProperty Subnets | `
Where-Object { $_.Name -eq $subnetName }
if ($null -eq $subnet) {
Write-Error `
-Message "Subnet $subnetName not found in virtual network $restrictToVirtualNetworkName." `
-ErrorAction Stop
}
Pour autoriser le trafic à partir du réseau virtuel, l'infrastructure réseau Azure doit exposer le Microsoft.Storage point de terminaison de service au sous-réseau du réseau virtuel. Les commandes PowerShell suivantes ajoutent le point de terminaison de service Microsoft.Storage au sous-réseau s'il n'y est pas déjà.
$serviceEndpoints = $subnet | `
Select-Object -ExpandProperty ServiceEndpoints | `
Select-Object -ExpandProperty Service
if ($serviceEndpoints -notcontains "Microsoft.Storage") {
if ($null -eq $serviceEndpoints) {
$serviceEndpoints = @("Microsoft.Storage")
} elseif ($serviceEndpoints -is [string]) {
$serviceEndpoints = @($serviceEndpoints, "Microsoft.Storage")
} else {
$serviceEndpoints += "Microsoft.Storage"
}
$virtualNetwork = $virtualNetwork | Set-AzVirtualNetworkSubnetConfig `
-Name $subnetName `
-AddressPrefix $subnet.AddressPrefix `
-ServiceEndpoint $serviceEndpoints `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Set-AzVirtualNetwork `
-ErrorAction Stop
}
La dernière étape de restriction du trafic vers le compte de stockage consiste à créer une règle de mise en réseau et à l’ajouter à l’ensemble de règles réseau du compte de stockage.
$networkRule = $storageAccount | Add-AzStorageAccountNetworkRule `
-VirtualNetworkResourceId $subnet.Id `
-ErrorAction Stop
$storageAccount | Update-AzStorageAccountNetworkRuleSet `
-DefaultAction Deny `
-Bypass AzureServices `
-VirtualNetworkRule $networkRule `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Out-Null
Pour les partages de fichiers créés avec le fournisseur de ressources Microsoft.FileShares, transmettez directement à Update-AzFileShare les ID de ressource des sous-réseaux autorisés à l’aide de -AllowedSubnet. Il n’est pas nécessaire de configurer un point de terminaison de service ou une configuration de règle réseau distincte sur le compte de stockage.
# To learn more about the Az.FileShare module, see https://www.powershellgallery.com/packages/Az.FileShare/1.0.0
Install-Module -Name Az.FileShare -Repository PSGallery -RequiredVersion 1.0.0
$fileShareResourceGroupName = "<resource-group-name>"
$fileShareName = "<file-share-name>"
$virtualNetworkResourceGroupName = "<vnet-resource-group-name>"
$virtualNetworkName = "<vnet-name>"
$subnetName = "<subnet-name>"
$subnet = Get-AzVirtualNetwork `
-ResourceGroupName $virtualNetworkResourceGroupName `
-Name $virtualNetworkName | `
Select-Object -ExpandProperty Subnets | `
Where-Object { $_.Name -eq $subnetName }
Update-AzFileShare `
-ResourceGroupName $fileShareResourceGroupName `
-ResourceName $fileShareName `
-AllowedSubnet @($subnet.Id)
Pour les partages de fichiers classiques, limitez l’accès au point de terminaison public du compte de stockage à des réseaux virtuels spécifiques à l’aide de points de terminaison de service. Tout d’abord, collectez des informations sur le compte de stockage et le réseau virtuel. Remplacez les valeurs d’espace réservé dans les étapes suivantes par vos propres valeurs.
storageAccountResourceGroupName="<storage-account-resource-group>"
storageAccountName="<storage-account-name>"
restrictToVirtualNetworkResourceGroupName="<vnet-resource-group-name>"
restrictToVirtualNetworkName="<vnet-name>"
subnetName="<subnet-name>"
storageAccount=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "id" --output tsv)
virtualNetwork=$(az network vnet show \
--resource-group $restrictToVirtualNetworkResourceGroupName \
--name $restrictToVirtualNetworkName \
--query "id" --output tsv)
subnet=$(az network vnet subnet show \
--resource-group $restrictToVirtualNetworkResourceGroupName \
--vnet-name $restrictToVirtualNetworkName \
--name $subnetName \
--query "id" --output tsv)
Pour autoriser le trafic à partir du réseau virtuel, l'infrastructure réseau Azure doit exposer le Microsoft.Storage point de terminaison de service au sous-réseau du réseau virtuel. Les commandes CLI suivantes ajoutent le point de terminaison de service Microsoft.Storage au sous-réseau s'il n'y est pas déjà.
serviceEndpoints=$(az network vnet subnet show \
--resource-group $restrictToVirtualNetworkResourceGroupName \
--vnet-name $restrictToVirtualNetworkName \
--name $subnetName \
--query "serviceEndpoints[].service" \
--output tsv)
foundStorageServiceEndpoint=false
for serviceEndpoint in $serviceEndpoints
do
if [ $serviceEndpoint = "Microsoft.Storage" ]
then
foundStorageServiceEndpoint=true
fi
done
if [ $foundStorageServiceEndpoint = false ]
then
serviceEndpointList=""
for serviceEndpoint in $serviceEndpoints
do
serviceEndpointList+=$serviceEndpoint
serviceEndpointList+=" "
done
serviceEndpointList+="Microsoft.Storage"
az network vnet subnet update \
--ids $subnet \
--service-endpoints $serviceEndpointList \
--output none
fi
La dernière étape de restriction du trafic vers le compte de stockage consiste à créer une règle de mise en réseau et à l’ajouter à l’ensemble de règles réseau du compte de stockage.
az storage account network-rule add \
--resource-group $storageAccountResourceGroupName \
--account-name $storageAccountName \
--subnet $subnet \
--output none
az storage account update \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--bypass "AzureServices" \
--default-action "Deny" \
--output none
Pour les partages de fichiers créés avec le fournisseur de ressources Microsoft.FileShares, transmettez directement à az fileshare update les ID de ressource des sous-réseaux autorisés à l’aide de --allowed-subnets. Il n’est pas nécessaire de configurer un point de terminaison de service ou une configuration de règle réseau distincte sur le compte de stockage.
# Install the fileshare extension
az extension add --name fileshare
fileShareResourceGroupName="<resource-group-name>"
fileShareName="<file-share-name>"
virtualNetworkResourceGroupName="<vnet-resource-group-name>"
virtualNetworkName="<vnet-name>"
subnetName="<subnet-name>"
subnetId=$(az network vnet subnet show \
--resource-group $virtualNetworkResourceGroupName \
--vnet-name $virtualNetworkName \
--name $subnetName \
--query "id" --output tsv)
az fileshare update \
--name $fileShareName \
--resource-group $fileShareResourceGroupName \
--allowed-subnets $subnetId