Restringir o acesso à rede a recursos de PaaS com pontos de extremidade de serviço de rede virtual usando a CLI do Azure

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 do Azure antes de começar.

Pré-requisitos

  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.

  • Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.

    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.

  • Este artigo requer a versão 2.0.28 ou posterior da CLI do Azure. Se estiver usando o Azure Cloud Shell, a versão mais recente já está instalada.

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 az group create. O exemplo seguinte cria um grupo de recursos com o nome myResourceGroup na localização eastus.

az group create \
  --name myResourceGroup \
  --location eastus

Crie uma rede virtual com uma sub-rede com az network vnet create.

az network vnet create \
  --name myVirtualNetwork \
  --resource-group myResourceGroup \
  --address-prefix 10.0.0.0/16 \
  --subnet-name Public \
  --subnet-prefix 10.0.0.0/24

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 az network vnet list-endpoint-services. 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.

az network vnet list-endpoint-services \
  --location eastus \
  --out table

Crie uma sub-rede adicional na rede virtual com az network vnet subnet create. Neste exemplo, um ponto de extremidade de serviço para Microsoft.Storage é criado para a sub-rede:

az network vnet subnet create \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name Private \
  --address-prefix 10.0.1.0/24 \
  --service-endpoints Microsoft.Storage

Restringir o acesso de rede a uma sub-rede

Crie um grupo de segurança de rede com az network nsg create. O exemplo a seguir cria um grupo de segurança de rede chamado myNsgPrivate.

az network nsg create \
  --resource-group myResourceGroup \
  --name myNsgPrivate

Associe o grupo de segurança de rede à sub-rede privada com a atualização da sub-rede az network vnet. O exemplo a seguir associa o grupo de segurança de rede myNsgPrivate à sub-rede privada :

az network vnet subnet update \
  --vnet-name myVirtualNetwork \
  --name Private \
  --resource-group myResourceGroup \
  --network-security-group myNsgPrivate

Crie regras de segurança com az network nsg rule create. A regra a seguir permite acesso de saída aos endereços IP públicos atribuídos ao serviço de Armazenamento do Azure:

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsgPrivate \
  --name Allow-Storage-All \
  --access Allow \
  --protocol "*" \
  --direction Outbound \
  --priority 100 \
  --source-address-prefix "VirtualNetwork" \
  --source-port-range "*" \
  --destination-address-prefix "Storage" \
  --destination-port-range "*"

Cada grupo de segurança de rede contém várias regras de segurança padrão. A regra a seguir substitui uma regra de segurança padrão que permite acesso de saída a todos os endereços IP públicos. A destination-address-prefix "Internet" opção nega acesso de saída 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.

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsgPrivate \
  --name Deny-Internet-All \
  --access Deny \
  --protocol "*" \
  --direction Outbound \
  --priority 110 \
  --source-address-prefix "VirtualNetwork" \
  --source-port-range "*" \
  --destination-address-prefix "Internet" \
  --destination-port-range "*"

A regra a seguir permite a entrada de tráfego SSH na sub-rede de qualquer lugar. A regra substitui uma regra de segurança predefinida que nega todo o tráfego de entrada a partir da Internet. SSH é permitido para a sub-rede para que a conectividade possa ser testada em uma etapa posterior.

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsgPrivate \
  --name Allow-SSH-All \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 120 \
  --source-address-prefix "*" \
  --source-port-range "*" \
  --destination-address-prefix "VirtualNetwork" \
  --destination-port-range "22"

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 az storage account create. 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>"

az storage account create \
  --name $storageAcctName \
  --resource-group myResourceGroup \
  --sku Standard_LRS \
  --kind StorageV2

Depois que a conta de armazenamento for criada, recupere a cadeia de conexão da conta de armazenamento em uma variável com az storage account show-connection-string. A cadeia de conexão é usada para criar um compartilhamento de arquivos em uma etapa posterior.

saConnectionString=$(az storage account show-connection-string \
  --name $storageAcctName \
  --resource-group myResourceGroup \
  --query 'connectionString' \
  --out tsv)

Exiba o conteúdo da variável e anote o valor de AccountKey retornado na saída, porque ele é usado em uma etapa posterior.

echo $saConnectionString

Criar uma partilha de ficheiros na conta de Armazenamento

Crie um compartilhamento de arquivos na conta de armazenamento com az storage share create. Em uma etapa posterior, esse compartilhamento de arquivos é montado para confirmar o acesso da rede a ele.

