Restringir o acesso de rede a recursos PaaS com pontos de extremidade de serviço de rede virtual usando o PowerShell

Os pontos finais de serviço de rede virtual permitem-lhe limitar o acesso de rede a alguns recursos de serviços do Azure a uma sub-rede de rede virtual. Também pode remover o acesso à Internet aos recursos. Os pontos finais de serviço proporcionam uma ligação direta a partir da sua rede virtual a serviços do Azure suportados, o que lhe permite utilizar o espaço de endereços privados da sua rede virtual para aceder aos serviços do Azure. O tráfego destinado aos recursos do Azure através de pontos finais de serviço permanece sempre na rede backbone do Microsoft Azure. Neste artigo, vai aprender a:

  • Criar uma rede virtual com uma sub-rede
  • Adicionar uma sub-rede e ativar um ponto final de serviço
  • Criar um recurso do Azure e permitir o acesso de rede ao mesmo apenas a partir de uma sub-rede
  • Implementar uma máquina virtual (VM) em cada sub-rede
  • Confirmar o acesso a um recurso a partir de uma sub-rede
  • Confirmar que o acesso é negado a um recurso a partir de uma sub-rede e da Internet

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Azure Cloud Shell

O Azure aloja o Azure Cloud Shell, um ambiente de shell interativo que pode utilizar através do seu browser. Pode utilizar o Bash ou o PowerShell com o Cloud Shell para trabalhar com os serviços do Azure. Você pode usar os comandos pré-instalados do Cloud Shell para executar o código neste artigo, sem precisar instalar nada em seu ambiente local.

Para iniciar o Azure Cloud Shell:

Opção Exemplo/Ligação
Selecione Experimentar no canto superior direito de um código ou bloco de comandos. Selecionar Experimentar não copia automaticamente o código ou comando para o Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
Aceda a https://shell.azure.com ou selecione o botão Iniciar Cloud Shell para abrir o Cloud Shell no browser. Button to launch Azure Cloud Shell.
Selecione o botão Cloud Shell na barra de menus, na parte direita do portal do Azure. Screenshot that shows the Cloud Shell button in the Azure portal

Para usar o Azure Cloud Shell:

  1. Inicie o Cloud Shell.

  2. Selecione o botão Copiar em um bloco de código (ou bloco de comando) para copiar o código ou comando.

  3. Cole o código ou comando na sessão do Cloud Shell selecionando Ctrl+Shift+V no Windows e Linux ou selecionando Cmd+Shift+V no macOS.

  4. Selecione Enter para executar o código ou comando.

Se você optar por instalar e usar o PowerShell localmente, este artigo exigirá o módulo do Azure PowerShell versão 1.0.0 ou posterior. Execute Get-Module -ListAvailable Az para localizar a versão instalada. Se precisar de atualizar, veja Install Azure PowerShell module (Instalar o módulo do Azure PowerShell). Se estiver a executar localmente o PowerShell, também terá de executar o Connect-AzAccount para criar uma ligação com o Azure.

Criar uma rede virtual

Antes de criar uma rede virtual, você precisa criar um grupo de recursos para a rede virtual e todos os outros recursos criados neste artigo. Crie um grupo de recursos com New-AzResourceGroup. O exemplo a seguir cria um grupo de recursos chamado myResourceGroup:

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Crie uma rede virtual com New-AzVirtualNetwork. O exemplo a seguir cria uma rede virtual chamada myVirtualNetwork com o prefixo de endereço 10.0.0.0/16.

$virtualNetwork = New-AzVirtualNetwork `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myVirtualNetwork `
  -AddressPrefix 10.0.0.0/16

Crie uma configuração de sub-rede com New-AzVirtualNetworkSubnetConfig. O exemplo a seguir cria uma configuração de sub-rede para uma sub-rede chamada Public:

