Pular para o conteúdo principal

Microsserviço 11

· 11 min para ler
Leandro Andrade
Leandro Andrade
Software Developer

No mundo moderno de desenvolvimento de software, é essencial possuir um conhecimento abrangente sobre segurança para que medidas protetivas sejam integradas desde o início do processo.

Ao adotar microsserviços, a superfície de ataque se expande devido ao aumento do fluxo de dados através das redes e à maior complexidade da infraestrutura. No entanto, os microsserviços oferecem vantagens como um escopo de acesso mais restrito e uma defesa em camadas, o que minimiza o impacto de um possível ataque quando bem projetados.

Principais tópicos sobre segurança em arquitetura de microsserviços

  • Princípios básicos de segurança;
  • As cinco funções da cibersegurança;
  • Fundamentos da segurança de aplicações;
  • Confiança implícita x confiança zero;
  • Estratégias de proteção de dados;
  • Métodos de autenticação e autorização.

Princípios básicos

A segurança de um ambiente depende de seu elo mais fraco.

O princípio de privilégio mínimo estabelece que o acesso concedido deve ser o mais restrito possível, limitado ao necessário para a execução de uma função e apenas pelo tempo estritamente necessário.

O conceito de defesa em profundidade implica na implementação de múltiplas camadas de segurança. Ao distribuir funcionalidades em diferentes microsserviços e executá-los em segmentos de rede isolados, aplicamos esse princípio de forma eficaz, limitando significativamente o impacto de um ataque bem-sucedido em um único componente.

informação

Ao implementar controles de proteção, podemos categorizá-los em:

  • Controles de prevenção: mecanismos como criptografia de dados e sistemas robustos de autenticação e autorização reduzem a probabilidade de sucesso de um ataque;
  • Controles de detecção: ferramentas como Web Application Firewalls (WAF) e sistemas de detecção de intrusão;
  • Controles de resposta: automação para reconstrução de sistemas, runbooks de incidentes e planos de comunicação eficazes auxiliam na mitigação e recuperação após incidentes.

A automação desempenha um papel crucial na gestão de ambientes complexos, facilitando a recuperação rápida após incidentes e reduzindo o risco de erros manuais em momentos críticos. Isso reforça a necessidade de incorporar práticas de segurança desde o início do desenvolvimento (security by design e security by default).

A segurança não deve ser vista como um obstáculo que atrapalha o lançamento de um software, nem deve ser tratada de forma isolada. Ela precisa ser integrada ao processo de desenvolvimento, às decisões de arquitetura e às prioridades de produto.

informação

Pense na segurança como o freio de um carro.

Cinco funções da cibersegurança

Antes de investir esforço para proteger as aplicações, precisamos considerar quais são as ameaças que iremos enfrentar e, também, definir o que fazer caso um invasor consiga passar pelas defesas.

Na arquitetura de microsserviços, podemos organizar a segurança em cinco funções essenciais:

  1. Identificar: threat modeling (modelagem de ameaças) para entender quem são os possíveis invasores, quais ativos são valiosos e quais caminhos de ataque são mais prováveis;
  2. Proteger: garantir que os bens mais valiosos estejam protegidos por múltiplas camadas de defesa, aplicando defesa em profundidade e privilégio mínimo;
  3. Detectar: detectar incidentes pode ser mais desafiador, pois temos mais redes para monitorar e mais máquinas para vigiar. Com mais fontes de informação, precisamos de ferramentas que permitam agregar todos esses dados em um ponto único de análise. Além disso, ferramentas de detecção de invasão podem ser executadas para identificar comportamento indevido;
  4. Responder: desenvolver uma estratégia eficaz para mitigar danos em caso de incidentes. Uma cultura de acusações e medo deve ser evitada, pois impede que lições sejam aprendidas e que os fatores que levaram ao incidente sejam revelados abertamente;
  5. Recuperar: restaurar a funcionalidade do sistema rapidamente após um ataque, com apoio de automação e processos de recuperação bem estabelecidos.

Fundamentos da segurança de aplicações

Entre os fundamentos de segurança para microsserviços, destacam-se:

  • Credenciais e segredos: gerenciar adequadamente credenciais de sistema e de serviço, enfatizando a importância de rotação, revogação e armazenamento seguro (por exemplo, secret managers);
  • Patching: manter sistemas atualizados pode ser desafiador em ambientes distribuídos; delegar parte dessa responsabilidade a um provedor de nuvem ou a plataformas gerenciadas pode ser benéfico, desde que se mantenha governança e visibilidade;
  • Backups: armazenar dados de maneira segura e isolada, com rotinas de restauração bem definidas e testadas regularmente;
  • Reconstrução: ter a capacidade de restaurar completamente um servidor ou serviço de forma automatizada e confiável. Criar uma rotina operacional desse procedimento faz com que uma reconstrução seja quase isenta de ocorrências inesperadas e reduz o MTTR (Mean Time To Recovery).

