Exercício – Restringir o acesso à rede

Concluído

Os usuários se conectam ao servidor de aplicativos para inserir pedidos, atualizar sua conta e executar atividades semelhantes. O servidor de aplicativos, por sua vez, atualiza o banco de dados com essas alterações. Como os usuários têm dados pessoais armazenados no banco de dados, é fundamental garantir que você permita apenas o acesso de recursos confiáveis e necessários. Há várias maneiras de controlar o acesso ao banco de dados SQL pela rede.

Regras de firewall

O Banco de Dados SQL do Azure tem um firewall interno que permite e nega acesso à rede ao próprio servidor de banco de dados e a bancos de dados individuais. Inicialmente, o firewall do Banco de Dados SQL bloqueia todo o acesso público ao Banco de Dados SQL do Azure. Para acessar um servidor de banco de dados, é preciso especificar uma ou mais regras de firewall de IP no nível do servidor que permitam acesso ao seu Banco de Dados SQL do Azure. Use as regras de firewall de IP para especificar quais intervalos de endereço IP da Internet têm permissão e se os aplicativos do Azure podem tentar se conectar ao seu Banco de Dados SQL do Azure.

As regras de firewall são configuradas no nível do servidor ou do banco de dados. As regras especificam especificamente quais recursos de rede têm permissão para estabelecer uma conexão com o banco de dados. Dependendo do nível, as regras que você pode aplicar são as seguintes:

  • Regras de firewall no nível do servidor
    • Permitir acesso aos serviços do Azure
    • Regras de endereço IP
    • Regras de rede virtual
  • Regras de firewall no nível de banco de dados
    • Regras de endereço IP

Observação

O SQL Data Warehouse dá suporte somente às regras de firewall de IP no nível do servidor, e não às regras de firewall de IP no nível do banco de dados.

Dê uma olhada mais de perto em como essas regras funcionam.

Regras de firewall no nível do servidor

Essas regras permitem que os clientes acessem todo o Azure SQL Server, ou seja, todos os bancos dentro do mesmo servidor lógico. Há três tipos de regras que podem ser aplicadas no nível do servidor.

A regra Permitir acesso aos serviços do Azure permite que os serviços dentro do Azure conectem-se ao Banco de Dados SQL do Azure. Quando habilitada, essa configuração permite que comunicações de todos os endereços IP públicos do Azure. Essa comunicação inclui todos os serviços de PaaS (plataforma como serviço), como o Serviço de Aplicativo do Azure e o Serviço de Contêiner do Azure, e as VMs do Azure que têm acesso de Internet de saída. Essa regra pode ser configurada por meio da opção LIGAR/DESLIGAR no painel de firewall no portal ou por uma regra IP que tenha 0.0.0.0 como os endereços IP inicial e final.

O diagrama mostra como permitir o acesso à rede de serviços do Azure.

Essa regra é usada quando você tem aplicativos executados em serviços de PaaS no Azure, como os Aplicativos Lógicos do Azure ou o Azure Functions, que precisam acessar o Banco de Dados SQL do Azure. Muitos desses serviços não têm um endereço IP estático, portanto, essa regra garante que eles sejam capazes de se conectar ao banco de dados.

Importante

Esta opção configura o firewall para permitir todas as conexões do Azure, incluindo as conexões das assinaturas de outros clientes. Ao selecionar essa opção, certifique-se de que suas permissões de entrada e de usuário limitem o acesso a somente usuários autorizados.

Regras de endereço IP são regras com base em intervalos de endereços IP públicos específicos. Os endereços IP que se conectam a partir de um intervalo de IP público permitido têm permissão para se conectar ao banco de dados.

O diagrama representa uma regra de endereço IP.

Você pode usar essas regras quando tiver um endereço IP público estático que precise acessar seu banco de dados.

