Saltar para o conteúdo principal

Apache Kerberos

Autenticação e Propagação de Identidade

Apache Kerberos icon

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 dum 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 disponibilizar 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.

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

Características do Apache Kerberos

O Kerberos é o resultado dum 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 disponibiliza Login Único (SSO) baseado num serviço de autenticação mútua confiável (usuários e serviços dependem de uma terceira parte: o servidor Kerberos). Foi adotado pelo time 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 cópia de segurança 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 o gerenciamento 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 disponibiliza tickets válidos temporariamente ao usuário para aceder 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), uma Base de Dados de todas as chaves secretas, envolvendo 3 aspectos:

A ideia que norteia a solução é a existência dum servidor capaz de entregar tickets ao usuário para aceder 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 pretendido e é autenticado.

    note

    Nã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 ficheiros.
Arquitetura Kerberos
Arquitetura Kerberos

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 aceder 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 dum 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: