Restringir o acesso à rede aos recursos PaaS com pontos finais 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.

Utilizar o 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. Pode utilizar os comandos pré-instalados do Cloud Shell para executar o código neste artigo sem ter de instalar nada no ambiente local.

Para iniciar o Azure Cloud Shell:

Opção Exemplo/Ligação
Selecione Experimentar no canto superior direito de um bloco de código. A seleção de Experimente não copia automaticamente o código para o Cloud Shell. Exemplo da opção Experimente para o Azure Cloud Shell
Aceda a https://shell.azure.com ou selecione o botão Iniciar Cloud Shell para abrir o Cloud Shell no browser. Iniciar Cloud Shell numa nova janela
Selecione o botão Cloud Shell na barra de menus, na parte direita do portal do Azure. Botão Cloud Shell no portal do Azure

Para executar o código neste artigo no Azure Cloud Shell:

  1. Inicie o Cloud Shell.

  2. Selecione o botão Copiar num bloco de código para copiar o código.

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

  4. Selecione Introduzir para executar o código.

Se optar por instalar e utilizar o PowerShell localmente, este artigo requer a versão 1.0.0 ou mais tarde do módulo Azure PowerShell. 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, tem de criar um grupo de recursos para a rede virtual, e todos os outros recursos criados neste artigo. Criar um grupo de recursos com o New-AzResourceGroup. O exemplo a seguir cria um grupo de recursos chamado myResourceGroup:

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Criar uma rede virtual com a 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 Público:

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

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

$virtualNetwork | Set-AzVirtualNetwork

Ativar um ponto final de serviço

Pode ativar os pontos finais do serviço apenas para serviços que suportem pontos finais de serviço. Ver serviços com vista a ponto final disponíveis numa localização Azure com o Get-AzVirtualNetworkAvailableEndpointService. O exemplo a seguir devolve uma lista de serviços viabilizaram os serviços disponíveis na região leste. A lista de serviços devolvidos irá crescer ao longo do tempo à medida que mais serviços Azure se tornarem ponto final de serviço ativados.

Get-AzVirtualNetworkAvailableEndpointService -Location eastus | Select Name

Criar uma sub-rede adicional na rede virtual. Neste exemplo, uma sub-rede chamada Private é criada com um ponto final 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

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

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

A seguinte regra nega o acesso a todos os endereços IP públicos. A regra anterior substitui esta regra, devido à sua maior prioridade, que permite o acesso aos endereços IP públicos do Azure Storage.

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

A seguinte regra permite que o tráfego de ambiente de trabalho remoto (RDP) entre na sub-rede a partir de qualquer lugar. As ligações remotas de ambiente de trabalho são permitidas na sub-rede, para que possa confirmar o acesso à rede a um recurso num passo posterior.

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

Criar um grupo de segurança de rede com o 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 da rede à sub-rede Privada com a Set-AzVirtualNetSubnetConfig e, em seguida, escreva a configuração da sub-rede para a rede virtual. O exemplo a seguir associa o grupo de segurança da 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 medidas para restringir o acesso à rede para uma conta de Armazenamento Azure, como exemplo.

Criar uma conta de armazenamento

Crie uma conta de armazenamento Azure com o New-AzStorageAccount. Substitua <replace-with-your-unique-storage-account-name> por um nome único em todos os locais do Azure, entre 3-24 caracteres de comprimento, utilizando 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

Após a criação da conta de armazenamento, recupere a chave para a conta de armazenamento numa variável com o Get-AzStorageAccountKey:

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

A chave é usada para criar uma partilha de ficheiros num passo posterior. Introduza $storageAcctKey e note o valor, pois também terá de inseri-lo manualmente num passo posterior quando mapear a partilha de ficheiros para uma unidade num VM.

Criar uma partilha de ficheiros na conta de Armazenamento

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

$storageContext = New-AzStorageContext $storageAcctName $storageAcctKey

Crie uma partilha de ficheiros com o New-AzStorageShare:

$share = New-AzStorageShare minha partilha de ficheiros -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 predefinida para Negar com Actualização-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 a Get-AzVirtualNetwork e, em seguida, recupere o objeto de sub-rede privada numa variável com Get-AzVirtualNetworkSubnetConfig:

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

Permitir o acesso à 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

Criar 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

A saída semelhante à saída de exemplo a seguir é devolvida:

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

Criar a segunda máquina virtual

Criar 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 a Azure criar o VM. Não continue até que o Azure termine de criar o VM e retorne a saída à PowerShell.

Confirmar o acesso à conta de Armazenamento

Utilize o Get-AzPublicIpAddress para devolver o endereço IP público de um VM. O exemplo a seguir devolve o endereço IP público do myVmPrivate VM:

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 que se seguem, substitua <storage-account-key> e <storage-account-name> por valores do seu fornecido ou recuperado na 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 que o VM não tem conectividade de saída com quaisquer 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 do 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>

No myVmPublic VM, tente mapear a partilha de ficheiros Azure para dirigir Z. Antes de executar os comandos que se seguem, substitua <storage-account-key> e <storage-account-name> por valores do seu fornecido ou recuperado na 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 à partilha é negado e recebes 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.

A partir do seu computador, tente visualizar as ações de ficheiro na conta de armazenamento com o seguinte comando:

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

O acesso é negado e recebe um Get-AzStorageFile : O servidor remoto devolveu um erro: (403) Proibido. Código de Estado HTTP: 403 - Mensagem de erro HTTP: Este pedido não está autorizado a efetuar este erro de funcionamento, porque o seu computador não se encontra na sub-rede Privada da rede virtual MyVirtualNetwork.

Limpar os recursos

Quando já não for necessário, pode utilizar o Remove-AzResourceGroup para remover o grupo de recursos e todos os recursos que contém:

Remove-AzResourceGroup -Name myResourceGroup -Force

Passos seguintes

Neste artigo, ativou um ponto final 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 redes virtuais Connect.