Microsserviços
10
min de leitura
21 de novembro de 2019

Microservices Authentication In Action com Service Mesh

Claudio Eduardo de Oliveira
Líderes técnicos APIs @Luiza Labs
Estou trabalhando com APIs, Microsserviços e aplicações centradas na nuvem.
Mais sobre o autor

Contexto

A arquitetura Microservices é o padrão mais famoso da arquiteturaSoftware hoje em dia, há muitos artigos na internet que tentam explicar os benefícios e os inconvenientes presentes neste estilo de arquitetura.

Tenho alguns anos trabalhando com Microsserviços e, para mim, a parte mais problemática está relacionada com a aplicação da segurança neste cenário. Há muitos padrões e ferramentas que tentam resolvê-lo, a maior parte deles está relacionada com os idiomas e a estrutura.

Microsserviços autenticação

Dessa forma, temos uma espécie de problema porque precisamos aplicar a segurança no "Software" camada e pode causar problemas como:

  • Implementação incorreta pelos desenvolvedores
  • Implementação diferente por causa das estruturas "implica" seus próprios padrões como Spring Security ou Apache Shiro
  • Normalmente, os idiomas também implicam seus próprios padrões
  • Adicionar certificados na camada de aplicação adiciona alguma complexidade extra ao gerenciamento desses certificados
  • A estrutura deve suportar a configuração de certificados
  • Segurança implementada com diferentes padrões na Solução
  • Os desenvolvedores não conhecem a fundo os padrões de segurança, o que causa algumas fugas de segurança.

A segurança é um requisito não funcional e na maioria das empresas, existe uma área específica que irá definir padrões e gerenciar a segurança em todo o ecossistema. Isso significa definir firewalls de rede, privilégios de rede e assim por diante.

Precisamos encontrar uma maneira de criar um padrão de segurança em nossa solução de microserviço. A implementação da ISTIO a Service Mesh pode nos ajudar a adicionar segurança na plataforma (também conhecida como kubernetes) de uma maneira fácil.

Vamos entender isso!!!

Istio Service Mesh Implementação

A explicação sobre Istio está fora do escopo neste post do blog. Se você precisar de algumas explicações sobre você, pode encontrá-las em meu artigo anterior.

Tipos de autenticação na ISTIO

A Istio oferece dois tipos de autenticação. O primeiro visa os usuários finais e o segundo visa a autenticação de serviço a serviço com certificados, entenderemos um pouco mais a fundo sobre estes dois modelos.

Autenticação do usuário final

Esta característica visa autenticar o usuário final, ou seja, uma pessoa que está tentando acessar nosso sistema ou um simples dispositivo ou aplicação que está tentando acessar nossa solução.

Istio permite a autenticação em nível de pedido através da especificação JWT, a especificação de segurança mais utilizada para aplicações nativas da nuvem. Além disso, o Istio permite a integração simples com a especificação OpenId-Connect, outro padrão relevante para a segurança.

Com um par de configurações como JWT Issuer, JWKS URI, e alguns caminhos para incluir e excluir somos capazes de proteger nosso Microsserviços com fluxo de autenticação OAuth. É configurado por arquivos yaml que são muito simples e intuitivos.

Autenticação de serviço a serviço

Este tipo de autenticação às vezes é chamado de autenticação de transporte, ele verificará a conexão do cliente para verificar a comunicação. A Istio oferece mtls como uma solução completa para autenticação do transporte.

Citadel it o componente que fornecerá os certificados digitais baseados nas normas SPIFFE para cada sidecar a.k.a procuradores de enviados presentes no Data Planeta.

Nas próximas seções, explicarei como funciona no tempo de configuração e execução da autenticação em tempo de execução. Vamos fazer isso!!!!

FLUXO DE CONFIGURAÇÃO

Vamos entender como o componente Citadel distribui certificados digitais para cada módulo presente no Data Planeta.

Os passos seguintes descrevem estas interações:

  • A Citadel observa o servidor API da Kubernetes, cria um certificado SPIFFE e um par de chaves para cada uma das contas de serviço existentes e novas. A Citadel armazena o certificado e os pares de chaves como segredos da Kubernetes.
  • Quando você cria uma cápsula, a Kubernetes monta o certificado e o par de chaves na cápsula de acordo com sua conta de serviço através do volume secreto da Kubernetes.
  • A cidadela observa a vida útil de cada certificado e gira automaticamente os certificados, reescrevendo os segredos da Kubernetes.
  • O piloto gera informações seguras de nomenclatura, que definem que conta ou contas de serviço podem executar um determinado serviço. O piloto então passa as informações seguras de nomenclatura para o Enviado do sidecar.

Como podemos ver nas etapas acima, os certificados digitais são totalmente gerenciados pelo componente Citadel na Infra-estrutura Istio.

Isso é muito importante porque torna os certificados digitais fáceis de gerenciar e um ponto centralizado para agir no caso é algo errado com os certificados.

FLUXO DE AUTENTICAÇÃO NO PLANO DE DADOS

O fluxo de autorização de serviço a serviço segue os passos abaixo:

  • Istio redireciona o tráfego de saída de um cliente para o enviado de carro lateral local do cliente.
  • O Enviado do lado do cliente inicia um aperto de mão mútuo TLS com o Enviado do lado do servidor. Durante o aperto de mão, o Enviado do lado do cliente também faz uma verificação segura do nome para verificar se a conta de serviço apresentada no certificado do servidor está autorizada a executar o serviço alvo.
  • O Enviado do lado do cliente e o Enviado do lado do servidor estabelecem uma conexão TLS mútua, e o Istio encaminha o tráfego do Enviado do lado do cliente para o Enviado do lado do servidor.
  • Após autorização, o Enviado do lado do servidor encaminha o tráfego para o serviço do servidor através de conexões TCP locais.

Como podemos ver, o fluxo é fortemente baseado em características de enviado (sidecar).

Conclusões

Neste post, tentei explicar um pouco sobre a autenticação Microsserviços com o Istio.

Como podemos ver, faz nossa configuração de segurança em um ponto centralizado, isto é, em alguns arquivos, mas a autenticação acontece de forma distribuída em enviados ou plano de dados.

Obrigado pela leitura!