Exercício – criar e gerir grupos de segurança de rede

Concluído

Como arquiteto de soluções da empresa de fabrico, quer começar a mover a aplicação ERP e servidores de bases de dados para o Azure. Como primeiro passo, você testará seu plano de segurança de rede usando dois de seus servidores.

Nesta unidade, irá configurar um grupo de segurança de rede e regras de segurança para restringir o tráfego de rede para servidores específicos. Pretende que o servidor de aplicações consiga ligar-se ao servidor de bases de dados através de HTTP. Não pretende que o servidor de bases de dados consiga utilizar HTTP para se ligar ao servidor de aplicações.

Diagram of exercise scenario network security groups.

Criar uma rede virtual e um grupo de segurança de rede

Em primeiro lugar, irá criar a rede virtual e sub-redes para os seus recursos do servidor. Em seguida, irá criar um grupo de segurança de rede.

  1. No Azure Cloud Shell, execute o seguinte comando para atribuir o grupo de recursos de área restrita à variável rg:

    rg="<rgn>[sandbox resource group name]</rgn>"
    
  2. Para criar a rede virtual de servidores ERP e a sub-rede Aplicativos, execute o seguinte comando no Cloud Shell:

    az network vnet create \
        --resource-group $rg \
        --name ERP-servers \
        --address-prefixes 10.0.0.0/16 \
        --subnet-name Applications \
        --subnet-prefixes 10.0.0.0/24
    
  3. Para criar a sub-rede Bancos de dados , execute o seguinte comando no Cloud Shell:

    az network vnet subnet create \
        --resource-group $rg \
        --vnet-name ERP-servers \
        --address-prefixes 10.0.1.0/24 \
        --name Databases
    
  4. Para criar o grupo de segurança de rede ERP-SERVERS-NSG, execute o seguinte comando no Cloud Shell:

    az network nsg create \
        --resource-group $rg \
        --name ERP-SERVERS-NSG
    

Criar VMs a executar o Ubuntu

Em seguida, irá criar duas VMs chamadas AppServer e DataServer. Deverá implementar o AppServer na sub-rede Aplicações e o DataServer na sub-rede Bases de dados. Adicione as interfaces de rede de VM ao grupo de segurança de rede ERP-SERVERS-NSG. Em seguida, para testar o seu grupo de segurança de rede, utilize estas VMs.

  1. Para criar a VM do AppServer , execute o seguinte comando no Cloud Shell. Para a conta de administrador, substitua <password> por uma senha complexa.

    wget -N https://raw.githubusercontent.com/MicrosoftDocs/mslearn-secure-and-isolate-with-nsg-and-service-endpoints/master/cloud-init.yml && \
    az vm create \
        --resource-group $rg \
        --name AppServer \
        --vnet-name ERP-servers \
        --subnet Applications \
        --nsg ERP-SERVERS-NSG \
        --image Ubuntu2204 \
        --size Standard_DS1_v2 \
         --generate-ssh-keys \
        --admin-username azureuser \
        --custom-data cloud-init.yml \
        --no-wait \
        --admin-password <password>
    
  2. Para criar a VM DataServer , execute o seguinte comando no Cloud Shell. Para a conta de administrador, substitua <password> por uma senha complexa.

    az vm create \
        --resource-group $rg \
        --name DataServer \
        --vnet-name ERP-servers \
        --subnet Databases \
        --nsg ERP-SERVERS-NSG \
        --size Standard_DS1_v2 \
        --image Ubuntu2204 \
        --generate-ssh-keys \
        --admin-username azureuser \
        --custom-data cloud-init.yml \
         --no-wait \
        --admin-password <password>
    
  3. Pode demorar vários minutos para que as VMs estejam num estado de execução. Para confirmar se as VMs estão em execução, execute o seguinte comando no Cloud Shell:

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, Provisioned:provisioningState, Power:powerState}" \
        --output table
    

    Quando a criação da VM estiver concluída, você verá a seguinte saída:

    Name        Provisioned    Power
    ----------  -------------  ----------
    AppServer   Succeeded      VM running
    DataServer  Succeeded      VM running
    

Verificar a conectividade predefinida

