Azure Files proporciona dos tipos principales de puntos de conexión para el acceso a los recursos compartidos de archivos de Azure:
Los puntos de conexión públicos y privados existen en la cuenta de almacenamiento de Azure. Una cuenta de almacenamiento es una construcción de administración que representa un grupo compartido de almacenamiento en el que puede implementar varios recursos compartidos de archivos u otros recursos de almacenamiento, como contenedores de blobs o colas.
Este artículo se centra en cómo configurar los puntos de conexión de una cuenta de almacenamiento para acceder directamente al recurso compartido de archivos de 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 las consideraciones de red para Azure File Sync, consulte configuración del proxy y del firewall de Azure File Sync.
Puede configurar los puntos de conexión para restringir el acceso de red a su cuenta de almacenamiento. Existen dos enfoques para restringir el acceso de una cuenta de almacenamiento a una red virtual:
Al crear un punto de conexión privado para la cuenta de almacenamiento, se implementan los siguientes recursos de Azure:
Vaya a la cuenta de almacenamiento para la que desea crear un punto de conexión privado. En la tabla de contenido de la cuenta de almacenamiento, seleccione Redes, Private endpoint connections (Conexiones de punto de conexión privado) y, por último, + Private endpoint (+ Punto de conexión privado) para crear un punto de conexión privado.
El asistente resultante tiene varias páginas que debe completar:
En la hoja Aspectos básicos, seleccione la suscripción, el grupo de recursos, el nombre, el nombre de la interfaz de red y la región que quiera para el punto de conexión privado. Estos pueden ser cualquier cosa que desee y no tienen que coincidir con la cuenta de almacenamiento en ningún aspecto, aunque debe crear el punto de conexión privado en la misma región que la red virtual en la que quiere crear el punto de conexión privado. Después, seleccione Siguiente: Recurso.
En la hoja Recurso, seleccione archivo para el subrecurso de destino. A continuación, seleccione Siguiente: Red virtual.
La hoja Red virtual permite seleccionar la red virtual y la subred específicas a las que le gustaría 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áticas, también deberá 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 hoja DNS contiene la información de integración del punto de conexión privado con una zona DNS privada. Asegúrese de que la suscripción y el grupo de recursos sean correctos y 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.
Haga clic en Revisar y crear para crear el punto de conexión privado.
Para crear un punto de conexión privado para la cuenta de almacenamiento, primero debe obtener una referencia a la cuenta de almacenamiento y la subred de la red virtual a la que quiere agregar el punto de conexión privado. Reemplace <storage-account-resource-group-name>
, <storage-account-name>
, <vnet-resource-group-name>
, <vnet-name>
y <vnet-subnet-name>
a continuación:
$storageAccountResourceGroupName = "<storage-account-resource-group-name>"
$storageAccountName = "<storage-account-name>"
$virtualNetworkResourceGroupName = "<vnet-resource-group-name>"
$virtualNetworkName = "<vnet-name>"
$subnetName = "<vnet-subnet-name>"
# Get storage account reference, and throw error if it doesn't exist
$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
}
# 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 vínculo privado a la cuenta de almacenamiento. 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 to the storage account.
$privateEndpointConnection = New-AzPrivateLinkServiceConnection `
-Name "$storageAccountName-Connection" `
-PrivateLinkServiceId $storageAccount.Id `
-GroupId "file" `
-ErrorAction Stop
# Create a new private endpoint.
$privateEndpoint = New-AzPrivateEndpoint `
-ResourceGroupName $storageAccountResourceGroupName `
-Name "$storageAccountName-PrivateEndpoint" `
-Location $virtualNetwork.Location `
-Subnet $subnet `
-PrivateLinkServiceConnection $privateEndpointConnection `
-ErrorAction Stop
La creación de una zona DNS privada de Azure permite que el nombre original de la cuenta de almacenamiento, como storageaccount.file.core.windows.net
, se resuelva en la dirección IP privada dentro de la red virtual. Aunque desde el punto de vista de la creación de un punto de conexión privado este paso es opcional, se necesita explícitamente para montar el recurso compartido de archivos de Azure directamente con una entidad de seguridad de usuario de AD o para permitir el acceso mediante la API de REST.
# Get the desired storage account suffix (core.windows.net for public cloud).
# This is done like this so this script will seamlessly work for non-public Azure.
$storageAccountSuffix = 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.$storageAccountSuffix"
# 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 D para la cuenta de almacenamiento.
$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 $storageAccountName `
-RecordType A `
-ZoneName $dnsZoneName `
-Ttl 600 `
-PrivateDnsRecords $privateDnsRecordConfig `
-ErrorAction Stop | `
Out-Null
Para crear un punto de conexión privado para la cuenta de almacenamiento, primero debe obtener una referencia a la cuenta de almacenamiento y la subred de la red virtual a la que quiere agregar el punto de conexión privado. Reemplace <storage-account-resource-group-name>
, <storage-account-name>
, <vnet-resource-group-name>
, <vnet-name>
y <vnet-subnet-name>
a continuación:
storageAccountResourceGroupName="<storage-account-resource-group-name>"
storageAccountName="<storage-account-name>"
virtualNetworkResourceGroupName="<vnet-resource-group-name>"
virtualNetworkName="<vnet-name>"
subnetName="<vnet-subnet-name>"
# Get storage account ID
storageAccount=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "id" | \
tr -d '"')
# Get virtual network ID
virtualNetwork=$(az network vnet show \
--resource-group $virtualNetworkResourceGroupName \
--name $virtualNetworkName \
--query "id" | \
tr -d '"')
# Get subnet ID
subnet=$(az network vnet subnet show \
--resource-group $virtualNetworkResourceGroupName \
--vnet-name $virtualNetworkName \
--name $subnetName \
--query "id" | \
tr -d '"')
Para crear un punto de conexión privado, primero debe asegurarse de que la directiva de red del punto de conexión privado de la subred está establecida en deshabilitado. Después, puede crear un punto de conexión privado con el comando 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" | \
tr -d '"')
# Create a private endpoint
privateEndpoint=$(az network private-endpoint create \
--resource-group $storageAccountResourceGroupName \
--name "$storageAccountName-PrivateEndpoint" \
--location $region \
--subnet $subnet \
--private-connection-resource-id $storageAccount \
--group-id "file" \
--connection-name "$storageAccountName-Connection" \
--query "id" | \
tr -d '"')
La creación de una zona DNS privada de Azure permite que el nombre original de la cuenta de almacenamiento, como storageaccount.file.core.windows.net
, se resuelva en la dirección IP privada dentro de la red virtual. Aunque desde el punto de vista de la creación de un punto de conexión privado este paso es opcional, se necesita explícitamente para montar el recurso compartido de archivos de Azure mediante una entidad de seguridad de usuario de AD o para permitir el acceso mediante la API REST.
# Get the desired storage account suffix (core.windows.net for public cloud).
# This is done like this so this script will seamlessly work for non-public Azure.
storageAccountSuffix=$(az cloud show \
--query "suffixes.storageEndpoint" | \
tr -d '"')
# For public cloud, this will generate the following DNS suffix:
# privatelink.file.core.windows.net.
dnsZoneName="privatelink.file.$storageAccountSuffix"
# Find a DNS zone matching desired name attached to this virtual network.
possibleDnsZones=""
possibleDnsZones=$(az network private-dns zone list \
--query "[?name == '$dnsZoneName'].id" \
--output tsv)
dnsZone=""
possibleDnsZone=""
for possibleDnsZone in $possibleDnsZones
do
possibleResourceGroupName=$(az resource show \
--ids $possibleDnsZone \
--query "resourceGroup" | \
tr -d '"')
link=$(az network private-dns link vnet list \
--resource-group $possibleResourceGroupName \
--zone-name $dnsZoneName \
--query "[?virtualNetwork.id == '$virtualNetwork'].id" \
--output tsv)
if [ -z $link ]
then
echo "1" > /dev/null
else
dnsZoneResourceGroup=$possibleResourceGroupName
dnsZone=$possibleDnsZone
break
fi
done
if [ -z $dnsZone ]
then
# No matching DNS zone attached to virtual network, so create a new one
dnsZone=$(az network private-dns zone create \
--resource-group $virtualNetworkResourceGroupName \
--name $dnsZoneName \
--query "id" | \
tr -d '"')
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, debe crear un registro D para la cuenta de almacenamiento.
privateEndpointNIC=$(az network private-endpoint show \
--ids $privateEndpoint \
--query "networkInterfaces[0].id" | \
tr -d '"')
privateEndpointIP=$(az network nic show \
--ids $privateEndpointNIC \
--query "ipConfigurations[0].privateIPAddress" | \
tr -d '"')
az network private-dns record-set a create \
--resource-group $dnsZoneResourceGroup \
--zone-name $dnsZoneName \
--name $storageAccountName \
--output none
az network private-dns record-set a add-record \
--resource-group $dnsZoneResourceGroup \
--zone-name $dnsZoneName \
--record-set-name $storageAccountName \
--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). Debe reemplazar <storage-account-name>
por el nombre adecuado de la cuenta de almacenamiento:
nslookup <storage-account-name>.file.core.windows.net
Si se ejecuta correctamente, debería ver la siguiente salida, 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
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:
$storageAccountHostName = [System.Uri]::new($storageAccount.PrimaryEndpoints.file) | `
Select-Object -ExpandProperty Host
Resolve-DnsName -Name $storageAccountHostName
Si se ejecuta correctamente, debería ver la siguiente salida, 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
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:
httpEndpoint=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "primaryEndpoints.file" | \
tr -d '"')
hostName=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint) | tr -d "/")
nslookup $hostName
Si todo se realiza correctamente, debería ver la siguiente salida, donde 192.168.0.5
es la dirección IP privada del punto de conexión privado en la red virtual. Todavía debe usar storageaccount.file.core.windows.net
para montar el recurso compartido de archivos en lugar de la ruta de acceso privatelink
.
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 limitar el acceso al punto de conexión público es necesario deshabilitar 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. Una vez deshabilitado el punto de conexión público, puede seleccionar 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.
Si el acceso al punto de conexión público está deshabilitado, aún se puede acceder a la cuenta de almacenamiento a través de los puntos de conexión privados. De lo contrario, se rechazarán las solicitudes válidas al punto de conexión público de la cuenta de almacenamiento, a menos que provengan de un origen permitido específicamente.
Vaya a la cuenta de almacenamiento para la que desea restringir todo el acceso al punto de conexión público. En la tabla de contenido de la cuenta de almacenamiento, seleccione la entrada Redes.
En la parte superior de la página, seleccione el botón de radio Habilitado desde redes virtuales y direcciones IP seleccionadas. Esta acción anulará la ocultación de una serie de opciones para controlar la restricción del punto de conexión público. Seleccione Permitir que los servicios de Azure de la lista de servicios de confianza accedan a esta cuenta de almacenamiento para permitir que los servicios de Microsoft de confianza de terceros, como Azure File Sync, accedan a la cuenta de almacenamiento.
El siguiente comando de PowerShell denegará todo el tráfico que llega al punto de conexión público de la cuenta de almacenamiento. Tenga en cuenta que este comando tiene el parámetro -Bypass
establecido en AzureServices
. De esta forma, los servicios propios de confianza, como Azure File Sync, acceden a la cuenta de almacenamiento mediante el punto de conexión público.
# This assumes $storageAccount is still defined from the beginning of this of this guide.
$storageAccount | Update-AzStorageAccountNetworkRuleSet `
-DefaultAction Deny `
-Bypass AzureServices `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Out-Null
El siguiente comando de la CLI denegará todo el tráfico que llega al punto de conexión público de la cuenta de almacenamiento. Tenga en cuenta que este comando tiene el parámetro -bypass
establecido en AzureServices
. De esta forma, los servicios propios de confianza, como Azure File Sync, acceden a la cuenta de almacenamiento mediante el 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
Al restringir la cuenta de almacenamiento a redes virtuales específicas, permite solicitudes al punto de conexión público desde las redes virtuales especificadas. Para ello, se usa una funcionalidad de la red virtual llamada puntos de conexión de servicio. Esta funcionalidad se puede usar con o sin puntos de conexión privados.
Vaya a la cuenta de almacenamiento para la que desea restringir el punto de conexión público a redes virtuales específicas. En la tabla de contenido de la cuenta de almacenamiento, seleccione la entrada Redes.
En la parte superior de la página, seleccione el botón de radio Habilitado desde redes virtuales y direcciones IP seleccionadas. Esta acción anulará la ocultación de una serie de opciones para controlar la restricción del punto de conexión público. Seleccione +Agregar red virtual existente para seleccionar la red virtual específica a la que se debe permitir el acceso a la cuenta de almacenamiento a través del punto de conexión público. Seleccione una red virtual y una subred para esa red virtual y, luego, elija Habilitar.
Seleccione Permitir que los servicios de Azure de la lista de servicios de confianza accedan a esta cuenta de almacenamiento para permitir que los servicios de Microsoft de confianza de terceros, como Azure File Sync, accedan a la cuenta de almacenamiento.
Para restringir 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, primero es necesario recopilar información sobre la cuenta de almacenamiento y la red virtual. Rellene <storage-account-resource-group>
, <storage-account-name>
, <vnet-resource-group-name>
, <vnet-name>
y <subnet-name>
para recopilar esta información.
$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 que el tejido de red de Azure permita que el tráfico de la red virtual llegue al punto de conexión público de la cuenta de almacenamiento, la subred de la red virtual debe tener expuesto el punto de conexión de servicio Microsoft.Storage
. Los siguientes comandos de PowerShell agregarán el punto de conexión de servicio Microsoft.Storage
a la subred, si aún no está ahí.
$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 en la restricción del tráfico a la cuenta de almacenamiento es crear una regla de red y agregarla 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 restringir 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, primero es necesario recopilar información sobre la cuenta de almacenamiento y la red virtual. Rellene <storage-account-resource-group>
, <storage-account-name>
, <vnet-resource-group-name>
, <vnet-name>
y <subnet-name>
para recopilar esta información.
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" | \
tr -d '"')
virtualNetwork=$(az network vnet show \
--resource-group $restrictToVirtualNetworkResourceGroupName \
--name $restrictToVirtualNetworkName \
--query "id" | \
tr -d '"')
subnet=$(az network vnet subnet show \
--resource-group $restrictToVirtualNetworkResourceGroupName \
--vnet-name $restrictToVirtualNetworkName \
--name $subnetName \
--query "id" | \
tr -d '"')
Para que el tejido de red de Azure permita que el tráfico de la red virtual llegue al punto de conexión público de la cuenta de almacenamiento, la subred de la red virtual debe tener expuesto el punto de conexión de servicio Microsoft.Storage
. Los siguientes comandos de la CLI agregarán el punto de conexión de servicio Microsoft.Storage
a la subred, si aún no está ahí.
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 en la restricción del tráfico a la cuenta de almacenamiento es crear una regla de red y agregarla 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