Segurança em Microsserviços: 13 Práticas Essenciais para Proteger sua Aplicação

A Importância da Segurança em Arquiteturas de Microsserviços

A arquitetura baseada em microsserviços oferece uma notável flexibilidade e escalabilidade, permitindo a modificação, adição ou remoção de componentes de software de maneira independente, sem gerar impactos em outras partes da aplicação.

Essa abordagem resulta em ciclos de desenvolvimento de software mais curtos, equipes menores e maior liberdade na escolha de linguagens de programação. Além disso, facilita o ajuste ou correção de problemas em funções ou serviços específicos, sem que isso afete outros componentes do sistema.

Em geral, microsserviços possibilitam a divisão de grandes aplicações monolíticas em serviços menores e distintos, que podem ser implementados de forma independente. No entanto, essa maior granularidade eleva o número de componentes, aumentando a complexidade e a dificuldade em garantir a sua segurança.


Fonte: Red Hat

Uma implantação típica de microsserviços abrange camadas de hardware, serviços ou aplicações, comunicação, nuvem, virtualização e orquestração. Cada uma dessas camadas apresenta requisitos, controles e desafios de segurança específicos que devem ser considerados.

Desafios de Segurança em Microsserviços

Microsserviços são geralmente sistemas amplamente distribuídos com regras de acesso complexas, o que aumenta o volume de tráfego a ser monitorado e a superfície de ataque. Além disso, a maioria das infraestruturas de microsserviços opera em ambientes de nuvem, que possuem configurações e controles de segurança variados.

Devido ao grande número de APIs, portas e componentes expostos, os firewalls tradicionais podem não oferecer proteção suficiente. Essas questões tornam as implementações de microsserviços mais suscetíveis a várias ameaças cibernéticas, como ataques man-in-the-middle, de injeção, cross-site scripting, DDoS, entre outros.

A segurança da rede é outro desafio crucial em microsserviços. O controle de identidade e acesso assume um novo nível de complexidade. Outras vulnerabilidades incluem código inseguro e falhas nos sistemas de descoberta de serviços.

Embora a proteção de microsserviços seja mais complexa do que a de aplicações monolíticas, é possível protegê-los de forma eficaz com uma estratégia bem definida e a adoção de práticas recomendadas.

Idealmente, a arquitetura de segurança deve ser distribuída, abrangendo todos os componentes do sistema.

As áreas típicas que exigem atenção incluem:

  • Proteção de aplicações, microsserviços e utilizadores.
  • Segurança na gestão de identidade e acesso.
  • Proteção de dados.
  • Fortalecimento da segurança na comunicação entre serviços.
  • Monitorização contínua dos microsserviços e sistemas de segurança.

Práticas Recomendadas para a Segurança de Microsserviços

Uma estratégia eficaz envolve a combinação de práticas recomendadas, ferramentas e controles para proteger todo o ecossistema. A abordagem específica pode variar conforme o tipo de serviço, aplicações, usuários, fatores ambientais e outras variáveis.

Ao optar por utilizar microsserviços, é essencial assegurar que todas as necessidades de segurança sejam atendidas em relação aos serviços, conexões e dados.

Vamos agora explorar algumas práticas de segurança eficazes para microsserviços.

#1. Integre a Segurança no Desenvolvimento desde o Início 👮

A segurança deve ser parte integrante do ciclo de desenvolvimento. O ideal é integrar a segurança ao processo de desenvolvimento e implementação de microsserviços desde o princípio. Essa abordagem é mais fácil, eficaz e econômica do que tentar adicionar segurança em etapas avançadas do desenvolvimento do software.

#2. Utilize um Mecanismo de Defesa em Profundidade

A Defesa em Profundidade (DiP) consiste em aplicar múltiplas camadas de segurança aos seus serviços e dados. Essa prática torna mais difícil para os invasores ultrapassarem as diversas camadas de proteção, garantindo uma segurança robusta para seus serviços e dados.

Ao contrário de soluções de segurança perimetral, como firewalls, a Defesa em Profundidade utiliza uma combinação de ferramentas como antivírus, firewalls, gestão de patches, software anti-spam, entre outros, para estabelecer diversas camadas de segurança distribuídas por todo o sistema.


Fonte: Imperva

Nesta abordagem, deve-se identificar os serviços mais sensíveis e aplicar as camadas de segurança adequadas.

#3. Implemente Segurança a Nível de Contêiner 📦