Confiança implícita x confiança zero

Usuários interagem com sistemas, e esses sistemas interagem com outros sistemas. Assim, precisamos estabelecer um nível de confiança dentro do nosso ambiente.

Na abordagem de confiança implícita, considera-se que qualquer chamada a um serviço feita de dentro do perímetro de rede é implicitamente confiável. Entretanto, a adoção desse modelo deve ser uma decisão consciente: todos precisam entender e estar cientes dos riscos caso uma invasão ocorra e o perímetro seja violado.

Na abordagem de confiança zero (zero trust), pressupomos que o ambiente já foi comprometido: tudo é potencialmente hostil e todas as chamadas provenientes de outros microsserviços devem ser avaliadas. Dessa forma, adotamos medidas de precaução para garantir que ainda podemos operar com segurança, mesmo em caso de comprometimento parcial. Em vez de se apoiar em um perímetro único, podemos criar zonas de sensibilidade de dados (pública, privada, sigilosa) e microsserviços operando nessas zonas com políticas de acesso e autenticação apropriadas.

Proteção de dados

A transição de sistemas monolíticos para microsserviços resulta em uma maior frequência de movimentação de dados, tanto através de redes quanto em armazenamentos locais distribuídos. A proteção eficaz desses dados depende, em grande parte, dos protocolos de comunicação adotados e das políticas de acesso.

Por exemplo, ao usar HTTP, a segurança é reforçada através de HTTPS, que oferece:

  • proteção contra inspeção e manipulação dos dados em trânsito;
  • autenticação do servidor e, opcionalmente, do cliente (quando combinado com certificados).

Para a comunicação entre usuários e servidores, HTTPS é fundamental, fornecendo mecanismos essenciais de segurança. Em comunicações entre serviços, o mTLS (Mutual TLS) é frequentemente utilizado em ambientes de confiança zero, proporcionando autenticação mútua entre cliente e servidor. Esse modelo é muitas vezes facilitado pelo uso de service mesh, que centraliza a política de segurança de comunicação entre serviços.

Em relação aos dados em repouso, a criptografia é essencial para garantir que as informações permaneçam inacessíveis em caso de violação de disco, backup ou dump de banco de dados, desde que as chaves sejam geridas de forma segura e segregada.

É crucial ser seletivo quanto aos dados coletados dos usuários, armazenando apenas o estritamente necessário para a operação do negócio ou para cumprimento de exigências legais e regulatórias. Dessa forma, minimiza-se o risco associado ao armazenamento de dados sensíveis — ninguém pode roubar aquilo que não é armazenado.

Autenticação e autorização

Autenticação verifica a identidade de um usuário ou serviço, garantindo que são quem afirmam ser. Autorização determina o que esse usuário ou serviço pode fazer dentro do sistema.

Na autenticação de serviço a serviço, o mTLS não só protege os dados em trânsito como também possibilita a autenticação mútua entre cliente e servidor. Alternativamente, chaves de API podem ser usadas para que os servidores validem as requisições dos clientes, embora seja importante controlar sua distribuição e rotação.

Para usuários, a autenticação geralmente envolve um login com senha, frequentemente complementada por autenticação multifatorial (MFA), que solicita informações adicionais (como token, aplicativo autenticador ou biometria) para confirmar a identidade do usuário.

Dada a multiplicidade de usuários e serviços em uma arquitetura de microsserviços, a facilidade de uso se torna uma prioridade. Implementar uma solução de SSO (Single Sign-On) através do padrão OpenID Connect, um complemento do OAuth 2.0, simplifica o acesso a vários serviços sem necessidade de múltiplos logins, centralizando a autenticação.

Além disso, um Gateway de SSO geralmente atua como um proxy, concentrando a gestão de autenticações e autorizações entre os serviços internos e o mundo externo, reduzindo a duplicação de lógica de segurança em cada microsserviço.