$subnetConfigPublic = Add-AzVirtualNetworkSubnetConfig `
  -Name Public `
  -AddressPrefix 10.0.0.0/24 `
  -VirtualNetwork $virtualNetwork

Crie a sub-rede na rede virtual gravando a configuração da sub-rede na rede virtual com Set-AzVirtualNetwork:

$virtualNetwork | Set-AzVirtualNetwork

Ativar um ponto final de serviço

Você pode habilitar pontos de extremidade de serviço somente para serviços que oferecem suporte a pontos de extremidade de serviço. Exiba os serviços habilitados para ponto de extremidade de serviço disponíveis em um local do Azure com Get-AzVirtualNetworkAvailableEndpointService. O exemplo a seguir retorna uma lista de serviços habilitados para ponto de extremidade de serviço disponíveis na região eastus . A lista de serviços retornados crescerá com o tempo à medida que mais serviços do Azure se tornarem ponto de extremidade de serviço habilitados.

Get-AzVirtualNetworkAvailableEndpointService -Location eastus | Select Name

Crie uma sub-rede adicional na rede virtual. Neste exemplo, uma sub-rede chamada Private é criada com um ponto de extremidade de serviço para Microsoft.Storage:

$subnetConfigPrivate = Add-AzVirtualNetworkSubnetConfig `
  -Name Private `
  -AddressPrefix 10.0.1.0/24 `
  -VirtualNetwork $virtualNetwork `
  -ServiceEndpoint Microsoft.Storage

$virtualNetwork | Set-AzVirtualNetwork

Restringir o acesso de rede a uma sub-rede

Crie regras de segurança de grupo de segurança de rede com New-AzNetworkSecurityRuleConfig. A regra a seguir permite acesso de saída aos endereços IP públicos atribuídos ao serviço de Armazenamento do Azure:

$rule1 = New-AzNetworkSecurityRuleConfig `
  -Name Allow-Storage-All `
  -Access Allow `
  -DestinationAddressPrefix Storage `
  -DestinationPortRange * `
  -Direction Outbound `
  -Priority 100 `
  -Protocol * `
  -SourceAddressPrefix VirtualNetwork `
  -SourcePortRange *

A regra a seguir nega acesso a todos os endereços IP públicos. A regra anterior substitui essa regra, devido à sua prioridade mais alta, que permite o acesso aos endereços IP públicos do Armazenamento do Azure.

$rule2 = New-AzNetworkSecurityRuleConfig `
  -Name Deny-Internet-All `
  -Access Deny `
  -DestinationAddressPrefix Internet `
  -DestinationPortRange * `
  -Direction Outbound `
  -Priority 110 `
  -Protocol * `
  -SourceAddressPrefix VirtualNetwork `
  -SourcePortRange *

A regra a seguir permite a entrada de tráfego RDP (Remote Desktop Protocol) para a sub-rede de qualquer lugar. As conexões de área de trabalho remota são permitidas para a sub-rede, para que você possa confirmar o acesso à rede a um recurso em uma etapa posterior.

$rule3 = New-AzNetworkSecurityRuleConfig `
  -Name Allow-RDP-All `
  -Access Allow `
  -DestinationAddressPrefix VirtualNetwork `
  -DestinationPortRange 3389 `
  -Direction Inbound `
  -Priority 120 `
  -Protocol * `
  -SourceAddressPrefix * `
  -SourcePortRange *

Crie um grupo de segurança de rede com New-AzNetworkSecurityGroup. O exemplo a seguir cria um grupo de segurança de rede chamado myNsgPrivate.

$nsg = New-AzNetworkSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myNsgPrivate `
  -SecurityRules $rule1,$rule2,$rule3

Associe o grupo de segurança de rede à sub-rede privada com Set-AzVirtualNetworkSubnetConfig e, em seguida, escreva a configuração da sub-rede na rede virtual. O exemplo a seguir associa o grupo de segurança de rede myNsgPrivate à sub-rede privada :

Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $VirtualNetwork `
  -Name Private `
  -AddressPrefix 10.0.1.0/24 `
  -ServiceEndpoint Microsoft.Storage `
  -NetworkSecurityGroup $nsg

$virtualNetwork | Set-AzVirtualNetwork

Restringir o acesso de rede a um recurso

Os passos necessários para restringir o acesso de rede a recursos criados através de serviços do Azure ativados para pontos finais de serviço varia de serviço para serviço. Veja a documentação relativa aos serviços individuais para obter os passos específicos dos mesmos. O restante deste artigo inclui etapas para restringir o acesso à rede para uma conta de Armazenamento do Azure, como exemplo.

Criar uma conta de armazenamento

Crie uma conta de armazenamento do Azure com New-AzStorageAccount. Substitua <replace-with-your-unique-storage-account-name> por um nome exclusivo em todos os locais do Azure, entre 3 e 24 caracteres de comprimento, usando apenas números e letras minúsculas.

$storageAcctName = '<replace-with-your-unique-storage-account-name>'

New-AzStorageAccount `
  -Location EastUS `
  -Name $storageAcctName `
  -ResourceGroupName myResourceGroup `
  -SkuName Standard_LRS `
  -Kind StorageV2