Na maioria dos casos, os microsserviços dependem da tecnologia de contêineres. Proteger os contêineres, tanto interna quanto externamente, é uma maneira eficaz de reduzir a superfície de ataque e os riscos. O princípio de segurança do privilégio mínimo é uma prática recomendada e requer uma combinação de estratégias, como:

  • Limitar as permissões ao mínimo necessário.
  • Evitar executar serviços ou outras tarefas utilizando sudo ou contas privilegiadas.
  • Controlar o acesso e consumo dos recursos disponíveis. Limitar o acesso aos recursos do sistema operacional pelos contêineres ajuda a prevenir o roubo ou comprometimento de dados.
  • Não armazenar informações confidenciais no disco do contêiner.
  • Utilizar regras apropriadas para isolar o acesso aos recursos.

É fundamental garantir que as imagens dos contêineres não contenham vulnerabilidades ou problemas de segurança. Uma verificação regular de segurança e vulnerabilidades dos contêineres auxilia na identificação de riscos.

Ferramentas comuns para a análise de imagens incluem Clair e Anchore.

#4. Adote Autenticação Multifator 🔒

A ativação da autenticação multifator aumenta a segurança do front-end.

Os utilizadores que acessarem o sistema deverão fornecer nome de utilizador e senha, juntamente com outra forma de verificação, como um código enviado para o telemóvel ou endereço de email especificado. Essa técnica dificulta a ação de invasores que utilizam credenciais roubadas ou invadidas, pois não poderão fornecer a segunda autenticação.

#5. Utilize Tokens de Identidade e Acesso do Usuário

Na implementação de microsserviços, diversas aplicações e serviços requerem autorização segura e controle de acesso. Um framework de autorização como o OAuth 2.0 e o OpenID permite que os tokens sejam processados de forma segura, protegendo os seus microsserviços. Isso permite que aplicações de terceiros acessem outros serviços ou dados dos utilizadores.

Em uma implementação típica, a aplicação principal solicita que o utilizador autorize o serviço de terceiros. Ao aceitar, a aplicação gera um token de acesso para a sessão.

O OAuth é uma das estratégias mais eficazes para o controle de identidade e acesso do utilizador. Embora existam outros protocolos de autorização e seja possível criar um próprio, é recomendável utilizar o OAuth, pois ele é mais padronizado, estável e amplamente adotado.

#6. Crie um Gateway de API

Microsserviços geralmente consistem em diversos componentes distribuídos em diferentes redes, acessíveis por uma variedade de sistemas e clientes. A exposição dos microsserviços aumenta as vulnerabilidades e os riscos de segurança. Para protegê-los, crie um ponto de entrada único e seguro que centralize o acesso de clientes e sistemas externos.

Para isso, implemente um gateway de API que monitora todas as solicitações recebidas em busca de problemas de segurança, antes de encaminhá-las aos microsserviços apropriados. O gateway de API atua como intermediário entre as aplicações cliente e os microsserviços. Ele limita a exposição dos microsserviços e oferece funções adicionais de gerenciamento de solicitações, como autenticação, terminação SSL, tradução de protocolo, monitorização, roteamento de solicitações, armazenamento em cache, entre outros.

Com essa abordagem, o gateway de API encaminha todos os serviços externos para os microsserviços e suporta o princípio de segurança de defesa em profundidade.


Fonte: Livebook

Gateways de API comuns incluem NGINX, Kong, Tyk, Ambassador, e AWS API Gateway.

Para saber mais sobre segurança de API, consulte nosso guia sobre Por que e como proteger o endpoint da API.

#7. Segmente APIs por Zona de Implantação

Implemente restrições baseadas em função, garantindo que os utilizadores acessem apenas as APIs e serviços necessários. Como softwares maliciosos frequentemente expõem serviços a muitas pessoas, limitar o acesso apenas a utilizadores autorizados reduz os riscos. Uma técnica para reduzir a exposição é classificar as APIs com base nos utilizadores que devem ter acesso. Geralmente, as APIs podem ser:

  • APIs Ethernet: Para serviços expostos ao mundo externo, fora do data center.
  • APIs de Zona Corporativa: Destinadas ao tráfego privado interno.
  • APIs DMZ: Para lidar com o tráfego originado da Internet.
  • APIs de Zona Híbrida: Para implementações de data centers.

#8. Proteja as Comunicações entre Serviços

Práticas eficazes incluem a autenticação e autorização de solicitações quando dois microsserviços estão se comunicando.

Há três técnicas principais que podem ser utilizadas para proteger as comunicações entre serviços: confiar na rede, JSON Web Token (JWT) e Mutual Transport Layer Security (mTLS ou Mutual TLS).


Fonte: Livebook

O mTLS é a técnica mais popular. Nesta abordagem, cada microsserviço deve carregar um par de chaves pública/privada. O microsserviço cliente utiliza o par de chaves para se autenticar no microsserviço receptor através do mTLS.

Durante a autenticação, cada microsserviço gera um certificado. Posteriormente, cada microsserviço utiliza o certificado do outro para se autenticar.

