Azure Files proporciona dos tipos principales de puntos de conexión para el acceso a los recursos compartidos de archivos de Azure:
- Endpoints públicos, que tienen una dirección IP pública. El acceso depende del protocolo y de las reglas de red. Los clientes NFS utilizan endpoints de servicio de subredes permitidas.
- Puntos de conexión privados, que existen dentro de una red virtual y tienen una dirección IP privada en el espacio de direcciones de esa red virtual.
En el caso de los recursos compartidos de archivos clásicos (creados con el Microsoft.Storage proveedor de recursos), la cuenta de almacenamiento de Azure tiene puntos de conexión públicos y privados. En el caso de los recursos compartidos de archivos creados con el Microsoft.FileShares proveedor de recursos, se crean puntos de conexión públicos y privados en el nivel de recurso compartido de archivos en lugar del nivel de cuenta de almacenamiento.
Este artículo explica cómo configurar puntos finales privados y restringir el acceso a los puntos finales públicos para ambos proveedores de recursos. La guía clásica de intercambio de archivos también se aplica a las cuentas de almacenamiento usadas con Azure File Sync, que soporta los recursos compartidos de archivos SMB clásicos. Para los requisitos de red de sincronización de archivos, consulta Configurar configuración de proxy y firewall de Azure File Sync.
Antes de leer esta guía, consulte las consideraciones de red de Azure Files.
Requisitos previos
Puedes restringir el acceso de red a tus recursos compartidos de archivos configurando la cuenta de almacenamiento para los recursos compartidos clásicos o para el recurso individual Microsoft.FileShares. Para restringir el acceso a una red virtual, utiliza uno de los siguientes enfoques:
Creación de un punto de conexión privado
Al crear un punto de conexión privado para los recursos compartidos de archivos, implemente los siguientes recursos Azure:
-
Un punto de conexión privado: un recurso Azure que representa el punto de conexión privado. Puede considerar este recurso como un conector entre un recurso de destino y una interfaz de red.
-
Una interfaz de red (NIC): la interfaz de red que mantiene una dirección IP privada dentro de la red virtual y la subred especificadas. Este recurso es el mismo que el que se implementa al implementar una máquina virtual (VM). Sin embargo, en lugar de asignarlo a una máquina virtual, el punto de conexión privado lo posee.
-
Una zona privada del Sistema de Nombres de Dominio (DNS): Estos pasos crean o reutilizan una zona DNS privada de Azure vinculada a la red virtual y añaden un registro A para el punto final privado. Puedes usar tu propia infraestructura DNS, siempre que los clientes resuelvan el nombre de host del recurso compartido de archivos a la dirección IP del endpoint privado.
Nota:
En Azure public cloud, ambos proveedores de recursos utilizan la zona privatelink.file.core.windows.netDNS privada. Sus nombres de host de cliente difieren; véase Verificar conectividad para ejemplos. Para recursos compartidos de archivos clásicos en otras nubes de Azure, utilice el sufijo del punto de conexión de almacenamiento correspondiente a esa nube. Comprueba la disponibilidad regional antes de desplegar Microsoft.FileShares.
Clásico frente a Microsoft.FileShares
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.
|
Recursos compartidos de archivos clásicos (Microsoft.Storage) |
Recursos compartidos de archivos (Microsoft.FileShares) |
|
Objetivo del punto de conexión privado |
Cuenta de almacenamiento |
Compartición de archivos |
|
Cmdlet de recursos |
Get-AzStorageAccount |
Get-AzFileShare |
|
Id. de grupo (subrecurso) |
file |
FileShare |
|
Nombre de registro A de DNS |
Nombre de la cuenta de almacenamiento |
Prefijo de nombre de host (por ejemplo, fs-xxxxxxxxxxxxxxxxx) |
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.
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.
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.
Obtén 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
Obtén una referencia al archivo compartido:
$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
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
Vincula la zona DNS privada de Azure a la red virtual para que los clientes resuelvan el nombre de host original del recurso compartido de archivos a la dirección IP del endpoint privado. Los siguientes pasos se aplican a ambos proveedores de recursos.
# 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.
Obtén 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
Obtén una referencia al archivo compartido:
# 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)
Vincule la zona DNS privada de Azure a la red virtual para que los clientes resuelvan el nombre de host original del recurso compartido de archivos a la dirección IP del punto de conexión privado. Los siguientes pasos se aplican a ambos proveedores de recursos.
# 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
Verificación de la conectividad
Ejecuta las comprobaciones desde un cliente en la red virtual, o desde una red conectada con DNS configurado para resolver el punto final privado. Para las diferencias entre proveedores de recursos, véase resolución DNS. Usa el nombre original del host para montar el share, no el privatelink nombre.
Ejecuta la siguiente consulta DNS desde PowerShell, la línea de comandos o un terminal en Windows, Linux o macOS.
Sustituye <storage-account-name> por el nombre de cuenta de almacenamiento correspondiente:
nslookup <storage-account-name>.file.core.windows.net
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).
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
Usa el nombre de host del archivo compartido. 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).
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
Ejecuta los siguientes comandos PowerShell para verificar la resolución DNS:
$storageAccountHostName = [System.Uri]::new($storageAccount.PrimaryEndpoints.file) | `
Select-Object -ExpandProperty Host
Resolve-DnsName -Name $storageAccountHostName
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.
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
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.
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
Ejecuta los siguientes comandos para recuperar el nombre del host y verificar la resolución DNS:
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
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. Deberías seguir usando el nombre de host original (storageaccount.file.core.windows.net) para montar tu archivo compartido en lugar de la privatelink ruta.
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
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. Deberías seguir usando el hostName original del recurso compartido de archivos para montar tu recurso compartido de archivos en lugar de la ruta privatelink.
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
Restricción del acceso al punto de conexión público
Puedes desactivar el acceso a redes públicas o mantenerlo activado para redes seleccionadas. Son configuraciones separadas. Los endpoints privados continúan funcionando en cualquiera de las dos configuraciones.
Para los recursos compartidos de archivos clásicos, configura el acceso público en la cuenta de almacenamiento. Para Microsoft.FileShares, configúralo en el recurso compartido de archivos individual. Los recursos compartidos de archivos clásicos también pueden utilizar un perímetro de seguridad de red, sujeto a las limitaciones de sus protocolos. En modo Enforced mode, un perímetro bloquea el tráfico NFS a través de los puntos finales de servicio.
Deshabilitación del acceso al punto de conexión público
Cuando desactivas el acceso a la red pública, los clientes no pueden conectarse a través del endpoint público, incluidos los endpoints de servicio. Los clientes aún pueden conectarse a través de endpoints privados. Esta configuración no restringe el tráfico saliente desde los clientes.
Nota:
Para los recursos compartidos de archivos clásicos, las excepciones existentes de servicio de confianza y de instancia de recurso pueden permanecer vigentes después de desactivar el acceso a la red pública. Revisa estas excepciones si solo necesitas acceso a través de endpoints privados. Consulta las limitaciones de seguridad de red en Azure Storage.
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.
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.
Para recursos compartidos de archivos clásicos, establezca -PublicNetworkAccess en Disabled en la cuenta de almacenamiento.
# Use the storage account variables from the beginning of this guide.
Set-AzStorageAccount `
-ResourceGroupName $storageAccountResourceGroupName `
-Name $storageAccountName `
-PublicNetworkAccess Disabled `
-ErrorAction Stop |
Out-Null
Configura -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
Para recursos compartidos de archivos clásicos, establezca --public-network-access en Disabled en la cuenta de almacenamiento.
# This assumes $storageAccountResourceGroupName and $storageAccountName
# are still defined from the beginning of this guide.
az storage account update \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--public-network-access Disabled \
--output none
Configura --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
Restringir el acceso al punto final público a redes específicas
Para permitir clientes de subredes seleccionadas, mantener activado el acceso público a la red, habilitar los puntos finales de servicio en esas subredes y añadir las subredes a las reglas de red del recurso. Puedes usar endpoints de servicio con o sin endpoints privados. El acceso clásico SMB y FileREST también puede usar reglas de dirección IP; el acceso NFS requiere subredes permitidas.
Los ejemplos de PowerShell y CLI asumen que el acceso público a la red ya está habilitado. Los ejemplos de Microsoft. FileShares también asumen que la subred del cliente ya tiene el Microsoft.Storage endpoint del servicio. Para configurar ese endpoint, consulta Habilitar endpoints de servicio en una subred.
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.
- Para acceso a SMB o FileREST, usa direcciones IPv4 para especificar cualquier dirección IP pública de internet que quieras permitir. Las reglas de dirección IP no conceden acceso a NFS.
- Si una integración de servicios requiere acceso de servicios de confianza, seleccione la casilla Permitir que los servicios de Microsoft de confianza accedan a este recurso.
- Haga clic en Guardar.
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 `
-VirtualNetworkRule $networkRule `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Out-Null
Estos comandos conservan los ajustes de bypass existentes. Si una integración requiere acceso a un servicio confiable, añade -Bypass AzureServices al comando de actualización. El parámetro sustituye la configuración de bypass, así que incluye cualquier otra opción de bypass que tu carga de trabajo aún requiera.
Pasa los IDs de recursos de subred permitidos a Update-AzFileShare usando -AllowedSubnet. Las reglas de red se aplican directamente al recurso compartido de archivos, así que no hay cuenta de almacenamiento que configurar. La subred del cliente sigue necesitando un endpoint de servicio, como se describe en los requisitos previos anteriores.
# 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 \
--default-action "Deny" \
--output none
Estos comandos conservan los ajustes de bypass existentes. Si una integración requiere acceso de servicio de confianza, añada --bypass AzureServices al comando de actualización. La opción reemplaza la configuración de bypass, así que incluye cualquier otra opción de bypass que tu carga de trabajo aún requiera.
Pasa los IDs de recursos de subred permitidos a az fileshare update usando --allowed-subnets. Las reglas de red se aplican directamente al recurso compartido de archivos, así que no hay cuenta de almacenamiento que configurar. La subred del cliente sigue necesitando un endpoint de servicio, como se describe en los requisitos previos anteriores.
# 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
Restringir el acceso saliente a cuentas de almacenamiento específicas
Las reglas de red para un archivo compartido controlan el acceso entrante. No limitan a qué otros recursos de almacenamiento pueden acceder los clientes. Para los recursos compartidos de archivos clásicos, opcionalmente puedes usar una política de endpoint de servicio para limitar a qué cuentas de almacenamiento los clientes de una subred pueden acceder a través de endpoints de servicio. La política filtra los destinos para el tráfico que elude Azure Firewall y las appliances virtuales de red. No restringe otras rutas salientes ni reemplaza las reglas de red y los requisitos de autorización del destino. Para más información, consulte Restringir el acceso saliente con políticas de endpoint de servicio.
Importante
Actualmente, las directivas de puntos de conexión de servicio no son compatibles con los recursos compartidos de archivos Microsoft.FileShares. Una directiva en la subred del cliente bloquea el acceso a esos recursos compartidos de archivos a través de puntos de conexión de servicio, incluso si permite su suscripción o grupo de recursos. Esta restricción también se aplica a las subredes que acceden tanto a recursos compartidos de archivos clásicos como a Microsoft.FileShares. Los clientes de esa subred deben utilizar un punto de conexión privado para acceder a los recursos compartidos de archivos de Microsoft.FileShares.
Una política de endpoint de servicio define los destinos de almacenamiento permitidos para los clientes en la subred asociada. Bloquea que esos clientes accedan a otras cuentas de almacenamiento a través de endpoints de servicio. Tenga en cuenta estos puntos:
- Incluye todas las cuentas de almacenamiento que usan los clientes en la subred antes de asociar la política con la subred. Esta lista incluye cuentas de almacenamiento que otras cargas de trabajo de la subred utilizan.
- La política de endpoint de servicio debe estar en la misma región y suscripción que la red virtual.
- Una política solo puede contener una definición de política para el
Microsoft.Storage servicio. Para permitir más cuentas de almacenamiento, añade sus IDs de recursos a la misma definición de política. También puedes permitir todas las cuentas de almacenamiento en un grupo de recursos o suscripción.
- Después de asociar una política con una subred, la política se aplica al tráfico hacia cuentas de almacenamiento en todas las regiones.
- Estos pasos asumen que la subred no tiene políticas de endpoint de servicio. Si ya hay directivas asociadas, revíselas y actualícelas en lugar de sustituir sus asociaciones. Los ejemplos de PowerShell y CLI se detienen si encuentran asociaciones existentes.
Para crear una política de endpoint de servicio y asociarla a una subred, sigue estos pasos. Para pasos detallados, consulte Crear y asociar políticas de endpoint de servicio.
- En el cuadro de búsqueda situado en la parte superior del Azure Portal, escribe Política de punto de conexión de servicio. Seleccione Directivas de punto de conexión de servicio en los resultados de búsqueda.
- Seleccione + Create.
- En la pestaña Básicos , selecciona la suscripción y la región de tu red virtual. Selecciona un grupo de recursos y introduce un nombre para la directiva.
- Seleccione Siguiente: definiciones de directiva.
- Seleccionar + Añadir un recurso. En Servicio, selecciona Microsoft.Storage. En Ámbito, selecciona Cuenta única y, a continuación, selecciona la cuenta de almacenamiento que contiene tus recursos compartidos de archivos. Seleccione Agregar. Repite este paso para cada cuenta de almacenamiento que usen los clientes en la subred.
- Seleccione Revisar y crear y, a continuación, seleccione Crear.
- Accede a la nueva directiva de punto de conexión de servicio. Desde el menú de servicio, en Configuración, selecciona Subredes asociadas.
- Selecciona + Editar asociación de subred, selecciona la red virtual y la subred, y luego selecciona Aplicar.
Los siguientes comandos de PowerShell crean una política de endpoint de servicio y la asocian a una subred. La política limita el acceso del cliente desde esa subred a una sola cuenta de almacenamiento a través del endpoint de servicio. La subred debe tener ya el Microsoft.Storage endpoint de servicio. Reemplace los valores de los marcadores de posición por sus propios valores.
$storageAccountResourceGroupName = "<storage-account-resource-group>"
$storageAccountName = "<storage-account-name>"
$virtualNetworkResourceGroupName = "<vnet-resource-group-name>"
$virtualNetworkName = "<vnet-name>"
$subnetName = "<subnet-name>"
$policyName = "<service-endpoint-policy-name>"
$storageAccount = Get-AzStorageAccount `
-ResourceGroupName $storageAccountResourceGroupName `
-Name $storageAccountName `
-ErrorAction Stop
$virtualNetwork = Get-AzVirtualNetwork `
-ResourceGroupName $virtualNetworkResourceGroupName `
-Name $virtualNetworkName `
-ErrorAction Stop
$subnet = $virtualNetwork.Subnets | Where-Object { $_.Name -eq $subnetName }
if ($null -eq $subnet) {
throw "Subnet '$subnetName' wasn't found in virtual network '$virtualNetworkName'."
}
if ($subnet.ServiceEndpointPolicies.Count -gt 0) {
throw "The subnet already has service endpoint policies. Review and update them before changing the configuration."
}
# To allow clients to access more storage accounts, add their resource IDs to -ServiceResource.
$policyDefinition = New-AzServiceEndpointPolicyDefinition `
-Name "allowed-storage-accounts" `
-Service "Microsoft.Storage" `
-ServiceResource @($storageAccount.Id) `
-ErrorAction Stop
$policy = New-AzServiceEndpointPolicy `
-ResourceGroupName $virtualNetworkResourceGroupName `
-Name $policyName `
-Location $virtualNetwork.Location `
-ServiceEndpointPolicyDefinition $policyDefinition `
-ErrorAction Stop
$subnet.ServiceEndpointPolicies = @($policy)
$virtualNetwork | Set-AzVirtualNetwork -ErrorAction Stop | Out-Null
Los siguientes comandos CLI crean una política de endpoint de servicio y la asocian con una subred. La política limita el acceso del cliente desde esa subred a una sola cuenta de almacenamiento a través del endpoint de servicio. La subred debe tener ya el Microsoft.Storage endpoint de servicio. Reemplace los valores de los marcadores de posición por sus propios valores.
storageAccountResourceGroupName="<storage-account-resource-group>"
storageAccountName="<storage-account-name>"
virtualNetworkResourceGroupName="<vnet-resource-group-name>"
virtualNetworkName="<vnet-name>"
subnetName="<subnet-name>"
policyName="<service-endpoint-policy-name>"
existingPolicyIds=$(az network vnet subnet show \
--resource-group $virtualNetworkResourceGroupName \
--vnet-name $virtualNetworkName \
--name $subnetName \
--query "serviceEndpointPolicies[].id" --output tsv) || exit 1
if [ -n "$existingPolicyIds" ]; then
echo "The subnet already has service endpoint policies. Review and update them before changing the configuration." >&2
exit 1
fi
storageAccountId=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "id" --output tsv) || exit 1
location=$(az network vnet show \
--resource-group $virtualNetworkResourceGroupName \
--name $virtualNetworkName \
--query "location" --output tsv) || exit 1
az network service-endpoint policy create \
--resource-group $virtualNetworkResourceGroupName \
--name $policyName \
--location $location \
--output none || exit 1
# To allow clients to access more storage accounts, add their resource IDs to --service-resources.
az network service-endpoint policy-definition create \
--resource-group $virtualNetworkResourceGroupName \
--policy-name $policyName \
--name "allowed-storage-accounts" \
--service "Microsoft.Storage" \
--service-resources $storageAccountId \
--output none || exit 1
az network vnet subnet update \
--resource-group $virtualNetworkResourceGroupName \
--vnet-name $virtualNetworkName \
--name $subnetName \
--service-endpoint-policy $policyName \
--output none || exit 1
Para acceder a un recurso compartido de archivos de Microsoft.FileShares desde una subred que tenga una política de endpoint de servicio, crea un endpoint privado para el recurso compartido de archivos. Las políticas de endpoint de servicio no se aplican al tráfico que pasa por un endpoint privado.
Consulte también