az storage share create \
  --name my-file-share \
  --quota 2048 \
  --connection-string $saConnectionString > /dev/null

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 às redes selecionadas, altere a ação padrão para Negar com a atualização da conta de armazenamento az. Assim que o acesso de rede for negado, a conta de armazenamento não será acessível a partir de nenhuma rede.

az storage account update \
  --name $storageAcctName \
  --resource-group myResourceGroup \
  --default-action Deny

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

Permita o acesso de rede à conta de armazenamento a partir da sub-rede privada com az storage account network-rule add.

az storage account network-rule add \
  --resource-group myResourceGroup \
  --account-name $storageAcctName \
  --vnet-name myVirtualNetwork \
  --subnet Private

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 VM na sub-rede Pública com az vm create. Se as chaves SSH ainda não existirem numa localização de chaves predefinida, o comando cria-as. Para utilizar um conjunto específico de chaves, utilize a opção --ssh-key-value.

az vm create \
  --resource-group myResourceGroup \
  --name myVmPublic \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet Public \
  --generate-ssh-keys

A criação da VM demora alguns minutos. Depois que a VM é criada, a CLI do Azure mostra informações semelhantes ao exemplo a seguir:

{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVmPublic",
  "location": "eastus",
  "macAddress": "00-0D-3A-23-9A-49",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "13.90.242.231",
  "resourceGroup": "myResourceGroup"
}

Anote o publicIpAddress na saída retornada. Esse endereço é usado para acessar a VM da Internet em uma etapa posterior.

Criar a segunda máquina virtual

az vm create \
  --resource-group myResourceGroup \
  --name myVmPrivate \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet Private \
  --generate-ssh-keys

A criação da VM demora alguns minutos. Após a criação, anote o publicIpAddress na saída retornada. Esse endereço é usado para acessar a VM da Internet em uma etapa posterior.

Confirmar o acesso à conta de Armazenamento

SSH na VM myVmPrivate . Substitua publicIpAddress> pelo endereço IP público da sua VM myVmPrivate.<

ssh <publicIpAddress>

Crie uma pasta para um ponto de montagem:

sudo mkdir /mnt/MyAzureFileShare

Monte o compartilhamento de arquivos do Azure no diretório que você criou. Antes de executar o comando a seguir, substitua <storage-account-name> pelo nome da conta e <storage-account-key> pela chave recuperada em Criar uma conta de armazenamento.

sudo mount --types cifs //<storage-account-name>.file.core.windows.net/my-file-share /mnt/MyAzureFileShare --options vers=3.0,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino

Você recebe a user@myVmPrivate:~$ solicitação. O compartilhamento de arquivos do Azure montado com êxito em /mnt/MyAzureFileShare.

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

ping bing.com -c 4

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.

Saia da sessão SSH para a VM myVmPrivate .

Confirmar que o acesso à conta de Armazenamento é negado

Use o comando a seguir para criar uma sessão SSH com a VM myVmPublic . Substitua <publicIpAddress> pelo endereço IP público da sua VM myVmPublic :

ssh <publicIpAddress>

Crie um diretório para um ponto de montagem:

sudo mkdir /mnt/MyAzureFileShare

Tente montar o compartilhamento de arquivos do Azure no diretório que você criou. Este artigo pressupõe que você implantou a versão mais recente do Ubuntu. Se você estiver usando versões anteriores do Ubuntu, consulte Montar no Linux para obter instruções adicionais sobre como montar compartilhamentos de arquivos. Antes de executar o seguinte comando, substitua <storage-account-name> pelo nome da conta e <storage-account-key> pela chave recuperada em Criar uma conta de armazenamento:

sudo mount --types cifs //storage-account-name>.file.core.windows.net/my-file-share /mnt/MyAzureFileShare --options vers=3.0,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino

O acesso é negado e você recebe um mount error(13): Permission denied erro, porque a VM myVmPublic é implantada 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.

Saia da sessão SSH para a VM myVmPublic .

No seu computador, tente visualizar os compartilhamentos em sua conta de armazenamento com a lista de compartilhamento de armazenamento az. Substitua <account-name> e pelo nome e <account-key> chave da conta de armazenamento em Criar uma conta de armazenamento:

az storage share list \
  --account-name <account-name> \
  --account-key <account-key>

O acesso é negado e você recebe um erro Esta solicitação não está autorizada a executar essa 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, use az group delete para remover o grupo de recursos e todos os recursos que ele contém.

az group delete --name myResourceGroup --yes

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.