Quanto às roles ou funções específicas de um usuário, estas são normalmente definidas por cada microsserviço ou domínio de negócio e podem ser incluídas junto com outras informações em um token JWT. Esse token é dividido em três partes:

  • header: contém detalhes sobre o algoritmo de assinatura e o tipo de token;
  • payload: armazena informações do usuário, incluindo claims que podem ser customizadas;
  • signature: assegura a integridade do token e confirma sua origem legítima.

Além disso, um token JWT também pode incluir os seguintes atributos:

  • iss (issuer): emissor do token;
  • iat (issued at): horário de emissão do token;
  • exp (expiration): horário de expiração do token;
  • jti (jwt id): identificador único do token;
  • sub (subject): identificador do usuário;
  • aud (audience): destinatário previsto do token.

Os tokens JWT podem ser gerados no momento da autenticação inicial do usuário ou renovados em um gateway de SSO, facilitando a integração e o uso desses tokens sem necessidade de alterar todos os fluxos de autenticação dos serviços existentes, desde que se mantenha uma política clara de expiração e revogação.

Ferramentas

Algumas ferramentas podem auxiliar na identificação de vulnerabilidades e no endurecimento da superfície de ataque. Um exemplo é o:

  • Zed Attack Proxy (ZAP): ferramenta mantida pela OWASP para análise de segurança de aplicações web, que pode ser integrada a pipelines de CI/CD ou utilizada em testes manuais.

Riscos e pontos de atenção arquiteturais

  • Superfície de ataque ampliada
    A adoção de microsserviços aumenta o número de endpoints, canais de comunicação e componentes a proteger. É fundamental padronizar autenticação, autorização e criptografia entre serviços, evitando exceções locais “temporárias” que tendem a se tornar definitivas.

  • Confiança implícita dentro da rede interna
    Tratar toda a rede interna como confiável pode levar a cenários em que, após uma única máquina ser comprometida, o invasor tenha acesso amplo. A migração gradual para princípios de zero trust e segmentação por zonas de sensibilidade é um ponto-chave.

  • Gestão de segredos dispersa
    Guardar credenciais em arquivos de configuração, repositórios ou variáveis de ambiente sem governança central aumenta o risco de vazamentos. A utilização de secret managers e políticas de rotação automatizada é recomendada.

  • Criptografia mal gerida
    Criptografar dados em trânsito ou em repouso sem um plano robusto de gestão e proteção de chaves pode criar falsa sensação de segurança. Comprometer a chave é, na prática, comprometer todos os dados protegidos por ela.

  • Tokens JWT com escopos amplos e expiração longa
    Tokens com muitas permissões, sem expiração adequada ou sem mecanismos de revogação efetiva ampliam o impacto de um eventual vazamento. Escopos de acesso enxutos, expirações curtas e refresh tokens bem controlados reduzem esse risco.

  • Falta de padronização de autenticação e autorização entre serviços
    Múltiplos padrões e mecanismos diferentes de autenticação/autorização entre microsserviços tornam a arquitetura difícil de manter e auditar. Centralizar as decisões em um API Gateway ou Gateway de SSO, mantendo políticas consistentes, reduz acoplamento e complexidade.

  • Automação insuficiente em resposta e recuperação
    Processos manuais para reconstrução de serviços, rotação de segredos ou isolamento de componentes comprometidos tendem a ser lentos e suscetíveis a erros. Investir em automação e runbooks testados melhora significativamente a capacidade de resposta.

  • Desalinhamento entre segurança e produto
    Quando segurança é vista apenas como “trava” e não como requisito de negócio, decisões de curto prazo tendem a acumular riscos. Integrar segurança ao ciclo de desenvolvimento (threat modeling, security reviews e testes automatizados) reduz o custo de correção e o risco de incidentes.

Conclusão

Em arquiteturas baseadas em microsserviços, a segurança deixa de ser apenas um requisito de infraestrutura e passa a ser um aspecto central da própria arquitetura de software. Princípios como privilégio mínimo, defesa em profundidade e zero trust, combinados com boas práticas de gestão de segredos, proteção de dados em trânsito e em repouso, autenticação forte, autorização bem desenhada e automação de resposta e recuperação, são fundamentais para reduzir riscos.

Ao integrar essas práticas desde o início do desenvolvimento, alinhadas a threat modeling e às cinco funções da cibersegurança (identificar, proteger, detectar, responder e recuperar), criamos uma base mais resiliente contra ataques. Isso permite que equipes aproveitem os benefícios arquiteturais dos microsserviços — como isolamento de escopo, escalabilidade e evolução independente — sem abrir mão de uma postura de segurança robusta, sustentável e alinhada às necessidades do negócio.