Agora, irá tentar abrir uma sessão Secure Shell (SSH) em cada uma das VMs. Lembre-se de que até agora implementou um grupo de segurança de rede com regras predefinidas.

  1. Para ligar às suas VMs, utilize o SSH diretamente a partir do Cloud Shell. Para tal, precisa dos endereços IP públicos que foram atribuídos às VMs. Para listar os endereços IP que você usará para se conectar às VMs, execute o seguinte comando no Cloud Shell:

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" \
        --output table
    
  2. Para facilitar a ligação às VMs durante o resto deste exercício, atribua os endereços IP públicos às variáveis. Para salvar o endereço IP público do AppServer e do DataServer em uma variável, execute o seguinte comando no Cloud Shell:

    APPSERVERIP="$(az vm list-ip-addresses \
                     --resource-group $rg \
                     --name AppServer \
                     --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
                     --output tsv)"
    
    DATASERVERIP="$(az vm list-ip-addresses \
                     --resource-group $rg \
                     --name DataServer \
                     --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
                     --output tsv)"
    
  3. Para verificar se você pode se conectar à sua VM do AppServer , execute o seguinte comando no Cloud Shell:

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    Obterá a mensagem Connection timed out.

  4. Para verificar se você pode se conectar à sua VM DataServer , execute o seguinte comando no Cloud Shell:

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    

    Obterá a mesma mensagem de falha de ligação.

Lembre-se de que as regras predefinidas negam todo o tráfego de entrada para uma rede virtual, a menos que este tráfego seja proveniente da mesma rede virtual. A regra Negar Todas as Entradas bloqueou as ligações SSH de entrada que acabou de tentar.

Entrada

Nome Prioridade IP de origem IP de destino Acesso
Permitir Entrada de VNet 65000 VIRTUAL_NETWORK VIRTUAL_NETWORK Permitir
Negar Todas as Entradas 65500 * * Negar

Criar uma regra de segurança para SSH

Como viu anteriormente, as regras predefinidas no seu grupo de segurança de rede ERP-SERVERS-NSG incluem uma regra Negar Todas as Entradas. Agora, vai adicionar uma regra para que possa utilizar o SSH para ligar ao AppServer e DataServer.

  1. Para criar uma nova regra de segurança de entrada para habilitar o acesso SSH, execute o seguinte comando no Cloud Shell:

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name AllowSSHRule \
        --direction Inbound \
        --priority 100 \
        --source-address-prefixes '*' \
        --source-port-ranges '*' \
        --destination-address-prefixes '*' \
        --destination-port-ranges 22 \
        --access Allow \
        --protocol Tcp \
        --description "Allow inbound SSH"
    
  2. Para verificar se agora você pode se conectar à sua VM do AppServer , execute o seguinte comando no Cloud Shell:

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    A regra de grupo de segurança de rede pode demorar um minuto ou dois a entrar em vigor. Se receber uma mensagem de falha de ligação, aguarde um momento e tente novamente.

  3. Agora, deverá conseguir ligar-se. Após a mensagem Are you sure you want to continue connecting (yes/no)?, introduza yes.

  4. Introduza a palavra-passe que definiu quando criou a VM.

  5. Para fechar a sessão do AppServer , digite exit.

  6. Para verificar se agora você pode se conectar à sua VM DataServer , execute o seguinte comando no Cloud Shell:

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    
  7. Agora, deverá conseguir ligar-se. Após a mensagem Are you sure you want to continue connecting (yes/no)?, introduza yes.

  8. Introduza a palavra-passe que definiu quando criou a VM.

  9. Para fechar a sessão do DataServer, introduza exit.

Criar uma regra de segurança para impedir o acesso Web

Agora, adicione uma regra para que o AppServer possa comunicar com o DataServer através de HTTP, mas o DataServer não possa comunicar com o AppServer através de HTTP. Estes são os endereços IP internos para estes servidores:

Nome do servidor Endereço IP
AppServer 10.0.0.4
DataServer 10.0.1.4
  1. Para criar uma nova regra de segurança de entrada para negar acesso HTTP pela porta 80, execute o seguinte comando no Cloud Shell:

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name httpRule \
        --direction Inbound \
        --priority 150 \
        --source-address-prefixes 10.0.1.4 \
        --source-port-ranges '*' \
        --destination-address-prefixes 10.0.0.4 \
        --destination-port-ranges 80 \
        --access Deny \
        --protocol Tcp \
        --description "Deny from DataServer to AppServer on port 80"
    

Testar a conectividade HTTP entre máquinas virtuais

