Exercício – restringir o acesso à rede

Concluído

Os usuários se conectam ao servidor do aplicativo para inserir pedidos, atualizar a conta e realizar 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ê só permita o acesso a partir de recursos confiáveis e necessários. Há várias maneiras de controlar o acesso ao seu banco de dados SQL pela rede.

Regras da 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 seu Banco de Dados SQL do Azure. Para aceder a um servidor de base de dados, tem de especificar uma ou mais regras de firewall de IP ao nível do servidor que permitam acesso à sua Base de Dados SQL do Azure. Utilize as regras de firewall de IP para especificar quais os intervalos de endereços IP da Internet permitidos e se as aplicações do Azure podem ou não tentar ligar à Base de Dados SQL do Azure.

As regras de firewall são configuradas no nível do servidor ou do banco de dados. As regras indicam especificamente quais recursos de rede podem estabelecer uma conexão com o banco de dados. Dependendo do nível, as regras que pode aplicar são as seguintes:

  • Regras de firewall ao nível do servidor
    • Permitir acesso aos serviços do Azure
    • Regras de endereços IP
    • Regras de rede virtual
  • Regras de firewall ao nível da base de dados
    • Regras de endereços IP

Nota

O Azure SQL Data Warehouse suporta apenas regras de firewall de IP ao nível do servidor e não regras de firewall de IP ao nível da base de dados.

Veja mais de perto como essas regras funcionam.

Regras de firewall ao nível do servidor

Estas regras permitem que os clientes acedam a todo o seu servidor do SQL Azure, ou seja, todas as bases de dados dentro do mesmo servidor lógico. Existem três tipos de regras que podem ser aplicadas ao nível do servidor.