As regras de rede virtual permitem permitir explicitamente a conexão de sub-redes especificadas dentro de uma ou mais redes virtuais do Azure. As regras de rede virtual podem fornecer maior controle de acesso aos bancos de dados e podem ser uma opção preferencial. Como os espaços de endereço de rede virtual do Azure são privados, você pode eliminar efetivamente a exposição a endereços IP públicos e proteger a conectividade com os endereços que você controla.

O diagrama representa uma regra de rede virtual.

Use regras de rede virtual quando você tiver VMs do Azure que precisam acessar seu banco de dados.

Para regras de nível de servidor, todas essas regras podem ser criadas e manipuladas por meio do portal, do PowerShell, da CLI e por meio do T-SQL (Transact-SQL).

Regras de firewall no nível de banco de dados

Essas regras permitem acesso ao banco de dados individual em um servidor lógico e são armazenadas no banco de dados em si. Para regras de nível de banco de dados, você pode configurar apenas regras de endereço IP. Elas funcionam da mesma forma que quando aplicadas no nível do servidor, mas limitam-se somente ao banco de dados.

O diagrama representa uma regra de rede de endereço IP do banco de dados.

Os benefícios das regras no nível de banco de dados são a portabilidade. Quando você replica um banco de dados para outro servidor, as regras no nível do banco de dados são replicadas, pois são armazenadas no próprio banco de dados.

A desvantagem de regras no nível de banco de dados é que você só pode usar regras de endereço IP. Essas regras podem limitar a sua flexibilidade e aumentar a sobrecarga administrativa.

As regras de firewall no nível do banco de dados podem ser criadas e manipuladas somente por meio do T-SQL.

Restringir o acesso à rede na prática

Como prática recomendada, use regras de firewall de IP no nível do banco de dados para aprimorar a segurança e tornar seu banco de dados mais portátil. Use regras de firewall de IP no nível do servidor para administradores e quando você tiver vários bancos de dados com os mesmos requisitos de acesso, para que você não gaste tempo configurando cada banco de dados individualmente.

Dê uma olhada em como essas regras funcionam na prática e como você pode proteger o acesso à rede para permitir apenas o que é necessário. Lembre-se de que você criou um servidor lógico do Banco de Dados SQL do Azure, um banco de dados e a VM do Linux appServer que atua como um servidor de aplicativos. Esse cenário costuma ser visto quando um banco de dados foi migrado para o Banco de Dados SQL do Azure e os recursos dentro de uma rede virtual precisam acessá-lo. O recurso de firewall do Banco de Dados SQL do Azure pode ser usado em muitos cenários, mas este exemplo tem aplicação prática e demonstra como cada uma das regras funciona.

Percorra as configurações de firewall e veja como elas funcionam. Você usa o portal e o Cloud Shell para esses exercícios.

No momento, o banco de dados criado por você não permite o acesso de nenhuma conexão. Esse acesso é limitado propositalmente e é baseado nos comandos executados para criar o servidor lógico e o banco de dados. Confirme que não há acesso.

  1. No Cloud Shell, execute o SSH na VM do Linux se ainda não estiver conectado. Substitua nnn.nnn.nnn.nnn pelo valor do publicIpAddress na unidade anterior.

    ssh nnn.nnn.nnn.nnn
    
  2. Execute novamente o comando sqlcmd que você recuperou anteriormente para tentar se conectar ao banco de dados. Substitua [server-name] pelo nome do seu servidor. Substitua [username] e [password] pelas credenciais ADMINUSER que você especificou na unidade anterior. Mantenha as aspas simples ao redor do nome de usuário e da senha para que o shell não interprete mal nenhum caractere especial.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Você deverá ver um erro semelhante à saída a seguir ao tentar se conectar. Essa saída é esperada, pois o acesso ao banco de dados não é permitido.

    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2AF9.
    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible.Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
    

Conceda acesso para que você possa se conectar.

Usar o nível de servidor permite o acesso à regra de serviços do Azure

Como sua VM tem acesso à Internet de saída, você pode usar a regra Permitir acesso aos serviços do Azure para permitir o acesso da VM.

  1. Entre no portal do Azure usando a mesma conta com a qual você ativou a área restrita.

  2. Na caixa Pesquisar recursos, serviços e documentos no topo, pesquise o nome do servidor de banco de dados, server-name. Selecione o SQL Server.

  3. No painel do SQL Server, no painel do menu esquerdo, em Segurança, selecione Rede.

  4. Role para baixo até Exceções, selecione a caixa de seleção para Permitir que os serviços e recursos do Azure acessem esse servidor e, em seguida, selecione Salvar. Aguarde até que o sistema reconheça essa alteração.

  5. De volta à sessão SSH, tente se conectar ao banco de dados novamente.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Neste ponto, você deve ser capaz de se conectar. Se ação for bem-sucedida, você verá um prompt do sqlcmd.

    1>
    

Você abriu a conectividade, mas essa configuração atualmente permite o acesso de qualquer recurso do Azure, incluindo recursos fora de sua assinatura. Restrinja ainda mais esse acesso para limitar o acesso à rede apenas aos recursos que estão sob o seu controle.

Usar uma regra de endereço IP no nível do banco de dados

Lembre-se de que regras de endereço IP no nível de banco de dados permitem acesso somente a um banco de dados individual em um servidor lógico. Use um aqui para conceder acesso ao IP estático da VM appServer.

Para criar uma regra de IP no nível do banco de dados, você precisa executar alguns comandos T-SQL. Crie uma regra de banco de dados usando a convenção a seguir, em que você passa o nome da regra, o endereço IP inicial e o endereço IP final. Ao especificar que os endereços IP de início e de término sejam iguais, você limita o acesso a um único IP. Você poderá expandir o intervalo se tiver um bloco maior de endereços que exijam acesso.

EXECUTE sp_set_database_firewall_rule N'My Firewall Rule', '40.112.128.214', '40.112.128.214'
  1. Enquanto ainda estiver no prompt do sqlcmd, execute o comando a seguir. Substitua o endereço IP público da VM appServer em ambos os locais.

    Dica

    Quando você executa comandos T-SQL, como o seguinte, o GO na segunda linha pode não ser copiado para o prompt sqlcmd. Talvez seja necessário digitar essa parte. O comando T-SQL não será executado sem ele, portanto, execute o comando GO.

    EXECUTE sp_set_database_firewall_rule N'My Firewall Rule', '[From IP Address]', '[To IP Address]';
    GO
    

    Após a conclusão do comando, insira exit para sair do sqlcmd. Permaneça conectado por SSH.

  2. No portal do Azure, no painel Rede do SQL Server, desmarque Permitir que os serviços e recursos do Azure acessem este servidor e selecione Salvar. Essa alteração desabilita o acesso de todos os serviços do Azure, mas você pode se conectar porque tem uma regra de IP no nível do banco de dados para o servidor.

  3. De volta ao Cloud Shell, na VM à qual você está conectado via SSH, tente se conectar ao banco de dados novamente.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Neste ponto, você deve ser capaz de se conectar. Se for bem-sucedido, você verá um prompt sqlcmd.

    1>
    

Usar uma regra no nível de banco de dados permite que o acesso seja isolado especificamente para o banco de dados. Essa regra pode ser útil se você quiser manter o acesso à rede configurado por banco de dados. Se vários bancos de dados compartilharem o mesmo nível de acesso à rede, você poderá simplificar a administração usando uma regra no nível de servidor para aplicar o mesmo acesso a todos os bancos de dados no servidor.

Usar uma regra de endereço IP no nível de servidor

As regras no nível do banco de dados são uma ótima opção, mas e se você tiver vários bancos de dados no mesmo servidor ao qual a VM appServer precisa se conectar? Você pode adicionar uma regra de nível de banco de dados a cada banco de dados, mas pode ser necessário mais trabalho à medida que você adiciona mais bancos de dados. Para reduzir os esforços de administração, permita o acesso com uma regra de nível de servidor, que se aplicaria a todos os bancos de dados no servidor.