Aqui, irá verificar se a nova regra funciona. O AppServer deve conseguir comunicar com o DataServer através de HTTP. O DataServer não deverá conseguir comunicar com o AppServer através de HTTP.

  1. Para se conectar à sua VM do AppServer , no Cloud Shell, execute o seguinte comando. Verifique se o AppServer consegue comunicar com o DataServer através de HTTP.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. Introduza a palavra-passe que definiu quando criou a VM.

  3. A resposta deve incluir uma mensagem 200 OK.

  4. Para se conectar à sua VM DataServer , no Cloud Shell, execute o seguinte comando. Verifique se o DataServer consegue comunicar com o AppServer através de HTTP.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. Introduza a palavra-passe que definiu quando criou a VM.

  6. Esta ação não deverá ser bem-sucedida, porque bloqueou o acesso através da porta 80. Após vários minutos, deverá obter uma mensagem Connection timed out. Para parar o comando antes do tempo limite, pressione Ctrl+C.

Implementar um grupo de segurança de aplicação

Em seguida, crie um grupo de segurança de aplicativo para servidores de banco de dados para que todos os servidores desse grupo possam receber as mesmas configurações. Está a planear implementar mais servidores de bases de dados e quer impedir que estes servidores acedam aos servidores de aplicações através de HTTP. Ao atribuir origens no grupo de segurança de aplicação, não tem de manter manualmente uma lista de endereços IP no grupo de segurança de rede. Em vez disso, irá atribuir as interfaces de rede de VMs que pretende gerir ao grupo de segurança de aplicação.

Diagram of exercise scenario app security groups.

  1. Para criar um novo grupo de segurança de aplicativo chamado ERP-DB-SERVERS-ASG, EXECUTE O SEGUINTE COMANDO NO Cloud Shell:

    az network asg create \
        --resource-group $rg \
        --name ERP-DB-SERVERS-ASG
    
  2. Para associar o DataServer ao grupo de segurança do aplicativo, execute o seguinte comando no Cloud Shell:

    az network nic ip-config update \
        --resource-group $rg \
        --application-security-groups ERP-DB-SERVERS-ASG \
        --name ipconfigDataServer \
        --nic-name DataServerVMNic \
        --vnet-name ERP-servers \
        --subnet Databases
    
  3. Para atualizar a regra HTTP no grupo de segurança de rede ERP-SERVERS-NSG, execute o seguinte comando no Cloud Shell. Deve fazer referência ao grupo de segurança de aplicação ERP-DB-Servers.

    az network nsg rule update \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name httpRule \
        --direction Inbound \
        --priority 150 \
        --source-address-prefixes "" \
        --source-port-ranges '*' \
        --source-asgs ERP-DB-SERVERS-ASG \
        --destination-address-prefixes 10.0.0.4 \
        --destination-port-ranges 80 \
        --access Deny \
        --protocol Tcp \
        --description "Deny from DataServer to AppServer on port 80 using application security group"
    

Testar a regra de segurança HTTP atualizada

  1. Para se conectar à sua VM do AppServer , execute o seguinte comando no Cloud Shell. Verifique se o AppServer consegue comunicar com o DataServer através de HTTP.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. Introduza a palavra-passe que definiu quando criou a VM.

  3. Tal como anteriormente, a resposta deverá incluir uma mensagem 200 OK. As definições de grupo de segurança de aplicação poderão demorar alguns momentos a entrar em vigor. Se não receber inicialmente a mensagem 200 OK, aguarde um minuto e tente novamente.

  4. Para se conectar ao seu DataServer, execute o seguinte comando no Cloud Shell. Verifique se o DataServer consegue comunicar com o AppServer através de HTTP.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. Introduza a palavra-passe que definiu quando criou a VM.

  6. Tal como anteriormente, esta ação não deverá ser bem-sucedida, porque bloqueou o acesso através da porta 80. Após vários minutos, deverá obter uma mensagem Connection timed out. Para parar o comando antes do tempo limite, pressione Ctrl+C.

Agora você confirmou que sua regra de grupo de segurança de rede funciona usando um grupo de segurança de aplicativo da mesma forma que quando você usou um endereço IP de origem. Se adicionarmos servidores de dados adicionais, poderíamos facilmente garantir que eles tenham a segurança de rede adequada, adicionando os novos servidores ao ERP-DB-SERVERS-ASG.