Configurar pontos de extremidade de rede para acessar compartilhamentos de arquivos do Azure
Artigo
Os Arquivos do Azure fornecem dois tipos principais de pontos de extremidade para acessar compartilhamentos de arquivos do Azure:
Pontos de extremidade públicos, que têm um endereço IP público e podem ser acessados de qualquer lugar do mundo.
Pontos de extremidade privados, que existem em uma rede virtual e têm um endereço IP privado dentro do espaço de endereço dessa rede virtual.
Pontos de extremidade públicos e privados existem na conta de armazenamento do Azure. Uma conta de armazenamento é um constructo de gerenciamento que representa um pool compartilhado de armazenamento no qual você pode implantar vários compartilhamentos de arquivos bem como outros recursos de armazenamento, como filas ou contêineres de blob.
Este artigo se concentra em como configurar os pontos de extremidade de uma conta de armazenamento para acessar o compartilhamento de arquivos do Azure diretamente. Grande parte deste artigo também se aplica a como a Sincronização de Arquivos do Azure interopera com pontos de extremidade públicos e privados para a conta de armazenamento. Para obter mais informações sobre considerações de rede para a Sincronização de Arquivos do Azure, consulte Como configurar as definições de firewall e proxy da Sincronização de Arquivos do Azure.
Compartilhamentos de arquivos padrão (GPv2), LRS/ZRS
Compartilhamentos de arquivos padrão (GPv2), GRS/GZRS
Compartilhamento de arquivos premium (FileStorage), LRS/ZRS
Pré-requisitos
Este artigo pressupõe que você já tenha criado uma assinatura do Azure. Se você ainda não tiver uma assinatura, crie uma conta gratuita antes de começar.
Este artigo pressupõe que você já tenha criado um compartilhamento de arquivo do Azure em uma conta de armazenamento à qual deseja se conectar do local. Para saber como criar um compartilhamento de arquivo do Azure, confira Criar um compartilhamento de arquivo do Azure.
É possível configurar seus pontos de extremidade para restringir o acesso à rede para sua conta de armazenamento. Há duas abordagens para a restrição do acesso a uma conta de armazenamento a uma rede virtual:
Restrinja o ponto de extremidade público a uma ou mais redes virtuais. Isso funciona usando uma funcionalidade da rede virtual denominada pontos de extremidade de serviço. Ao restringir o tráfego para uma conta de armazenamento por meio de um ponto de extremidade de serviço, você ainda está acessando a conta de armazenamento por meio do IP, mas o acesso só é possível dos locais especificados na sua configuração.
Criar um ponto de extremidade privado
Quando você cria um ponto de extremidade privado para sua conta de armazenamento, os seguintes recursos do Azure são implantados:
Um ponto de extremidade privado: um recurso do Azure que representa o ponto de extremidade privado da conta de armazenamento. Considere-o como um recurso que conecta uma conta de armazenamento e uma interface de rede.
Uma NIC (adaptador de rede) : o adaptador de rede que mantém um endereço IP privado dentro da rede virtual/sub-rede especificada. É exatamente o mesmo recurso que é implantado quando você implanta uma máquina virtual (VM). No entanto, em vez de ser atribuído a uma VM, ele pertence ao ponto de extremidade privado.
Uma zona DNS (Sistema de Nomes de Domínio) privada: se você não tiver implantado um ponto de extremidade privado para essa rede virtual antes, uma nova zona DNS privada será implantada para sua rede virtual. Um registro DNS A também será criado para a conta de armazenamento nesta zona DNS. Se você já tiver implantado um ponto de extremidade privado nessa rede virtual, um novo registro A para a conta de armazenamento será adicionado à zona DNS existente. Implantar uma zona DNS é opcional. No entanto, é altamente recomendado e necessário se você estiver montando seus compartilhamentos de arquivos do Azure com uma entidade de serviço do AD ou usando a API FileREST.
Observação
Este artigo usa o sufixo DNS da conta de armazenamento para as regiões Públicas do Azure, core.windows.net. Este comentário também se aplica às nuvens soberanas do Azure, como a nuvem do Azure para o Governo dos EUA e a nuvem operada pelo Microsoft Azure operada pela 21Vianet. Basta substituir os sufixos apropriados para seu ambiente.
Navegue até a conta de armazenamento para a qual gostaria de criar o ponto de extremidade privado. Na sumário da conta de armazenamento, selecione Rede, Conexões de ponto de extremidade privado e + Ponto de extremidade privado para criar um ponto de extremidade privado.
O assistente resultante tem várias páginas a serem preenchidas.
Na folha Básico, selecione a assinatura, o grupo de recursos, o nome, o nome do adaptador de rede e a região desejados para o ponto de extremidade privado. Essas configurações podem ter o valor que você quiser, elas não precisam corresponder à conta de armazenamento, embora seja necessário criar o ponto de extremidade privado na mesma região que a rede virtual na qual você deseja criá-lo. Em seguida, selecione Avançar: Recurso .
Na folha Recurso, selecione o arquivo para o sub-recurso de destino. Selecione Próximo: Rede Virtual.
A folha Rede Virtual permite que você selecione a rede virtual específica e a sub-rede à qual deseja adicionar o ponto de extremidade privado. Selecione a alocação de endereço IP dinâmico ou estático para o novo ponto de extremidade privado. Se selecionar estático, você também precisará fornecer um nome e um endereço IP privado. Você também pode especificar um grupo de segurança do aplicativo. Quando terminar, selecione Avançar: DNS.
A folha DNS contém as informações para integrar o ponto de extremidade privado a uma zona DNS privada. Verifique se a assinatura e o grupo de recursos estão corretos e selecione Avançar: marcas.
Opcionalmente, você pode aplicar marcas para categorizar seus recursos, como aplicar o Ambiente de nome e o Teste de valor a todos os recursos de teste. Insira pares de nome/valor, se desejar, e selecione Avançar: Examinar + criar.
Clique em Examinar + Criar para criar o ponto de extremidade privado.
Para criar um ponto de extremidade privado para sua conta de armazenamento, primeiro você precisa obter uma referência à sua conta de armazenamento e à sub-rede da rede virtual à qual deseja adicionar o ponto de extremidade privado. Substitua <storage-account-resource-group-name>, <storage-account-name>, <vnet-resource-group-name>, <vnet-name> e <vnet-subnet-name> abaixo:
$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 criar um ponto de extremidade privado, você precisa criar uma conexão de serviço de link privado com a conta de armazenamento. A conexão do serviço de link privado é uma entrada para a criação do ponto de extremidade 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
A criação de uma zona DNS privada do Azure permite que o nome original da conta de armazenamento, como storageaccount.file.core.windows.net, seja resolvido para o IP privado dentro da rede virtual. Embora seja opcional do ponto de vista da criação de um ponto de extremidade privado, ela é explicitamente necessária para montar o compartilhamento de arquivo do Azure diretamente usando uma entidade de usuário do AD ou acessando pela 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 = 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
}
Agora que tem uma referência à zona DNS privada, você precisa criar um registro A para sua conta de armazenamento.
Para criar um ponto de extremidade privado para sua conta de armazenamento, primeiro você precisa obter uma referência à sua conta de armazenamento e à sub-rede da rede virtual à qual deseja adicionar o ponto de extremidade privado. Substitua <storage-account-resource-group-name>, <storage-account-name>, <vnet-resource-group-name>, <vnet-name> e <vnet-subnet-name> abaixo:
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 criar um ponto de extremidade privado, primeiro você precisa garantir que a política de rede do ponto de extremidade privado da sub-rede esteja configurada como desabilitada. Em seguida, você pode criar o ponto de extremidade privado com o comando az network private-endpoint create.
A criação de uma zona DNS privada do Azure permite que o nome original da conta de armazenamento, como storageaccount.file.core.windows.net, seja resolvido para o IP privado dentro da rede virtual. Embora seja opcional do ponto de vista da criação de um ponto de extremidade privado, ela é explicitamente necessária para montar o compartilhamento de arquivo do Azure usando uma entidade de usuário do AD ou acessando pela 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
Agora que tem uma referência à zona DNS privada, você precisa criar um registro A para sua conta de armazenamento.
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
Se tiver uma VM dentro de sua rede virtual ou se tiver configurado o encaminhamento de DNS conforme descrito em Como configurar o encaminhamento de DNS para Arquivos do Azure, você pode testar se o ponto de extremidade privado está instalado corretamente. Execute os seguintes comandos do PowerShell, da linha de comando ou do terminal (funciona para Windows, Linux ou macOS). Substitua <storage-account-name> pelo nome da conta de armazenamento apropriada:
Se tiver êxito, você deverá ver a seguinte saída, na qual 192.168.0.5 é o endereço IP privado do ponto de extremidade privado em sua rede virtual (saída mostrada para o Windows):
Se tiver uma VM dentro de sua rede virtual ou se tiver configurado o encaminhamento de DNS conforme descrito em Como configurar o encaminhamento de DNS para Arquivos do Azure, você pode testar se o ponto de extremidade privado está instalado corretamente executando os seguintes comandos:
Se tiver êxito, você deverá ver a saída a seguir, na qual 192.168.0.5 é o endereço IP privado do ponto de extremidade privado em sua rede 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
Se tiver uma VM dentro de sua rede virtual ou se tiver configurado o encaminhamento de DNS conforme descrito em Como configurar o encaminhamento de DNS para Arquivos do Azure, você pode testar se o ponto de extremidade privado está instalado corretamente executando os seguintes comandos:
Se tiver êxito, você deverá ver a saída a seguir, na qual 192.168.0.5 é o endereço IP privado do ponto de extremidade privado em sua rede virtual. Você ainda deve usar storageaccount.file.core.windows.net para montar o compartilhamento de arquivos em vez do caminho privatelink.
Limitar o acesso ao ponto de extremidade público exige, primeiro, que o acesso geral ao ponto de extremidade público seja desabilitado. Desabilitar o acesso ao ponto de extremidade público não afeta pontos de extremidades privados. Assim que o ponto de extremidade público estiver desabilitado, será possível selecionar redes ou endereços IP específicos que podem continuar a acessá-lo. Em geral, a maioria das políticas de firewall para uma conta de armazenamento restringe o acesso de rede a uma ou mais redes virtuais.
Desabilitar o acesso ao ponto de extremidade público
Quando o acesso ao ponto de extremidade público está desabilitado, a conta de armazenamento ainda pode ser acessada por meio de seus pontos de extremidade privados. Caso contrário, as solicitações válidas para o ponto de extremidade público da conta de armazenamento serão rejeitadas, a menos que sejam de uma fonte especificamente permitida.
Navegue até a conta de armazenamento para a qual gostaria de restringir todo o acesso ao ponto de extremidade público. No sumário da conta de armazenamento, selecione Rede.
Na parte superior da página, selecione o botão de opção Habilitado de redes virtuais e endereços IP selecionados. Isso exibirá várias configurações para controlar a restrição do ponto de extremidade público. Selecione Permitir que os serviços do azure na lista de serviços confiáveis acessem esta conta de armazenamento para permitir que serviços confiáveis da Microsoft, como a Sincronização de Arquivos do Azure, acessem a conta de armazenamento.
O comando do PowerShell a seguir negará todo o tráfego para o ponto de extremidade público da conta de armazenamento. Observe que esse comando tem o parâmetro -Bypass definido como AzureServices. Isso permitirá que serviços próprios confiáveis, como a Sincronização de Arquivos do Azure, acessem a conta de armazenamento por meio do ponto de extremidade 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
O comando da CLI a seguir negará todo o tráfego para o ponto de extremidade público da conta de armazenamento. Observe que esse comando tem o parâmetro -bypass definido como AzureServices. Isso permitirá que serviços próprios confiáveis, como a Sincronização de Arquivos do Azure, acessem a conta de armazenamento por meio do ponto de extremidade 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
Restringir o acesso ao ponto de extremidade público para redes virtuais específicas
Ao restringir a conta de armazenamento para redes virtuais específicas, você permite solicitações ao ponto de extremidade público de dentro das redes virtuais especificadas. Isso funciona usando uma funcionalidade da rede virtual denominada pontos de extremidade de serviço. Isso pode ser usado com ou sem pontos de extremidade privados.
Navegue até a conta de armazenamento para a qual gostaria de restringir o ponto de extremidade público para redes virtuais específicas. No sumário da conta de armazenamento, selecione Rede.
Na parte superior da página, selecione o botão de opção Habilitado de redes virtuais e endereços IP selecionados. Isso exibirá várias configurações para controlar a restrição do ponto de extremidade público. Selecione + Adicionar rede virtual existente para selecionar a rede virtual específica que deve ter permissão para acessar a conta de armazenamento por meio do ponto de extremidade público. Selecione uma rede virtual e uma sub-rede para essa rede virtual e selecione Habilitar.
Selecione Permitir que os serviços do azure na lista de serviços confiáveis acessem esta conta de armazenamento para permitir que serviços confiáveis da Microsoft, como a Sincronização de Arquivos do Azure, acessem a conta de armazenamento.
Para restringir o acesso ao ponto de extremidade público da conta de armazenamento para redes virtuais específicas usando pontos de extremidades de serviço, primeiro precisamos coletar informações sobre a conta de armazenamento e a rede virtual. Preencha <storage-account-resource-group>, <storage-account-name>, <vnet-resource-group-name>, <vnet-name> e <subnet-name> para coletar essas informações.
Para que a malha de rede do Azure permita que o tráfego da rede virtual chegue ao ponto de extremidade público da conta de armazenamento, a sub-rede da rede virtual deverá ter o ponto de extremidade de serviço Microsoft.Storage exposto. Os comandos do PowerShell a seguir adicionarão o ponto de extremidade de serviço Microsoft.Storage à sub-rede, se ele ainda não estiver lá.
A etapa final para restringir o tráfego para a conta de armazenamento é criar uma regra de rede e adicioná-la ao conjunto de regras de rede da conta de armazenamento.
Para restringir o acesso ao ponto de extremidade público da conta de armazenamento para redes virtuais específicas usando pontos de extremidades de serviço, primeiro precisamos coletar informações sobre a conta de armazenamento e a rede virtual. Preencha <storage-account-resource-group>, <storage-account-name>, <vnet-resource-group-name>, <vnet-name> e <subnet-name> para coletar essas informações.
Para que a malha de rede do Azure permita que o tráfego da rede virtual chegue ao ponto de extremidade público da conta de armazenamento, a sub-rede da rede virtual deverá ter o ponto de extremidade de serviço Microsoft.Storage exposto. Os comandos da CLI a seguir adicionarão o ponto de extremidade de serviço Microsoft.Storage à sub-rede, se ele ainda não estiver lá.
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
A etapa final para restringir o tráfego para a conta de armazenamento é criar uma regra de rede e adicioná-la ao conjunto de regras de rede da conta de armazenamento.