A regra Permitir acesso aos serviços do Azure permite que os serviços do Azure liguem à sua Base de Dados SQL do Azure. Uma vez ativada, esta definição permite comunicações de todos os endereços IP públicos do Azure. Essa comunicação inclui todos os serviços PaaS (Plataforma Azure 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 saída à Internet. Esta regra pode ser configurada através da opção ATIVADO/DESATIVADO no painel da firewall no portal ou por uma regra de IP que tenha 0.0.0.0 como os endereços IP de início e fim.

Diagram shows how to allow access to Azure services network.

Esta regra é usada quando você tem aplicativos executados em serviços PaaS no Azure, como Aplicativos Lógicos do Azure ou Azure Functions que precisam acessar seu 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 possam se conectar ao banco de dados.

Importante

Esta opção configura a firewall para permitir todas as ligações a partir do Azure, incluindo ligações de subscrições de outros clientes. Ao selecionar esta opção, certifique-se de que as suas permissões de início de sessão e de utilizador limitam o acesso apenas a utilizadores autorizados.

As regras de endereços IP são regras baseadas em intervalos específicos de endereços IP públicos. 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.

Diagram represents an IP address rule.

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 que você permita 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 seus bancos de dados e podem ser uma opção preferida. 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 a conectividade segura com os endereços que você controla.

Diagram represents a virtual network rule.

Use regras de rede virtual quando 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, PowerShell, CLI e Transact-SQL (T-SQL).

Regras de firewall ao nível da base de dados

Estas regras permitem o acesso a uma base de dados individual num servidor lógico e são armazenadas na própria base de dados. Para regras no nível de banco de dados, você pode configurar apenas regras de endereço IP. Funcionam de forma idêntica às aplicadas ao nível do servidor, mas o âmbito é limitado à base de dados.

Diagram represents a database IP address network rule.

A vantagem das regras ao nível da base de dados é a portabilidade. Quando você replica um banco de dados para outro servidor, as regras no nível de banco de dados são replicadas, pois são armazenadas no próprio banco de dados.

A desvantagem das regras ao nível da base de dados é que só pode utilizar regras de endereços IP. Essas regras podem limitar a flexibilidade que você tem e podem aumentar as despesas gerais administrativas.

As regras de firewall no nível de 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 IP no nível de banco de dados para aumentar a segurança e tornar seu banco de dados mais portátil. Use regras de firewall 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 queira perder tempo configurando cada banco de dados individualmente.

Veja como essas regras funcionam na prática e como você pode proteger o acesso à rede para permitir apenas o 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 Linux appServer que atua como um servidor de aplicativos. Este cenário é comum quando uma base de dados é migrada para a Base de Dados SQL do Azure e os recursos dentro de uma rede virtual precisam de acesso à mesma. O recurso de firewall do Banco de Dados SQL do Azure pode ser usado em muitos cenários, mas este exemplo tem aplicabilidade prática e demonstra como cada uma das regras funciona.

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

Atualmente, o banco de dados que você criou não permite acesso a partir de nenhuma conexão. Esse acesso limitado é por design e baseado nos comandos que você executou para criar o servidor lógico e o banco de dados. Confirme que não há acesso.

  1. No Cloud Shell, SSH em sua VM Linux se você ainda não estiver conectado. Substitua nnn.nnn.nnn.nnnpublicIpAddress pelo valor da unidade anterior.

    ssh nnn.nnn.nnn.nnn
    
  2. Execute novamente o comando recuperado sqlcmd anteriormente para tentar se conectar ao banco de dados. Certifique-se de que substitui [username] e [password] pelas credenciais ADMINUSER que especificou na unidade anterior. Certifique-se de manter as aspas simples em torno do nome de usuário e senha para que o shell não interprete incorretamente nenhum caractere especial.

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

    Você verá um erro semelhante à saída a seguir ao tentar se conectar. Essa saída é esperada, já que 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.

Utilizar a regra ao nível do servidor para permitir acesso aos serviços do Azure

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

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

  2. Na caixa Procurar recursos, serviços e documentos em cima, procure o nome do servidor da sua base de dados, serverNNNNN. Selecione o servidor SQL.

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

  4. Role para baixo até Exceções, marque a caixa de seleção Permitir que os serviços e recursos do Azure acessem este servidor e 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:serverNNNNN.database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Agora deverá conseguir ligar. Se a ligação for feita com êxito, deverá ver uma linha de comandos sqlcmd.

    1>
    

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

Utilizar uma regra de endereços IP ao nível da base de dados

Lembre-se de que as regras de endereços IP ao nível da base de dados só permitem acesso a uma base de dados individual num servidor lógico. Use um aqui para conceder acesso ao IP estático da sua VM appServer .

Para criar uma regra IP no nível de banco de dados, você precisa executar alguns comandos T-SQL. Crie uma regra de banco de dados usando a convenção a seguir, onde você passa o nome da regra, o endereço IP inicial e o endereço IP final. Ao especificar os endereços IP inicial e final para serem os mesmos, você limita o acesso a um único IP. Você pode expandir o intervalo se tiver um bloco maior de endereços que exigem acesso.

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

    Gorjeta

    Quando você executa comandos T-SQL como os seguintes, o na segunda linha pode não copiar para o GOsqlcmd prompt. Talvez seja necessário digitar esta parte. O comando T-SQL não será executado sem ele, portanto, certifique-se de executar o GO comando.

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

    Depois que o comando for concluído, entre exit para sair do sqlcmd. Permaneça conectado por SSH.

  2. No portal do Azure, no painel Rede do seu servidor SQL, desmarque Permitir que os serviços e recursos do Azure acedam a este servidor e, em seguida, selecione Guardar. 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 de banco de dados para seu servidor.

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

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

    Agora deverá conseguir ligar. Se for bem-sucedido, você verá um prompt sqlcmd.

    1>
    

Utilizar uma regra ao nível da base de dados permite que o acesso seja isolado especificamente à base de dados. Esta regra pode ser útil se você quiser manter o acesso à rede configurado por banco de dados. Se múltiplas bases de dados partilharem o mesmo nível de acesso à rede, pode simplificar a administração ao utilizar uma regra ao nível do servidor para aplicar o mesmo acesso a todas as bases de dados no servidor.

Utilizar uma regra de endereços IP ao nível do servidor

As regras no nível de banco de dados são uma ótima opção, mas e se você tiver vários bancos de dados no mesmo servidor ao qual sua VM appServer precisa se conectar? Você pode adicionar uma regra no nível de banco de dados a cada banco de dados, mas isso pode exigir mais trabalho à medida que você adiciona mais bancos de dados. Para reduzir seus 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. Ainda na linha de comandos sqlcmd, execute o seguinte comando para eliminar a regra de endereços IP ao nível da base de dados.

    EXECUTE sp_delete_database_firewall_rule N'My Firewall Rule';
    GO
    

    Depois que o comando for concluído, entre exit para sair do sqlcmd. Permaneça conectado por SSH.

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

  3. Selecione Guardar.

    Screenshot of the Azure portal showing the server firewall rule creation.

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

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

    Agora deverá conseguir ligar. A regra no nível do servidor permite o acesso com base no endereço IP público da VM do appServer . Se a ligação for feita com êxito, deverá ver uma linha de comandos sqlcmd.

    1>
    

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

Você isolou a conectividade apenas para o endereço IP especificado na regra. Esse isolamento funciona muito bem, mas ainda pode ser um desafio administrativo à medida que você adiciona mais sistemas que precisam se conectar. 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, será necessário atualizar a regra para garantir a conectividade. A VM appServer está atualmente configurada com um endereço IP dinâmico. É provável que este endereço IP mude em algum momento, quebrando o seu acesso assim que isso acontecer. Agora veja como as regras de rede virtual podem ser benéficas em sua configuração.

Utilizar uma regra de rede virtual ao nível do servidor

Nesse caso, como sua VM está sendo executada no Azure, você pode usar uma regra de rede virtual no nível de 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 seguintes valores.

    Definição valor
    Nome Deixe o valor predefinido
    Subscrição Subscrição de Assistente
    Rede virtual appServerVNET
    Nome da subrede/Prefixo de endereço appServerSubnet/10.0.0.0/24
  3. Selecione Habilitar para habilitar o ponto de extremidade de serviço na sub-rede e, em seguida, selecione OK depois que o ponto de extremidade estiver habilitado para criar a regra.

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

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

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

    Agora deverá conseguir ligar. Se for bem-sucedido, você verá um prompt sqlcmd.

    1>
    

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

Essa configuração limita sua exposição a serviços fora do 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.