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 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 pelos Principals do Kerberos (identidades únicas, como usuários ou serviços), tornando o sistema escalável para autenticar um grande número de entidades. Cada entidade precisa conhecer apenas sua própria chave secreta e registrá-la previamente no KDC.
-
Segurança: A senha do usuário nunca é transmitida pela rede. O Kerberos utiliza tickets temporários (como o TGT e o Service Ticket), que são emitidos pelo servidor de autenticação (KDC) e têm tempo de vida limitado.
-
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 provedores de identidade corporativos, como Active Directory, FreeIPA ou sistemas baseados em LDAP.
Arquitetura do 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, o Kerberos utiliza criptografia de chave simétrica (a mesma chave é usada para cifrar e decifrar os dados) e um componente central chamado KDC (Key Distribution Center), que mantém um banco de dados com todas as chaves secretas. Esse processo envolve três partes principais:
- **Authentication Server (AS) – realiza a autenticação inicial do usuário e emite o Ticket Granting Ticket (TGT).
- **Ticket Granting Server (TGS) – emite tickets de acesso para serviços específicos, com base no TGT previamente obtido. Isso evita que a senha do usuário precise ser reutilizada.
- **Kerberos Database – armazena as chaves secretas e identidades de todos os usuários e serviços autorizados no sistema.
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 consultar o KDC para validar o ticket, pois consegue validá-lo localmente utilizando a chave secreta que compartilha com o KDC:
-
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 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 Kerberos
O Kerberos foi desenvolvido em C.
Fontes: