Realizamos uma análise completa da infraestrutura AWS da Bell Software, que hospeda um ERP SaaS utilizado por aproximadamente 3.000 clínicas de estética em todo o Brasil. A aplicação roda em 16 servidores na região Ohio (us-east-2), com um banco de dados MariaDB em um servidor de alta capacidade (48 processadores, 192GB de memória).
O custo mensal atual gira em torno de USD $3.400 (~R$ 20.000). Identificamos 12 vulnerabilidades de segurança (5 críticas), oportunidades de redução de custo de até 40%, e uma proposta de rearquitetura que trará mais segurança, escalabilidade e economia.
A conta não possui auditoria de ações (CloudTrail desativado), o que significa que não há registro de quem fez o quê na infraestrutura. Além disso, 10 dos 16 servidores têm a porta SSH (acesso remoto) aberta para toda a internet, e o servidor de banco de dados principal possui IP público — qualquer pessoa na internet pode tentar acessá-lo.
Para uma empresa que lida com dados sensíveis de pacientes de clínicas de estética (nome, CPF, histórico de procedimentos, fotos), isso representa um risco significativo de vazamento de dados e possíveis implicações com a LGPD.
12 vulnerabilidades encontradasO servidor de banco de dados (M6A.12xlarge) custa aproximadamente USD $1.500/mês sozinho, mas opera com CPU média de apenas 28%. A aplicação PHP (M5A.4xlarge) tem CPU média de 19% durante o dia e cai para 3-4% nos finais de semana.
Isso significa que a infraestrutura está superdimensionada e paga 24 horas por dia, 7 dias por semana, mesmo quando o uso é mínimo (madrugada e domingos). Com auto-scaling e instâncias reservadas, é possível reduzir significativamente o custo mensal.
Economia estimada de até 40%Hoje a aplicação roda em um único servidor. Se esse servidor tiver um problema, todas as 3.000 clínicas ficam sem acesso. Não há redundância, não há auto-scaling, e o backup do banco é feito apenas uma vez por dia — em caso de falha, podem ser perdidas até 24 horas de dados.
O banco de dados MariaDB roda diretamente em uma instância EC2 (não é um serviço gerenciado), o que significa que a equipe da Bell é responsável por patches, backups, recuperação de desastres e monitoramento.
Single point of failureNão existe CloudTrail (auditoria), VPC Flow Logs (monitoramento de rede), nem CloudWatch Agent nos servidores. Isso significa que não há como saber se alguém acessou indevidamente a infraestrutura, não há como investigar incidentes, e não há métricas detalhadas de performance da aplicação.
Sem logs centralizados, qualquer problema de performance ou segurança se torna um "tiro no escuro" para diagnosticar.
Zero visibilidade operacionalUm plano em 3 fases que resolve os problemas de segurança imediatamente, reduz custos no curto prazo, e moderniza a arquitetura no médio prazo:
Correção imediata das vulnerabilidades críticas: fechar portas abertas, habilitar auditoria, configurar políticas de senha, ativar detecção de ameaças. Sem custo adicional significativo (a maioria dos serviços de segurança da AWS tem custo mínimo).
Migrar o banco de dados para Amazon RDS (serviço gerenciado), implementar auto-scaling na aplicação, adicionar WAF e CloudFront. Economia estimada de 25-35% com mais segurança e disponibilidade.
Containerizar a aplicação com ECS Fargate, migrar para Aurora Serverless. A infraestrutura escala automaticamente conforme a demanda. Economia de até 40-50% e zero gerenciamento de servidores.
A conta não possui CloudTrail configurado. Isso significa que não há registro de quem acessou a conta, quem alterou configurações, quem parou/iniciou servidores, ou qualquer outra ação. Em caso de incidente de segurança, não há como investigar o que aconteceu.
10 Security Groups permitem acesso SSH (porta 22) de qualquer IP da internet. Isso inclui os servidores principais: php-belle, php-saas, db01, db02, bellemessage, websites-webserver, munin. Qualquer pessoa pode tentar ataques de força bruta para acessar esses servidores.
| Security Group | Nome | Servidores Afetados | Portas Abertas 0.0.0.0/0 |
|---|---|---|---|
| sg-065192f32b38781a2 | launch-wizard-2 | php-belle, bellemessage, logging, meetbelle | SSH(22), HTTP(80), HTTPS(443) |
| sg-0d9597ba2cb2d5ba3 | launch-wizard-3 | db01 (M6A.12xlarge), db02 | SSH(22) |
| sg-02a24340bbbaeebdf | launch-wizard-5 | php-saas | SSH(22), HTTP(80), HTTPS(443), Kibana(5601) |
| sg-0290e83d0b11e1625 | launch-wizard-8 | websites-webserver, web-nginx | SSH(22), HTTP(80), HTTPS(443) |
| sg-0057a85575e9c4b8a | ssh+web+ftp | munin | SSH(22), HTTP(80), HTTPS(443) |
| sg-0688f413530a56c61 | chat-hardened | playchat, bellechat-v2 | SSH(22), HTTP(80), HTTPS(443) |
| sg-0715e9deeda0c2c3d | launch-wizard-9 | websites-db | SSH(22) |
| sg-05bdbd18cac152190 | new-apis | - | SSH(22), HTTP(80), HTTPS(443) |
O servidor db01 (M6A.12xlarge) que contém todos os dados das 3.000 clínicas possui IP público (3.13.7.154). Embora o MariaDB (porta 3306) esteja restrito a IPs internos no Security Group, o servidor em si está exposto na internet com SSH aberto. Isso é um risco grave para dados sensíveis protegidos pela LGPD.
A conta não possui política de senha configurada. Usuários podem criar senhas fracas sem requisitos de complexidade ou rotação.
O servidor php-saas tem a porta 5601 (Kibana/Elasticsearch) aberta para 0.0.0.0/0. Kibana exposto pode revelar logs, dados internos e ser usado como vetor de ataque.
Apenas root e 1 usuário possuem MFA. Usuários sem MFA: alessandro, andre, apis-firewall, claudemir, gabriel, joao, lucas, playsaas, s3-unlayer, tarso.
| Usuário | Key Criada | Último Uso | Problema |
|---|---|---|---|
| apis-firewall | Jul/2020 | Set/2021 | Key de 5 anos, sem uso há 4+ anos |
| tarso | Fev/2020 | Mar/2026 (ativa) | Key de 6 anos, nunca rotacionada |
| alessandro | Jan/2025 | Jan/2025 | Sem uso há 14 meses |
| s3-unlayer | Abr/2023 | Out/2025 | Key de 3 anos |
| claudemir | Dez/2025 | Nunca usada | Key criada mas nunca utilizada |
Sem monitoramento de tráfego de rede. Impossível detectar tráfego suspeito, tentativas de acesso não autorizado ou exfiltração de dados.
Apenas php-saas possui IAM Instance Profile (CodeDeployRole). As demais 15 instâncias não têm role associada, o que significa que qualquer acesso a serviços AWS de dentro delas provavelmente usa access keys hardcoded.
Vários usuários com senhas que nunca foram alteradas: tarso (Set/2021 — 4.5 anos), alessandro (Nov/2022 — 3.4 anos), gabriel (Abr/2023 — 3 anos).
Todos os 16 servidores estão na VPC default (vpc-530bd13a) sem segmentação. Banco de dados, aplicação e serviços auxiliares compartilham a mesma rede sem isolamento.
Nenhuma instância envia logs de aplicação (nginx, php, mariadb) para o CloudWatch. Custo de CloudWatch de apenas $3.69/mês confirma que só métricas básicas de EC2 estão sendo coletadas. Sem logs centralizados, é impossível diagnosticar problemas de performance ou investigar incidentes.
GuardDuty está habilitado em us-east-2 com 13 findings de baixa severidade. Custo de $37/mês — bom investimento em detecção de ameaças.
A conta root possui MFA habilitado, o que é uma boa prática fundamental.
| Mês | Custo (USD) | Custo (BRL ~6x) | Variação |
|---|---|---|---|
| Out/2025 | $4.320 | ~R$ 25.920 | - |
| Nov/2025 | $4.422 | ~R$ 26.530 | +2.4% |
| Dez/2025 | $3.840 | ~R$ 23.040 | -13.2% |
| Jan/2026 | $3.600 | ~R$ 21.600 | -6.3% |
| Fev/2026 | $3.180 | ~R$ 19.080 | -11.7% |
| Mar/2026 | $3.427 | ~R$ 20.562 | +7.8% |
Tendência de queda de Out a Fev (~28% de redução). Março com leve aumento. Média dos últimos 6 meses: ~$3.715/mês (~R$ 22.290).
| Serviço | Custo (USD) | % do Total | Observação |
|---|---|---|---|
| Savings Plans (Compute) | $1.234 | 36.0% | Compromisso de uso já contratado |
| EC2 Compute (On-Demand) | $1.014 | 29.6% | Instâncias não cobertas pelo SP |
| EC2 Other (EBS, IPs, etc) | $442 | 12.9% | Volumes EBS + Elastic IPs |
| Tax | $361 | 10.5% | Impostos |
| S3 | $250 | 7.3% | Armazenamento de arquivos |
| VPC | $53 | 1.5% | NAT Gateway / Data Transfer |
| GuardDuty | $37 | 1.1% | Detecção de ameaças |
| ElastiCache | $22 | 0.6% | Cache Redis/Memcached |
| SQS | $6 | 0.2% | Filas de mensagens |
| Lambda + CloudWatch + Outros | $8 | 0.2% | Serviços auxiliares |
EC2 Compute + Savings Plans + EBS representam $2.690/mês (78% do custo total). Detalhamento por instância:
| Instância | Tipo | vCPUs | RAM | Custo Est./mês | CPU Média | Observação |
|---|---|---|---|---|---|---|
| db01 | m6a.12xlarge | 48 | 192 GB | ~$1.500 | 28% | Banco principal — superdimensionado |
| php-belle | m5a.4xlarge | 16 | 64 GB | ~$500 | 19% | App principal — 3-4% nos domingos |
| db02 | m6a.2xlarge | 8 | 32 GB | ~$250 | - | Banco secundário |
| playchat | m6g.2xlarge | 8 | 32 GB | ~$220 | - | PlayChat |
| bellemessage | m6g.2xlarge | 8 | 32 GB | ~$220 | - | Belle Message |
| php-saas | m5a.xlarge | 4 | 16 GB | ~$125 | - | PlaySaaS |
| munin | m5.large | 2 | 8 GB | ~$70 | - | Monitoramento |
| websites-db | t4g.large | 2 | 8 GB | ~$50 | - | DB websites |
| websites-webserver | t4g.large | 2 | 8 GB | ~$50 | - | Webserver sites |
| Outros (5 inst.) | t2/t3/t4g micro | - | - | ~$40 | - | vpn, logging, monitor, meet, bellechat-v2 |
| Nome | Tipo | Estado | h>Security Group | IAM Role | |
|---|---|---|---|---|---|
| db01 | m6a.12xlarge | ▶ running | 3.13.7.154 | launch-wizard-3 | Nenhum |
| db02 | m6a.2xlarge | ▶ running | 3.17.124.228 | launch-wizard-3 | Nenhum |
| php-belle | m5a.4xlarge | ▶ running | 3.17.101.139 | launch-wizard-2 | Nenhum |
| php-saas | m5a.xlarge | ▶ running | 3.137.99.25 | launch-wizard-5 | CodeDeployRole |
| playchat | m6g.2xlarge | ▶ running | 3.132.156.149 | chat-hardened | Nenhum |
| bellemessage | m6g.2xlarge | ▶ running | 3.143.159.36 | launch-wizard-2 | Nenhum |
| munin | m5.large | ▶ running | 3.134.184.40 | ssh+web+ftp | Nenhum |
| websites-db | t4g.large | ▶ running | 3.22.78.142 | launch-wizard-9 | Nenhum |
| websites-webserver | t4g.large | ▶ running | 3.22.85.209 | launch-wizard-8 | Nenhum |
| vpn | t2.micro | ▶ running | 18.217.207.70 | OpenVPN | Nenhum |
| logging | t2.micro | ▶ running | 3.145.190.132 | launch-wizard-2 | Nenhum |
| monitor | t4g.micro | ▶ running | 3.22.166.162 | monitor-hardened | Nenhum |
| meetbellesoftware | t3.micro | ▶ running | 3.16.152.209 | launch-wizard-2 | Nenhum |
| bellechat-v2 | t3.micro | ▶ running | 52.14.209.203 | chat-hardened | Nenhum |
| web-nginx | m5.large | ⏹ stopped | - | launch-wizard-8 | Nenhum |
| webdb | m5.large | ⏹ stopped | - | launch-wizard-9 | Nenhum |
| Usuário | MFA | Console | Access Key | Último Login | Senha Alterada |
|---|---|---|---|---|---|
| root | ✓ | ✓ | - | Dez/2025 | Dez/2025 |
| tarso | ✗ | ✓ | Ativa (6 anos) | Mar/2026 | Set/2021 |
| alessandro | ✗ | ✓ | Ativa (sem uso 14m) | Fev/2026 | Nov/2022 |
| andre | ✗ | ✓ | - | Mar/2026 | Nov/2024 |
| gabriel | ✗ | ✓ | - | Mar/2026 | Abr/2023 |
| joao | ✗ | ✓ | - | Fev/2026 | Mai/2024 |
| lucas | ✗ | ✓ | - | Dez/2025 | Abr/2024 |
| claudemir | ✗ | ✓ | Ativa (nunca usada) | Jan/2026 | Dez/2025 |
| playsaas | ✗ | - | Ativa (em uso) | - | - |
| s3-unlayer | ✗ | - | Ativa (3 anos) | - | - |
| apis-firewall | ✗ | - | Ativa (sem uso 4+ anos) | - | - |
Recomendação: Como próximo passo, instalar o CloudWatch Agent em todas as instâncias para enviar logs de aplicação. Isso permitirá uma análise muito mais profunda de performance e segurança.
Multi-região, S3 + CloudWatch Logs
Restringir para IP da VPN apenas
Mover para subnet privada
Todos os usuários com console
Remover apis-firewall, rotacionar tarso
Restringir para VPN
Habilitar na VPC principal
Instalar em todas as instâncias
Proteção OWASP + CDN
Backup PITR, subnet privada
php-belle com min:1 max:4
Remover access keys hardcoded
CIS Foundations benchmark
Docker + ECR
Migrar app principal
Escala automática 0.5-128 ACU
Blue/Green deploy
PlayChat, BelleMessage → Fargate
Cache para queries de agenda
Otimizar slow queries
Compromisso para economia extra
VPC com subnets públicas/privadas
| Risco | Severidade | Status Atual | Impacto | Ação |
|---|---|---|---|---|
| Vazamento de dados (LGPD) | CRÍTICO | SSH aberto, DB público | Multa LGPD + reputação | Fechar SGs + subnet privada |
| Sem auditoria | CRÍTICO | CloudTrail desativado | Impossível investigar incidentes | Habilitar CloudTrail |
| Indisponibilidade | ALTO | Single point of failure | 3.000 clínicas offline | RDS Multi-AZ + ASG |
| Perda de dados | ALTO | Backup 1x/dia | Até 24h de dados perdidos | PITR (RPO 5min) |
| Custo excessivo | MÉDIO | Sem auto-scaling | ~R$8.000/mês desperdiçados | ASG + Serverless |
Relatório gerado em 30/03/2026
Acesso: role upperstack-assessment (read-only) | Conta: 748018363708