O TLS garante a integridade e confidencialidade dos dados em trânsito, além de permitir que o cliente identifique um microsserviço. No entanto, como o TLS é unidirecional, um microsserviço receptor não pode verificar o microsserviço cliente e invasores podem explorar essa falha. O mTLS oferece um método para que cada microsserviço identifique o outro.

#9. Limite o Tráfego do Cliente 🚏

Limitar o tráfego externo evita problemas como ataques de negação de serviço (DoS), bem como casos em que alguns clientes consomem a maior parte da largura de banda da aplicação. Uma abordagem consiste em aplicar regras que monitoram e controlam a taxa de tráfego enviada ou recebida de um cliente com base no IP, horário, entre outros fatores.

Configure seus serviços para reduzir a velocidade se detectarem várias tentativas de login com falha nas APIs ou qualquer outra atividade suspeita.

Um sistema lento desencoraja os invasores, que provavelmente desistirão de tentar acessar os serviços. É possível limitar a taxa através do gateway de API, do código ou de outras técnicas. Geralmente, a maioria dos ambientes SaaS possui limitação de taxa de API para minimizar abusos por parte dos utilizadores, além de ataques.

#10. Use Gerenciadores de Orquestração

Os gerenciadores de orquestração permitem automatizar a configuração, coordenação e outras tarefas de gerenciamento de microsserviços, aumentando a segurança. As ferramentas permitem gerenciar vários contêineres, limitar o acesso a metadados, segregar cargas de trabalho, coletar logs e muito mais.

Algumas ferramentas de orquestração oferecem recursos adicionais que permitem que os desenvolvedores armazenem e compartilhem informações confidenciais, como certificados SSL, chaves de criptografia, senhas e tokens de identidade.

Os dois métodos mais utilizados para orquestração eficaz de microsserviços são:

  • Codificar a orquestração como um microsserviço.
  • Utilizar os gateways de API para fornecer uma camada de orquestração.

A orquestração através do gateway de API não é recomendada devido a desafios que surgem quando há necessidade de escalar serviços.


Fonte: Globallogic

Ferramentas comuns de gerenciamento de orquestração incluem Kubernetes, Istio, e Azure Kubernetes Service (AKS).

Para mais informações, explore a Orquestração de Contêineres para DevOps.

#11. Monitore Todos os Seus Sistemas e Serviços

Como os microsserviços dependem de sistemas distribuídos, é crucial ter uma estratégia de monitoramento confiável e eficaz para todos os componentes individuais.

A implementação do monitoramento contínuo permite detectar e tratar os riscos de segurança em tempo hábil. Há uma variedade de soluções para monitorar microsserviços, incluindo Prometheus, Statsd, InfluxDB, e Logstash.

Monitorização Interna da Arquitetura de Microsserviços

Utilize ferramentas adequadas para monitorar sistemas e serviços internos. Algumas práticas recomendadas incluem:

  • Ativar o registro na camada de aplicação. Utilize ferramentas como Splunk, Grafana, ELK stack, e outras que coletam logs nos níveis de aplicação, contêiner, rede e infraestrutura.
  • Monitorar métricas de utilização.
  • Analisar tendências em métricas como CPU, memória, tempos de resposta, erros, notificações, entre outras, para detectar atividades incomuns que possam indicar um ataque.
  • Auditar logs em áreas como solicitações de clientes recebidas, registros de base de dados, contêineres e outros, para identificar inconsistências ou atividades suspeitas.

#12. Automatize as Atividades de Segurança

Automatize processos de segurança, como a implementação de atualizações, verificação de vulnerabilidades, monitorização, aplicação de políticas e outras atividades. Além disso, verifique as atualizações para garantir que sejam seguras e não introduzam novas vulnerabilidades.

Após as atualizações, o software de segurança deve realizar testes em todos os contêineres e microsserviços para verificar a existência de vulnerabilidades ou problemas de segurança.

#13. Proteja 🛡️ os Dados em Todos os Momentos

Proteja os dados em trânsito e em repouso. Imponha o uso de HTTPS em todas as comunicações, para proteger os dados em trânsito, e criptografia para todos os dados confidenciais em repouso. Evite transmitir e armazenar senhas, chaves, credenciais e dados confidenciais em texto simples fora do código.

A melhor estratégia é usar tecnologias padrão para criptografar todos os dados confidenciais o mais cedo possível e descriptografá-los o mais tarde possível, para reduzir a exposição.

Conclusão

Os microsserviços utilizam componentes distribuídos para oferecer flexibilidade e opções de implementação. Ao optar por microsserviços, as organizações precisam adaptar as políticas e estratégias de segurança interna para uma abordagem mais distribuída e nativa da nuvem.

O objetivo é reduzir a superfície de ataque, protegendo o ambiente de microsserviços, APIs, aplicações e dados.