Use uma regra de IP no nível do servidor para restringir os sistemas que podem se conectar.

  1. Enquanto ainda estiver no prompt sqlcmd, execute o seguinte comando para excluir a regra de endereço IP no nível do banco de dados.

    EXECUTE sp_delete_database_firewall_rule N'My Firewall Rule';
    GO
    

    Após a conclusão do comando, insira exit para sair do sqlcmd. Permaneça conectado por SSH.

  2. De volta ao portal do Azure, no painel Rede do SQL Server, em Regras de firewall, selecione adicionar uma regra de firewall. Nomeie a regra Permitir appServer, insira o endereço IP público da VM appServer no IP inicial e o IP final, e selecione OK.

  3. Selecione Salvar.

    Captura de tela do portal do Azure mostrando a criação da regra de firewall do servidor.

  4. De volta ao Cloud Shell, em sua VM appServer, tente se conectar ao banco de dados novamente.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Neste ponto, você deve ser capaz de se conectar. A regra no nível do servidor permite acesso com base no endereço IP público da VM appServer. Se ação for bem-sucedida, você verá um prompt do sqlcmd.

    1>
    

    Insira exit para sair do sqlcmd. Permaneça conectado por SSH.

Você isolou a conectividade a apenas o endereço IP especificado na regra. Esse isolamento funciona muito bem, mas ainda pode ser um desafio administrativo conforme você adiciona mais sistemas que precisam se conectar. Ele também requer um IP estático ou um IP de um intervalo de endereços IP definido.

Se o endereço IP for dinâmico e mudar, você precisará atualizar a regra para garantir a conectividade. A VM appServer está atualmente configurada com um endereço IP dinâmico. Esse endereço IP provavelmente será alterado em algum momento, interrompendo seu acesso assim que isso acontecer. Agora, veja como as regras de rede virtual podem ser benéficas em sua configuração.

Use uma regra de rede virtual no nível de servidor

Nesse caso, como sua VM está em execução no Azure, você pode usar uma regra de rede virtual no nível do servidor para isolar o acesso e facilitar a habilitação de serviços futuros para obter acesso ao banco de dados.

  1. De volta ao portal do Azure e ainda no painel Rede, em Redes virtuais, selecione Adicionar uma regra de rede virtual.

  2. A caixa de diálogo Criar/Atualizar regra de rede virtual é exibida. Defina os valores a seguir.

    Configuração Valor
    Nome Deixe o valor padrão
    Assinatura Assinatura do Concierge
    Rede virtual appServerVNET
    Nome da sub-rede/prefixo do endereço appServerSubnet / 10.0.0.0/24
  3. Selecione Habilitar para habilitar o ponto de extremidade de serviço na sub-rede e selecione OK depois que o ponto de extremidade estiver habilitado para criar a regra.

  4. Remova a regra de endereço IP. Selecione ... ao lado da regra Permitir appServer, selecione Excluir e Salvar.

  5. De volta ao Cloud Shell, em sua VM appServer, tente se conectar ao banco de dados novamente.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Neste ponto, você deve ser capaz de se conectar. Se for bem-sucedido, você verá um prompt sqlcmd.

    1>
    

O que você fez aqui efetivamente remove qualquer acesso público ao SQL Server. Ele permite o acesso somente da sub-rede específica na rede virtual do Azure que você definiu. Se você adicionar mais servidores de aplicativo nessa sub-rede, nenhuma configuração adicional será necessária. Qualquer servidor nessa sub-rede teria a capacidade de se conectar ao SQL Server.

Essa configuração limita sua exposição a serviços fora do seu escopo de controle e facilita a administração se você adicionar mais servidores. Esse método é eficaz para proteger o acesso à rede a um Banco de Dados SQL do Azure.