Depois que a conta de armazenamento for criada, recupere a chave da conta de armazenamento em uma variável com Get-AzStorageAccountKey:

$storageAcctKey = (Get-AzStorageAccountKey `
  -ResourceGroupName myResourceGroup `
  -AccountName $storageAcctName).Value[0]

A chave é usada para criar um compartilhamento de arquivos em uma etapa posterior. Insira $storageAcctKey e anote o valor, pois você também precisará inseri-lo manualmente em uma etapa posterior quando mapear o compartilhamento de arquivos para uma unidade em uma VM.

Criar uma partilha de ficheiros na conta de Armazenamento

Crie um contexto para sua conta de armazenamento e chave com New-AzStorageContext. O contexto encapsula o nome da conta de armazenamento e a chave da conta:

$storageContext = New-AzStorageContext $storageAcctName $storageAcctKey

Crie um compartilhamento de arquivos com New-AzStorageShare:

$share = New-AzStorageShare my-file-share -Context $storageContext

Negar todo o acesso à rede a uma conta de armazenamento

Por predefinição, as contas de Armazenamento aceitam ligações de rede de clientes em qualquer rede. Para limitar o acesso a redes selecionadas, altere a ação padrão para Negar com Update-AzStorageAccountNetworkRuleSet. Assim que o acesso de rede for negado, a conta de armazenamento não será acessível a partir de nenhuma rede.

Update-AzStorageAccountNetworkRuleSet  `
  -ResourceGroupName "myresourcegroup" `
  -Name $storageAcctName `
  -DefaultAction Deny

Ativar o acesso de rede a partir de uma de sub-rede

Recupere a rede virtual criada com Get-AzVirtualNetwork e, em seguida, recupere o objeto de sub-rede privada em uma variável com Get-AzVirtualNetworkSubnetConfig:

$privateSubnet = Get-AzVirtualNetwork `
  -ResourceGroupName "myResourceGroup" `
  -Name "myVirtualNetwork" `
  | Get-AzVirtualNetworkSubnetConfig `
  -Name "Private"

Permita o acesso de rede à conta de armazenamento a partir da sub-rede privada com Add-AzStorageAccountNetworkRule.

Add-AzStorageAccountNetworkRule `
  -ResourceGroupName "myresourcegroup" `
  -Name $storageAcctName `
  -VirtualNetworkResourceId $privateSubnet.Id

Criar máquinas virtuais

Para testar o acesso de rede a uma conta de Armazenamento, implemente uma VM em cada sub-rede.

Criar a primeira máquina virtual

Crie uma máquina virtual na sub-rede Pública com New-AzVM. Ao executar o comando seguinte, ser-lhe-ão pedidas as credenciais. Os valores que introduzir são configurados, como o nome de utilizador e a palavra-passe para a VM. A opção -AsJob cria a VM em segundo plano, para que possa prosseguir para o passo seguinte.

New-AzVm `
    -ResourceGroupName "myResourceGroup" `
    -Location "East US" `
    -VirtualNetworkName "myVirtualNetwork" `
    -SubnetName "Public" `
    -Name "myVmPublic" `
    -AsJob

Saída semelhante à saída de exemplo a seguir é retornada:

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command                  
--     ----            -------------   -----         -----------     --------             -------                  
1      Long Running... AzureLongRun... Running       True            localhost            New-AzVM     

Criar a segunda máquina virtual

Crie uma máquina virtual na sub-rede privada :

New-AzVm `
    -ResourceGroupName "myResourceGroup" `
    -Location "East US" `
    -VirtualNetworkName "myVirtualNetwork" `
    -SubnetName "Private" `
    -Name "myVmPrivate"

Leva alguns minutos para o Azure criar a VM. Não continue para a próxima etapa até que o Azure termine de criar a VM e retorne a saída para o PowerShell.

Confirmar o acesso à conta de Armazenamento

Use Get-AzPublicIpAddress para retornar o endereço IP público de uma VM. O exemplo a seguir retorna o endereço IP público da VM myVmPrivate :

Get-AzPublicIpAddress `
  -Name myVmPrivate `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

No comando seguinte, substitua <publicIpAddress> pelo endereço IP público devolvido pelo comando anterior e, em seguida, introduza o seguinte comando:

mstsc /v:<publicIpAddress>

É criado e transferido um ficheiro do Protocolo do Ambiente de Trabalho Remoto (.rdp) para o seu computador. Abra o ficheiro rdp transferido. Se lhe for pedido, selecione Ligar. Introduza o nome de utilizador e a palavra-passe que especificou ao criar a VM. Poderá ter de selecionar Mais opções e Utilizar uma conta diferente para especificar as credenciais que introduziu quando criou a VM. Selecione OK. Poderá receber um aviso de certificado durante o processo de início de sessão. Se receber o aviso, selecione Sim ou Continuar para prosseguir com a ligação.

Na VM myVmPrivate, mapeie a partilha de ficheiros do Azure para a unidade Z com o PowerShell. Antes de executar os comandos a seguir, substitua <storage-account-key> e <storage-account-name> por valores fornecidos ou recuperados em Criar uma conta de armazenamento.

$acctKey = ConvertTo-SecureString -String "<storage-account-key>" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList "Azure\<storage-account-name>", $acctKey
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<storage-account-name>.file.core.windows.net\my-file-share" -Credential $credential

O PowerShell devolve resultados semelhantes à saída de exemplo seguinte:

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
Z                                      FileSystem    \\vnt.file.core.windows.net\my-f...

A partilha de ficheiros do Azure mapeada com êxito para a unidade Z.

Confirme se a VM não tem conectividade de saída com outros endereços IP públicos:

ping bing.com

Não vai receber respostas, porque o grupo de segurança de rede associado à sub-rede Privada não permite o acesso de saída a endereços IP públicos que não os atribuídos ao serviço Armazenamento do Azure.

Feche a sessão de ambiente de trabalho remoto para a VM myVmPrivate.

Confirmar que o acesso à conta de Armazenamento é negado

Obtenha o endereço IP público da VM myVmPublic :

Get-AzPublicIpAddress `
  -Name myVmPublic `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

No comando seguinte, substitua <publicIpAddress> pelo endereço IP público devolvido pelo comando anterior e, em seguida, introduza o seguinte comando:

mstsc /v:<publicIpAddress>

Na VM myVmPublic, tente mapear o compartilhamento de arquivos do Azure para a unidade Z. Antes de executar os comandos a seguir, substitua <storage-account-key> e <storage-account-name> por valores fornecidos ou recuperados em Criar uma conta de armazenamento.

$acctKey = ConvertTo-SecureString -String "<storage-account-key>" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList "Azure\<storage-account-name>", $acctKey
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<storage-account-name>.file.core.windows.net\my-file-share" -Credential $credential

O acesso ao compartilhamento é negado e você recebe um New-PSDrive : Access is denied erro. O acesso é negado porque a VM myVmPublic é implementada na sub-rede Pública. A sub-rede Pública não tem um ponto final de serviço ativado para o Armazenamento do Azure e a conta de armazenamento só permite o acesso de rede a partir da sub-rede Privada, não da Público.

Feche a sessão de ambiente de trabalho remoto para a VM myVmPublic.

No seu computador, tente visualizar os compartilhamentos de arquivos na conta de armazenamento com o seguinte comando:

Get-AzStorageFile `
  -ShareName my-file-share `
  -Context $storageContext

O acesso é negado e você recebe um Get-AzStorageFile : O servidor remoto retornou um erro: (403) Proibido. Código de status HTTP: 403 - Mensagem de erro HTTP: Esta solicitação não está autorizada a executar esse erro de operação , porque seu computador não está na sub-rede privada da rede virtual MyVirtualNetwork .

Clean up resources (Limpar recursos)

Quando não for mais necessário, você pode usar Remove-AzResourceGroup para remover o grupo de recursos e todos os recursos que ele contém:

Remove-AzResourceGroup -Name myResourceGroup -Force

Próximos passos

Neste artigo, você habilitou um ponto de extremidade de serviço para uma sub-rede de rede virtual. Aprendeu que os pontos finais de serviço podem ser ativados para recursos implementados com vários serviços do Azure. Criou uma conta de Armazenamento do Azure e limitou o acesso de rede à mesma apenas para os recursos dentro de uma sub-rede de uma rede virtual. Para saber mais sobre os pontos finais de serviço, veja Descrição geral dos pontos finais de serviço e Manage subnets (Gerir sub-redes).

Se tiver várias redes virtuais na sua conta, poderá pretender ligar duas redes virtuais para que os recursos dentro de ambas possam comunicar entre si. Para saber como, consulte Conectar redes virtuais.