Azure Files proporciona dos tipos principales de puntos de conexión para el acceso a los recursos compartidos de archivos de Azure:
En este artículo se centra en cómo configurar un punto de conexión privado para acceder directamente al recurso compartido de archivos Azure. Gran parte de este artículo también se aplica a cómo Azure File Sync interopera con puntos de conexión públicos y privados para la cuenta de almacenamiento. Para más información sobre consideraciones de red para Azure File Sync, consulte configurar la configuración de proxy y firewall de Azure File Sync.
Puedes configurar tus endpoints para restringir el acceso a la red a tu cuenta de almacenamiento y a los archivos compartidos. Para restringir el acceso a una red virtual, utiliza uno de los siguientes enfoques:
Al crear un punto de conexión privado para los recursos compartidos de archivos, implemente los siguientes recursos Azure:
El proceso de creación de endpoints privados varía ligeramente dependiendo de si usas compartición de archivos clásica o el nuevo modelo de compartición de archivos. Para los recursos compartidos de archivos clásicos, se crea un punto de conexión privado para la cuenta de almacenamiento que contiene los recursos compartidos de archivos. Para los recursos compartidos de archivos creados con Microsoft.FileShares, se crea un punto de conexión privado para el propio recurso compartido de archivos.
Muchos de los pasos son idénticos para ambas experiencias. Solo la referencia del recurso, el ID del grupo y el nombre del registro DNS difieren, como se muestra en la siguiente tabla.
Vaya al grupo de recursos donde desea crear un punto de conexión privado. Seleccione + Crear y busque Punto de conexión privado. Seleccione el recurso de punto de conexión privado y, a continuación, seleccione Crear.
El asistente tiene varias páginas que debe completar:
En la página Aspectos básicos , seleccione la suscripción, el grupo de recursos, el nombre, el nombre de la interfaz de red y la región del punto de conexión privado. Debe crear el punto de conexión privado en la misma región que la red virtual en la que desea crear el punto de conexión privado. Después, seleccione Siguiente: Recurso.
Si usa recursos compartidos de archivos clásicos en una cuenta de almacenamiento:
En la página de Recursos, selecciona Microsoft. Storage/storageAccounts desde el menú desplegable para tipo de recurso.
Para Recurso, selecciona la cuenta de almacenamiento específica a la que quieres conectarte. Para el subrecurso objetivo, seleccione file. A continuación, seleccione Siguiente: Red virtual.
Si usas archivos compartidos creados con Microsoft. Proveedor de recursos FileShares:
En la página de Recursos, selecciona Microsoft. FileShares/fileShares desde el menú desplegable para Tipo de recurso.
Para Resource, selecciona el archivo compartido específico al que quieres conectarte. El subrecurso de destino se rellena automáticamente con FileShare. A continuación, seleccione Siguiente: Red virtual.
La página Virtual Network le permite seleccionar el virtual network y la subred específicos a los que desea agregar el punto de conexión privado. Seleccione la asignación de direcciones IP dinámicas o estáticas para el nuevo punto de conexión privado. Si selecciona estático, también debe proporcionar un nombre y una dirección IP privada. También puede especificar opcionalmente un grupo de seguridad de aplicación. Al acabar, seleccione Siguiente: DNS.
La página DNS contiene la información para integrar el punto de conexión privado con una zona DNS privada. Asegúrese de que la suscripción y el grupo de recursos son correctos y, a continuación, seleccione Siguiente: Etiquetas.
Opcionalmente, puede aplicar etiquetas para clasificar los recursos, como aplicar el nombre Entorno y el valor Prueba a todos los recursos de prueba. Escriba pares nombre-valor si quiere y, a continuación, seleccione Siguiente: Revisar y crear.
Seleccione Crear para crear el punto de conexión privado.
Para crear un punto de conexión privado, primero obtenga una referencia a la cuenta de almacenamiento o al recurso compartido de archivos y a la subred de red virtual en la que desea agregar el punto de conexión privado. Reemplace los valores de marcador de posición en el código siguiente por sus propios valores.
Para los recursos compartidos de archivos clásicos, obtenga una referencia a la cuenta de almacenamiento:
$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
Para los recursos compartidos de archivos creados con el proveedor de recursos Microsoft.FileShares, obtenga una referencia al recurso compartido de archivos:
$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
Después de establecer las variables comunes, los pasos restantes son los mismos para ambas experiencias. Obtenga referencias a la red virtual y a la subred:
$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
}
Para crear un punto de conexión privado, debe crear una conexión de servicio de enlace privado. La conexión de servicio de vínculo privado es una entrada para la creación del punto de conexión privado.
# 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 crea una zona DNS privada de Azure, el nombre de host original se resuelve como la dirección IP privada dentro de la red virtual. Aunque es opcional desde la perspectiva de crear un endpoint privado, es explícitamente necesario para montar el recurso compartido de archivos de Azure directamente usando un principal de usuario de Active Directory (AD) o accediendo a través de la 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
}
Ahora que tiene una referencia a la zona DNS privada, debe crear un registro.
$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
Para crear un punto de conexión privado, primero obtenga una referencia a la cuenta de almacenamiento o al recurso compartido de archivos, además de la subred de red virtual donde desea agregar el punto de conexión privado. Reemplace los valores de marcador de posición en los pasos siguientes por sus propios valores.
Para los recursos compartidos de archivos clásicos, obtenga una referencia a la cuenta de almacenamiento:
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
Para los recursos compartidos de archivos creados con el proveedor de recursos Microsoft.FileShares, obtenga una referencia al recurso compartido de archivos:
# 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
Después de establecer las variables comunes, los pasos restantes son los mismos para ambas experiencias. Obtenga referencias a la red virtual y a la subred:
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)
Para crear un punto de conexión privado, asegúrese de que la directiva de red del punto de conexión privado de la subred está deshabilitada y, a continuación, cree el punto de conexión privado con 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 crea una zona DNS privada de Azure, el nombre de host original se resuelve como la dirección IP privada dentro de la red virtual. Aunque es opcional desde la perspectiva de crear un endpoint privado, es necesario para montar el recurso compartido de archivos de Azure usando un principal de usuario de AD o accediendo a través de la 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
Ahora que tiene una referencia a la zona DNS privada, cree un registro 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 tiene una máquina virtual dentro de la red virtual o ha configurado el reenvío DNS como se describe en Configuración del reenvío DNS para Azure Files, puede probar que el punto de conexión privado está configurado correctamente. Ejecute los siguientes comandos desde PowerShell, la línea de comandos o el terminal (funciona para Windows, Linux o macOS).
En el caso de los recursos compartidos de archivos clásicos, reemplace por <storage-account-name> el nombre de la cuenta de almacenamiento adecuado:
nslookup <storage-account-name>.file.core.windows.net
Para los recursos compartidos de archivos creados con el proveedor de recursos Microsoft.FileShares, use el nombre de host del recurso compartido de archivos. En la pestaña información general del recurso compartido de archivos, seleccione vista JSON en la esquina superior derecha. En la vista JSON, en propiedades, copie el valor de hostName. El formato es similar a fs-xxxxxxxxxxxxxxxxx.xx.file.storage.azure.net.
nslookup <file-share-host-name>
Si se ejecuta correctamente, verá una salida similar a la siguiente, donde 192.168.0.5 es la dirección IP privada del punto de conexión privado en la red virtual (salida que se muestra para Windows).
Para recursos compartidos de archivos clásicos:
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
Para los recursos compartidos de archivos creados con el proveedor de recursos 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 tiene una máquina virtual dentro de la red virtual o ha configurado el reenvío DNS como se describe en Configuración del reenvío DNS para Azure Files, puede probar que el punto de conexión privado está configurado correctamente mediante la ejecución de los siguientes comandos:
Para recursos compartidos de archivos clásicos:
$storageAccountHostName = [System.Uri]::new($storageAccount.PrimaryEndpoints.file) | `
Select-Object -ExpandProperty Host
Resolve-DnsName -Name $storageAccountHostName
Para los recursos compartidos de archivos creados con el proveedor de recursos Microsoft.FileShares:
Resolve-DnsName -Name $fileShare.HostName
Si se ejecuta correctamente, verá una salida similar a la siguiente, donde 192.168.0.5 es la dirección IP privada del punto de conexión privado en la red virtual.
Para recursos compartidos de archivos clásicos:
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
Para los recursos compartidos de archivos creados con el proveedor de recursos 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 tiene una máquina virtual dentro de la red virtual o ha configurado el reenvío DNS como se describe en Configuración del reenvío DNS para Azure Files, puede probar que el punto de conexión privado está configurado correctamente mediante la ejecución de los siguientes comandos:
Para recursos compartidos de archivos clásicos:
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
Para los recursos compartidos de archivos creados con el proveedor de recursos Microsoft.FileShares:
hostName=$(az fileshare show \
--resource-group $fileShareResourceGroupName \
--name $fileShareName \
--query "properties.hostName" --output tsv)
nslookup $hostName
Si se ejecuta correctamente, verá una salida similar a la siguiente, donde 192.168.0.5 es la dirección IP privada del punto de conexión privado en la red virtual. Debe seguir usando el nombre de host original (storageaccount.file.core.windows.net para la experiencia clásica, o hostName del recurso compartido de archivos para la nueva experiencia) para montar el recurso compartido de archivos en lugar de la ruta de acceso privatelink.
Para recursos compartidos de archivos clásicos:
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
Para los recursos compartidos de archivos creados con el proveedor de recursos 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
Para limitar el acceso al punto de conexión público, deshabilite primero el acceso general al punto de conexión público. Deshabilitar el acceso al punto de conexión público no afecta a los puntos de conexión privados. Después de deshabilitar el punto de conexión público, seleccione redes o direcciones IP específicas que puedan seguir accediendo a él. En general, la mayoría de las directivas de firewall de una cuenta de almacenamiento restringen el acceso de red a una o varias redes virtuales.
Cuando desactivas el acceso a la red pública, restringes el acceso entrante mientras permites el acceso saliente. Aún puedes acceder a la cuenta de almacenamiento a través de sus puntos finales privados. De lo contrario, las solicitudes al endpoint público de la cuenta de almacenamiento son rechazadas, salvo que provengan de una fuente específicamente permitida.
Para desactivar el acceso de red público para los recursos compartidos de archivos clásicos, sigue estos pasos:
- Ve a la cuenta de almacenamiento donde quieres restringir todo acceso entrante al endpoint público.
- Desde el menú de servicio, en Seguridad + redes, selecciona Redes.
- En Acceso a la red pública, seleccione Administrar.
- Selecciona Desactivar y luego selecciona Proceder.
- Haga clic en Guardar.
Para los recursos compartidos de archivos creados con el proveedor de recursos Microsoft.FileShares:
Vaya al recurso compartido de archivos donde desea deshabilitar el acceso público. En el menú servicio, en Configuración, seleccione Configuración. Establezca Acceso a la red pública en Deshabilitado y, a continuación, seleccione Guardar.
En el caso de los recursos compartidos de archivos clásicos, el siguiente comando de PowerShell deniega todo el tráfico al punto de conexión público de la cuenta de almacenamiento. Establezca el parámetro -Bypass en AzureServices para permitir que los servicios propios de confianza, como Azure File Sync, accedan a la cuenta de almacenamiento a través del punto de conexión público.
# 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
Para los recursos compartidos de archivos creados con el proveedor de recursos Microsoft.FileShares, establezca -PublicNetworkAccess como Disabled en el recurso compartido de archivos.
# 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
En el caso de los recursos compartidos de archivos clásicos, el siguiente comando de la CLI bloquea todo el tráfico al punto de conexión público de la cuenta de almacenamiento. Establezca el parámetro --bypass en AzureServices para permitir que los servicios propios de confianza, como Azure File Sync, accedan a la cuenta de almacenamiento a través del punto de conexión público.
# 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
Para los recursos compartidos de archivos creados con el proveedor de recursos Microsoft.FileShares, establezca --public-network-access como Disabled en el recurso compartido de archivos.
# 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
Cuando restringes el acceso al punto final público a redes específicas, permites las solicitudes al punto final público desde redes virtuales o direcciones IP especificadas. Esta restricción funciona utilizando una capacidad llamada endpoints de servicio. Puedes usar endpoints de servicio con o sin endpoints privados.
Para los recursos compartidos de archivos clásicos, siga estos pasos para restringir el punto de conexión público a redes específicas.
- Ve a la cuenta de almacenamiento donde quieres restringir el endpoint público a redes específicas.
- Desde el menú de servicio, en Seguridad + redes, selecciona Redes.
- En Ámbito de acceso a la red pública, seleccione Habilitar desde redes seleccionadas. Esta selección revela una serie de opciones de configuración para controlar la restricción del punto de conexión público.
- En redes virtuales, selecciona Añadir una red> virtualAñadir red virtual existente para seleccionar la red virtual que debería poder acceder a la cuenta de almacenamiento a través del endpoint público. Seleccione una red virtual y una subred para esa red virtual y, luego, elija Habilitar. Si quieres crear una nueva red virtual para este propósito, selecciona Añadir una red> virtualAñadir nueva red virtual, proporciona los detalles y luego selecciona Crear.
-
En Direcciones IPv4, especifica cualquier dirección IP pública de internet a la que quieras acceder a la cuenta de almacenamiento.
- Seleccione la casilla Permitir que los servicios de Microsoft de confianza accedan a este recurso para permitir que servicios propios de Microsoft de confianza, como Azure File Sync, accedan a la cuenta de almacenamiento.
- Haga clic en Guardar.
Para los recursos compartidos de archivos creados con el proveedor de recursos Microsoft.FileShares:
Vaya al recurso compartido de archivos donde desea restringir el acceso público. En el menú servicio, en Configuración, seleccione Configuración. En Acceso a red pública, seleccione Habilitado en redes virtuales seleccionadas, agregue las redes virtuales y subredes permitidas para acceder al recurso compartido y seleccione Guardar.
En el caso de los recursos compartidos de archivos clásicos, restrinja el acceso al punto de conexión público de la cuenta de almacenamiento a redes virtuales específicas mediante puntos de conexión de servicio. En primer lugar, recopile información sobre la cuenta de almacenamiento y la red virtual. Reemplace los valores de marcador de posición en los pasos siguientes por sus propios valores.
$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
}
Para permitir el tráfico procedente de la red virtual, la infraestructura de red de Azure debe exponer el punto de conexión de servicio Microsoft.Storage en la subred de la red virtual. Los siguientes comandos de PowerShell agregan el punto de conexión de servicio de Microsoft.Storage a la subred si aún no está allí.
$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
}
El último paso para restringir el tráfico a la cuenta de almacenamiento es crear una regla de red y agregarlo al conjunto de reglas de red de la cuenta de almacenamiento.
$networkRule = $storageAccount | Add-AzStorageAccountNetworkRule `
-VirtualNetworkResourceId $subnet.Id `
-ErrorAction Stop
$storageAccount | Update-AzStorageAccountNetworkRuleSet `
-DefaultAction Deny `
-Bypass AzureServices `
-VirtualNetworkRule $networkRule `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Out-Null
Para los recursos compartidos de archivos creados con el proveedor de recursos Microsoft.FileShares, puede pasar los id. de recurso de las subredes permitidas directamente a Update-AzFileShare mediante -AllowedSubnet. No es necesario configurar un punto de conexión de servicio o una regla de red independientes en la cuenta de almacenamiento.
# 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)
En el caso de los recursos compartidos de archivos clásicos, restrinja el acceso al punto de conexión público de la cuenta de almacenamiento a redes virtuales específicas mediante puntos de conexión de servicio. En primer lugar, recopile información sobre la cuenta de almacenamiento y la red virtual. Reemplace los valores de marcador de posición en los pasos siguientes por sus propios valores.
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)
Para permitir el tráfico procedente de la red virtual, la infraestructura de red de Azure debe exponer el punto de conexión de servicio Microsoft.Storage en la subred de la red virtual. Los siguientes comandos de la CLI añaden el punto de conexión de servicio de Microsoft.Storage a la subred si todavía no está presente.
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
El último paso para restringir el tráfico a la cuenta de almacenamiento es crear una regla de red y agregarlo al conjunto de reglas de red de la cuenta de almacenamiento.
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
Para los recursos compartidos de archivos creados con el proveedor de recursos Microsoft.FileShares, puede pasar los id. de recurso de las subredes permitidas directamente a az fileshare update mediante --allowed-subnets. No es necesario configurar un punto de conexión de servicio o una regla de red independientes en la cuenta de almacenamiento.
# 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