O isolamento de sua rede em um VPC tem grandes benefícios de segurança, incluindo a possibilidade de colaboração privada e o armazenamento adequado de informações sensíveis.
No lado do desenvolvimento da casa, o isolamento da rede também permite a implantação de aplicações web multi-camadas. O isolamento de sua aplicação permite segmentar camadas com e sem acesso público à Internet. Isto é freqüentemente usado para isolar a camada de banco de dados da Internet pública, enquanto ainda permite que patches e atualizações de software sejam puxados de uma camada superior em vez de diretamente da Internet pública. Além de diminuir a superfície de ataque, isto pode permitir implementações multi-regiões.
Há inúmeras maneiras de executar várias camadas, mas você normalmente pode confiar em algumas formas básicas que maximizam a escalabilidade, a segurança e a confiabilidade. Um dos projetos mais comuns é uma arquitetura em três camadas que é especialmente popular em ambientes baseados em nuvens.
Uma aplicação em três camadas consiste em três camadas diferentes que residem em servidores diferentes e podem ser desenvolvidas e administradas com um alto grau de independência. Estas partes são:
- Apresentação: A interface externa que gerencia a comunicação entre o usuário e a aplicação, normalmente consistindo de um servidor web com HTML e código de desenvolvimento web de acompanhamento.
- Aplicação: Uma aplicação personalizada que fornece a lógica comercial necessária e cola a aplicação em conjunto.
- Dados: Um sistema de banco de dados para armazenamento e recuperação de dados utilizados com a aplicação.
Estas três camadas servem como serviços separados que se comunicam através de APIs baseadas em rede. As preocupações de segurança e desempenho muitas vezes exigem que os níveis de Aplicação e Dados residam na mesma rede local atrás de um firewall comum, mas a separação de cada camada traz o potencial de implantar cada componente em hardware diferente ou mesmo em locais físicos diferentes. A flexibilidade aqui dependerá drasticamente dos requisitos de sua aplicação.
O diagrama abaixo mostra uma visão do mundo real de uma aplicação web básica de três níveis. O servidor web na camada de Apresentação fornece uma interface para um usuário que trabalha em uma janela do navegador. Na extremidade oposta, a camada de Dados toma a forma de um banco de dados, que poderia ser um sistema único ou um cluster apresentado à rede como uma única entidade. As opções populares de código aberto para a camada de banco de dados incluem MySQL, MariaDB e PostgreSQL para SQL e MongoDB e Cassandra para NoSQL.
Entre o servidor web e o banco de dados está a camada Application tier, onde você provavelmente passará a maior parte do seu tempo de codificação. A camada Application tier contém o código personalizado e a lógica comercial que você precisa para que a aplicação alcance seus objetivos. No front-end, o servidor web envia consultas para a camada de Aplicação. A camada de Aplicação responderá ao servidor web e o servidor web formatará os dados e os apresentará ao usuário. Na parte de trás, a camada de Aplicação consulta o banco de dados, recebe os dados e depois processa os dados para acrescentar inteligência e insight para o usuário.
Como um exemplo muito simples, o banco de dados pode armazenar registros de vendas para uma empresa. O usuário entra um pedido para receber a média diária de vendas de um produto específico em um local específico durante um determinado intervalo de tempo. O servidor web envia a solicitação para o nível Application tier. A camada de Aplicação formula uma consulta ao banco de dados, recebe os dados brutos, realiza os cálculos necessários e depois envia uma resposta de volta ao servidor web.
Não há uma solução de entrega conveniente para a camada de Aplicação que seja equivalente, digamos, a um servidor web Apache para a camada de Apresentação ou um banco de dados MongoDB para a camada de Dados. Em vez disso, o código personalizado é tipicamente escrito em Python, PHP ou Ruby para a camada de Aplicação. Entretanto, existem algumas estruturas de programação que lhe darão um avanço na escrita do código de forma mais eficiente, incluindo Django (para Python), Rails (para Ruby), e Symfony (para PHP).
A camada de Aplicações poderia, em teoria, ser combinada com a camada de Apresentação fornecendo ao servidor web o código necessário para consultas diretas a um banco de dados, mas isso seria impraticável para a maioria das lógicas comerciais complexas e negaria muitos dos benefícios da segmentação de aplicações.
Um dos mais importantes desses benefícios é o aumento da segurança com uma superfície de ataque menor. Conforme mostrado na Figura 1, uma solução em três camadas minimiza a parte do aplicativo que deve residir na frente do firewall. O servidor da Web se comunica por meio de uma conexão segura com o firewall. API. O restante da atividade fica atrás do firewall e, principalmente, em um espaço de endereço privado que não pode ser acessado pela Internet. As injeções de SQL, em particular, são uma das vulnerabilidades mais comuns e uma das mais destrutivas. Elas podem ser evitadas isolando e protegendo toda a comunicação direta com o banco de dados.
Outro benefício da aplicação em três níveis é a confiabilidade. Uma interrupção em uma camada é menos provável de afetar as outras camadas quando cada camada está rodando em um servidor separado ou separada mais para hardware diferente ou outro centro de dados inteiramente. Isto também nos dá potencial para escalabilidade. Como os componentes operam independentemente, eles podem crescer independentemente. Por exemplo, se o acesso ao banco de dados for um gargalo de desempenho, você pode adicionar nós ao cluster do banco de dados com o mínimo de interrupção na operação geral.
Uma abordagem em três níveis também pode otimizar o processo de desenvolvimento. Os APIs que conectam as camadas separam os componentes de forma a apoiar a eficiência na divisão do trabalho. Os desenvolvedores e administradores da Web podem operar e manter o servidor Web enquanto os desenvolvedores e administradores de banco de dados podem executar o sistema de banco de dados. No meio, os especialistas na estrutura que você está usando para a camada de aplicação podem concentrar sua atenção no código da aplicação. Em um cenário DevOps, por exemplo, os desenvolvedores de aplicações podem construir e testar uma nova versão do código da aplicação offline, alterando-o facilmente com o mínimo efeito sobre as operações.
Se você está começando a construir uma aplicação web, considere uma arquitetura em três camadas. Nos atuais ambientes de contêineres e nuvens, é fácil separar os componentes em diferentes sistemas, e você será recompensado por seus esforços com uma aplicação mais confiável, mais segura e mais escalável.
Comece hoje mesmo com Linode para construir suas camadas de aplicação.
Recursos: Introdução às VLANs | Aplicações Cross-Data Center
Linode Solutions: VLANs | Bancos de dados gerenciados
Comentários (1)
You can eliminate the “NAT” in Figure 1. It’s not needed in an IPv6 world. A proper firewall will suffice.