O blog da AWS
Arquitetura do PJe (Processo Judicial Eletrônico) na AWS
Jairo da Silva Junior, Senior Solutions Architect, Brazil Public Sector
Visão Geral
O PJe é uma plataforma digital desenvolvida pelo CNJ (Conselho Nacional de Justiça) em parceria com diversos Tribunais e conta com a contribuição consultiva de outros órgãos. Caracteriza-se como um sistema de tramitação de processos judiciais cujo objetivo é atender às necessidades dos diversos segmentos do Poder Judiciário brasileiro, e atualmente é utilizado por diversos Tribunais em todo o país.
Neste contexto, tribunais tem buscado formas de aumentar a disponibilidade, segurança, lidar com o aumento da demanda e reduzir custo com infraestrutura e gerenciamento de suas instalações do PJe. Neste blog falamos de uma proposta de arquitetura para o PJe em AWS para atender estes requisitos.
Arquitetura
A arquitetura do PJe é composta por uma série de componentes de código aberto, como Java, Wildfly, Apache HTTPD, PostgreSQL, pgpool, MinIO e também a utilização de contêineres com Kubernetes.
Ao planejar implantação de uma carga de trabalho na AWS, um ponto importante é entendermos quais serviços gerenciados podemos nos beneficiar para reduzir o esforço com tarefas que não adicionam valor a missão dos Tribunais. Dessa forma, precisamos investimos menos esforço em manter as luzes ligadas e mais em entregar novas funcionalidades e melhorar a experiência dos usuários finais.
Um outro conceito importante, especialmente para sistemas de missão crítica, como o PJe, é utilizarmos uma arquitetura com Múltiplas Zonas de Disponibilidade (Multi-AZ). Uma zona de disponibilidade (AZ) é um ou mais datacenters distintos com energia, rede e conectividade redundantes em uma região da AWS. As AZs proporcionam aos clientes a capacidade de operar aplicativos e bancos de dados de produção com alta disponibilidade, tolerância a falhas e escalabilidade em níveis superiores aos que um único datacenter pode oferecer.
Para garantir alta disponibilidade (HA) da aplicação, o conceito de Multi-AZ é empregado em todas suas as camadas:
- Rede de Entrega de Conteúdo: O Amazon CloudFrontpode acelerar a entrega de sites, quer sejam de objetos estáticos (por exemplo, imagens, folhas de estilo, JavaScript, etc.) ou conteúdo dinâmico (por exemplo, vídeos, áudio, gráficos em movimento, etc.), para visualizadores em todo o mundo. Por padrão, o CDN oferece um cache multicamada que reduz a latência e a carga dos servidores de origem quando o objeto ainda não está no cache da borda. A integração com serviços como Application Load Balancer e Amazon S3, pode reduzir a quantidade de requisições ao PJe, especialmente em páginas com grande volume de acesso
- Balanceamento de Carga: O Application Load Balancer pode ser provisionado automaticamente em múltiplas zonas de disponibilidade, permitindo distribuir automaticamente o tráfego entre os contêineres do PJe, além de escalar de forma automática e incluir mecanismos de segurança como integração com AWS WAF e AWS ACM, permitindo que seja feito o SSL Offload.
- Aplicação: Os contêineres podem ser implantados em instâncias gerenciadas pelo Amazon EKS através de Grupos de Nós, que definem as características dos servidores onde estes contêineres irão executar, como quantidade, tamanho, tipo de instância e disco. Estes Grupos de Nós Gerenciados facilitam escalar a capacidade do seu cluster Kubernetes, verticalmente ou horizontalmente, e realizar atualizações de forma automatizada.
- Banco de Dados: O Amazon Aurora foi projetado para oferecer disponibilidade superior a 99,99%, replicando seis cópias de seus dados em três zonas de disponibilidade e fazendo o backup contínuo de seus dados no Amazon S3. Ele recupera de falhas do armazenamento físico de maneira transparente e o failover de instância normalmente leva menos de 30 segundos. Além de entregar performance três vezes maior que a do PostgreSQL, também possibilita a inclusão de ate 15 réplicas de leitura de forma transparente, permitindo que a aplicação direcione as leituras para estas instâncias.
- Armazenamento de Documentos: O Amazon S3é um armazenamento de objetos criado para armazenar e recuperar qualquer quantidade de dados de qualquer local na Internet. Trata-se de um serviço de armazenamento simples que oferece durabilidade, disponibilidade, desempenho, segurança e, virtualmente, capacidade de dimensionamento ilimitada líderes do setor a um custo muito baixo. As categorias de armazenamento Amazon S3 Standard, S3 Standard-IA e S3 Glacier armazenam os objetos de forma redundante em vários dispositivos em no mínimo três zonas de disponibilidade de uma região do Amazon S3 antes de confirmar o êxito da operação.
Segurança
Controle de Tráfego na Borda: O Amazon CloudFront é uma CDN altamente segura que oferece proteção para redes e aplicações. Todas as suas distribuições do CloudFront são protegidas por padrão contra os ataques de DDoS na camada de transporte e rede que ocorrem com mais frequência e visam os sites ou aplicações com o AWS Shield Standard. Para se defender contra ataques mais complexos, é possível adicionar um perímetro de segurança flexível e em camadas integrando o CloudFront com o AWS Shield Advanced e o AWS Web Application Firewall (WAF). As regras de firewall, selecionadas e gerenciadas por especialistas em segurança da Amazon, para proteção contra os CVEs comuns e os 10 principais riscos de segurança da OWASP são fornecidas com o AWS Managed Rules para AWS WAF. Além disso o WAF através da funcionalidade Bot Control, também oferece visibilidade e controle sobre o tráfego de bot comum e invasivo que pode consumir recursos em excesso, distorcer métricas, causar tempo de inatividade ou realizar outras atividades indesejadas.
Camadas de Rede: Componentes que compartilham os mesmos requisitos de acessibilidade são agrupados em camadas, por exemplo, os balanceadores de carga são colocados em sub-redes, enquanto o cluster de banco de dados, sem necessidade de acesso à Internet, devem ser colocados em sub-redes sem nenhuma rota para/da Internet. Também é possível implementar NAT gateway’s, caso exista a necessidade de baixar pacotes da Internet, permitindo que realizem o acesso em uma única direção, sem expor as instâncias.
Monitoramento e registro de log: O AWS CloudTrail aumenta a visibilidade sobre as atividades de usuários e recursos ao registrar as ações e as chamadas de API do Console de Gerenciamento da AWS. Você pode identificar quais usuários e contas chamaram a AWS, a origem dos endereços IP de onde as chamadas foram feitas e quando as chamadas ocorreram. Adicionalmente, é possível habilitar o registro em log dos fluxos de rede com VPC Flow Logs, registro de solicitações HTTP realizadas ao Application Load Balancer e CloudFront, e registro de solicitações inspecionadas pelo WAF diretamente para o S3.
Um outro recurso bastante importante é a auditoria a nível de operações em banco de dados, que pode ser alcançado com recursos nativos de auditoria do PostgreSQL integrados com serviços de log ou ainda com recursos nativos do Aurora, como os streams de atividade de banco de dados, que fornecem um stream quase em tempo real da atividade no seu banco de dados relacional. Quando você integra streams de atividade de banco de dados com ferramentas de monitoramento, é possível monitorar e fazer a auditoria da atividade de banco de dados.
Proteção de dados
Criptografia em Trânsito: AWS fornece endpoints HTTPS usando o protocolo TLS (Transport Layer Security) para comunicação, proporcionando criptografia em trânsito quando você usar APIs da AWS. É possível usar o serviço AWS Certificate Manager (ACM) para gerar, gerenciar e implantar os certificados privados e públicos que você usa para estabelecer transporte criptografado entre sistemas para suas cargas de trabalho. Diversos serviços da AWS compatíveis com TLS, como Amazon Elastic Load Balancing, são integrados ao ACM para fornecer certificados X.509 públicos e privados e, em alguns casos, para alternar automaticamente os certificados em seu nome. Caso seu conteúdo seja distribuído por meio do Amazon CloudFront, ele também é compatível com endpoints criptografados e certificados gerenciados pelo ACM.
Criptografia em Repouso: O AWS KMS é um serviço gerenciado que permite criar e controlar com facilidade as chaves usadas para operações criptográficas. O serviço oferece uma solução de geração, armazenamento, gerenciamento e auditoria de chaves altamente disponível para que você criptografe ou assine digitalmente dados nos suas próprias aplicações ou controle a criptografia de dados nos serviços da AWS. Estas chaves podem ser utilizadas para garantir que dados armazenados no Amazon RDS e Amazon S3, de forma que não sejam passíveis de leitura por nenhum usuário ou aplicativo sem a autorização adequada, que inclui uma chave válida.
Migração
A migração do PJe de um ambiente on-premises para AWS pode utilizar diferentes estratégias como Re-host (Lift and shift), onde move-se a aplicação sem mudanças, e ferramentas como o AWS Application Migration Service (AWS MGN) podem ser utilizadas para automatizar este processo, porém, neste blog iremos focar numa estratégia de Re-platform (Lift, Tinker and Shift), onde poderemos realizar algumas otimizações de Nuvem para obter os benefícios descritos na Arquitetura de Referência.
A migração de dados requer planejamento de forma a garantir que a transferência inicial e incremental dos dados aconteça na janela de tempo esperada, e podemos contar com serviços AWS para simplificar e otimizar a migração do Servidor de Arquivos e Banco de Dados:
- AWS DataSyncpermite transferir arquivos de um Sistema de Armazenamento de Objetos on-premises, como o MinIO, para um serviço gerenciado na AWS como o Amazon S3. Com o DataSync, é possível transferir dados rapidamente da rede para a AWS. Ele usa um protocolo de rede especialmente criado e uma arquitetura paralela e multithread para acelerar as transferências.
- O AWS Database Migration Service ajuda você a migrar bancos de dados para a AWS de modo rápido e seguro. O banco de dados de origem permanece totalmente operacional durante a migração, minimizando o tempo de inatividade de aplicativos que dependem do banco de dados. O AWS Database Migration Service pode migrar dados de/para a maioria dos bancos de dados comerciais e de código aberto mais usados.
As ferramentas acima permitem realizar tanto a carga inicial dos dados, quanto a replicação contínua/diferencial. No caso do AWS DMS é utilizado o mecanismo de CDC (Change Data Capture) para capturar mudanças no log de transações das bases de dados e aplicá-las diretamente em uma base de dados destino, já com o DataSync é possível realizar a comparação entre um sistema de arquivos on-premises com outro na AWS e replicar apenas as diferenças desde a última sincronização. Permitindo que seja realizado o cut over para a Nuvem com o mínimo de indisponibilidade.
Com o processo de migração de dados estabelecido, é possível iniciar o provisionamento e configuração dos componentes da camada de aplicação, como o Cluster de Amazon EKS ou Imagem de máquina da Amazon (AMI) e Grupos Auto Scaling para o PJe, caso haja preferência por utilizar Instância Virtual em vez de Container, Application Load Balancer, CloudFront e WAF.
Após os testes iniciais e validação do ambiente pode-se programar uma interrupção, garantir que todas as sincronizações de banco de dados e servidor de arquivos foram realizadas e realizar a atualização do registro no DNS para o nome da distribuição CloudFront.
Conclusão
Neste blog falamos sobre a Arquitetura do PJe (Processo Judicial Eletrônico) em AWS, onde levamos em consideração as melhores práticas do AWS Well-Architected Framework, apresentando uma solução com Segurança, Excelência Operacional, Resiliência, Confiabilidade e Eficiência de Custos. A arquitetura proposta permite novas instâncias do PJe sejam rapidamente provisionadas e escalem para atender o crescimento das solicitações e novas demandas de negócio, com alto nível de disponibilidade e desempenho, e permitindo também uma visão assertiva dos custos de cada ambiente por período de atualização. O Amazon S3 foi projetado para fornecer 99,999999999% (onze noves) de resiliência de dados de objetos, com controle fino de acesso e auditoria a nível de objeto, em conjunto com recursos como versionamento, lock de objetos e criptografia permitem aos Tribunais um nível elevado de controle e segurança que raramente é encontrado em ambientes on-premises e com um custo muito baixo, principalmente quando utilizado recursos como o Amazon S3 Intelligent-Tiering (S3 Intelligent-Tiering), uma classe de armazenamento do S3 projetada para otimizar os custos de armazenamento ao mover automaticamente os dados para o nível de acesso mais econômico, sem sobrecarga operacional.
Sobre o Autor
Jairo Silva Junior é Arquiteto de Soluções na AWS no time de Public Sector com foco em Governo. Anteriormente atuou em diversos papéis no ciclo de entrega de software, como desenvolvimento, arquitetura e operação, em diversos tipos de empresas. Possui Mestrado em Ciência da Computação e é apaixonado por viagens e comida.