Apache Kerberos
Autenticação e Propagação de Identidade

A autenticação pode ser categorizada em dois tipos:
-
Autenticação de Serviços: Verifica a identidade entre diferentes componentes de serviço como HDFS, YARN, MapReduce, etc.
-
Autenticação de Usuário: Um processo que permite a um dispositivo verificar a identidade de um usuário/cliente que se conecta a um recurso de rede. Sem a autenticação de usuário, o serviço simplesmente confia na informação de identidade fornecida pelo cliente.
Na maioria dos cenários, uma senha é utilizada como prova de identidade. No entanto, é necessário prevenir a interceptação ou "escuta" desta senha e fornecer um meio de autenticação de usuários, de modo que sempre que um usuário solicitar um serviço, ele deve provar sua identidade.

Características do Apache Kerberos
O Kerberos é o resultado de um esforço do MIT - Massachusetts Institute of Technology, conhecido como "Projeto Athena", iniciado em 1983. É um protocolo de autenticação de computadores em rede de código aberto, que fornece Login Único (SSO) baseado em um serviço de autenticação mútua confiável (usuários e serviços dependem de uma terceira parte: o servidor Kerberos). Foi adotado pela equipe Hadoop como componente para autenticação para acesso ao Cluster Hadoop. Dentre suas principais características, destacamos:
-
Confiabilidade:
- Os serviços com acesso controlado pelo protocolo só estarão disponíveis se o Kerberos também estiver. Utiliza uma arquitetura distribuída de servidores, com sistemas habilitados a fazer backup uns dos outros.
- É um sistema de autenticação mútua que garante não apenas que o usuário é quem diz ser, mas também que os serviços que o usuário está acessando são os esperados. Usuários e o servidor sempre estarão seguros de que a contraparte com a qual estão interagindo é autêntica.
-
Escalabilidade: Senhas ou chaves secretas são conhecidas apenas pelo Centro de Distribuição de Chaves (KDC) e pelo Principal do Kerberos, tornando o sistema escalável para autenticar um grande número de entidades, que só precisam conhecer suas próprias chaves secretas e configurá-las no KDC.
-
Segurança: A senha do usuário nunca é transmitida pela rede. Usa Tickets, que são negociados com o servidor, com um limite de tempo de vida.
-
Transparência: O usuário não tem conhecimento do processo de autenticação em si, exceto pela solicitação de uma senha.
-
Simplicidade: Utiliza o sistema SSO (Single Sign-On), onde um único ticket pode ser usado por todos os serviços até que a validade expire.
Simplifica a gestão de usuários: Criar, deletar, atualizar usuários no Kerberos é muito simples. -
Velocidade, pois utiliza Operações de Chave Simétrica, que são sempre mais rápidas em operações de autenticação SSL, que é baseada em chaves públicas e privadas.
-
Adaptabilidade, pois integra-se facilmente com o Servidor de Identidade Corporativa.
Arquitetura do Apache Kerberos
O Kerberos opera no modelo cliente-servidor. Seu funcionamento básico consiste em:
- Um ticket, que é um tipo de certificado, que informa de forma segura a identidade do usuário para quem o acesso foi originalmente concedido.
- Um autenticador, que é uma credencial gerada pelo cliente com informações que serão comparadas com o ticket, garantindo assim que o cliente que está apresentando o ticket é o mesmo para quem o ticket foi concedido.
- Um centro de distribuição de chaves, que fornece tickets válidos temporariamente ao usuário para acessar uma aplicação, que serão ratificados pelo autenticador. A aplicação examina o ticket e o autenticador quanto à validade e concede o acesso caso sejam válidos.
Para autenticar e verificar a autenticidade de consumidores, Kerberos utiliza criptografia de chaves simétricas (a mesma chave para criptografar e descriptografar dados) e o KDC (Key Distribution Center), um banco de dados de todas as chaves secretas, envolvendo 3 aspectos:
- Um servidor TGS (ticket granting server) que conecta o consumidor com o servidor de serviços (SS). Sua principal finalidade é evitar que a senha do usuário seja extraviada.
- Um banco de dados Kerberos que armazena as chaves secretas do cliente e do servidor e a identificação de todos os usuários testados.
- Um Servidor de Autenticação (AS) que realiza a autenticação preliminar.
A ideia que norteia a solução é a existência de um servidor capaz de entregar tickets ao usuário para acessar serviços. Esses tickets permanecem válidos por um determinado período. O serviço não precisa solicitar qualquer validação desses tickets, pois são confiáveis, uma vez que foram gerados por um servidor confiável. Basicamente, a solução envolve dois processos:
-
O cliente solicita um ticket ao servidor Kerberos.
-
O cliente submete o ticket ao serviço desejado e é autenticado.
noteNão existe a possibilidade de falsificar uma identidade ou forjar/reutilizar um ticket.
Autenticação de Serviços
Os serviços se autenticam com o Kerberos quando são iniciados, através do Kerberos Principal (uma identidade única que pode receber tickets para autenticação) e da keytab (que contém as credenciais de autenticação de recursos do cluster).
O Kerberos Principal autentica o serviço através da chave na keytab.
Após a autenticação, o KDC emite o ticket, que será inserido no conjunto de credenciais privadas. O serviço pode então atender ao cliente.
O processo de autenticação do usuário ocorre, resumidamente, da seguinte forma:
- O usuário se autentica usando seu Kerberos Principal.
note
Inicialmente, o usuário deve fazer login na máquina cliente que está habilitada a se comunicar com o Cluster Hadoop.
- O usuário executa o comando
kinit
com o Kerberos Principal e a senha. Kinit
autentica o usuário no KDC, obtendo o ticket resultante e colocando-o no cache de tickets no sistema de arquivos.

Melhores Práticas para o Apache Kerberos
-
As configurações de criptografia no Kerberos geralmente são definidas para uma variedade de tipos, incluindo escolhas "fracas" como DES, por padrão. É recomendável remover os tipos fracos para garantir a melhor segurança possível.
-
Ao usar AES-256, as extensões criptográficas Java precisam ser instaladas em todos os nós do cluster para permitir tipos de criptografia de "força ilimitada". É importante notar que alguns países proíbem o uso desses tipos de criptografia.
-
Em ambientes onde os usuários do Active Directory (AD) precisam acessar Serviços Hadoop, é recomendável estabelecer confiança unidirecional entre Hadoop Kerberos e o Domínio AD.
-
Como o Kerberos é um protocolo sensível ao tempo, todos os hosts no domínio devem ser sincronizados pelo tempo, por exemplo, usando o Network Time Protocol (NTP). Se a hora do sistema local de um cliente diferir daquela do KDC em apenas 5 minutos (o padrão), o cliente não poderá se autenticar.
Detalhes do Projeto Apache Kerberos
O Kerberos foi desenvolvido em C.
Fontes: