Apache Kerberos
Autenticação e Propagação de identidade
Autenticação pode ser classificada em duas categorias:
-
Autenticação de serviços, que verifica a identidade entre diferentes componentes de serviço como HDFS, YARN, MapReduce, etc.
-
Autenticação de Usuário: Um processo que habilita um dispositivo a verificar a identidade de um usuário/cliente que se conecta a um recurso de rede.
Sem a autenticação do usuário, o serviço simplesmente confia na informação de identidade provida pelo cliente.
Na maioria dos cenários, uma password é usada para prova de identidade. Entretanto, é necessário prevenir a interceptação ou "escuta" desta password.
Além disso, é necessário fornecer um meio de autenticação de usuários, para que, sempre que ele solicite um serviço, tenha que provar sua identidade.
Características do Apache Kerberos
Kerberos é o resultado de um esforço do MIT - Massachusetts Institute of Technology, conhecido como "Projeto Athena", iniciado em 1983. Seu nome deriva do cão de três cabeças que guarda os portões de Hades. As três cabeças fazem referência aos três componentes: cliente, servidor e a rede acessada.
Trata-se de um protocolo de autenticação de computadores em rede, de código aberto, que provê Login Único (SSO) baseado em um serviço de autenticação mútua confiável third party(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 somente estarão disponíveis se Kerberos também estiver. Utiliza uma arquitetura distribuída de servidores, com sistemas habilitados a fazer backup de outros.
-
É um sistema de autenticação mútua que garante não apenas que o usuario é quem esteja pretendendo ser, mas também que os serviços que o usuário está acessando são aqueles esperados. Usuários e o servidor sempre estarão seguros de que a contraparte com a qual estão interagindo é autêntica.
-
-
Escalabilidade: Passwords ou chaves secretas são conhecidas apenas pelo KDC(Key Distribution Center) e Kerberos Principal, tornando o sistema escalável para autenticar um grande número de entidades, que só precisam saber suas próprias chaves secretas e configurá-las no KDC.
-
Segurança: A password do usuário nunca é transmitida pela rede. Usa Tickets, que são negociados com o servidor, com um tempo limite de vida.
-
Transparência: O usuário não toma conhecimento do processo de autenticação em si, a não ser sobre a requisição de uma senha.
-
Simplicidade:
-
Utiliza o sistema SSO(Single sign on), no qual um único ticket pode ser usado por todos os serviços até que a validade expire.
-
Simplifica o gerenciamento do usuário: Criar, excluir, atualizar usuários no Kerberos é muito simples.
-
-
Velocidade, pois usa Operações de Chave Simétricas, que são sempre mais rápidas em operações de autenticação SSL, a qual é baseada em chaves público-privadas.
-
Adaptabilidade, pois integra-se facilmente com o Enterprise Identity Server.
Arquitetura do Apache Kerberos
Kerberos trabalha no modelo cliente-servidor. Seu funcionamento básico consiste em:
-
Um ticket, que é um tipo de certificado, que informa, com segurança, 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 o qual 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 faz uso da criptografia de chaves simétricas( a mesma chave para criptografar e descriptografar dados) e do KDC(Key Distribution center), um database de todas as chaves secretas, que envolve 3 aspectos:
-
Um servidor TGS( ticket granting) que conecta o consumidor com o servidor de serviços(SS). Sua principal finalidade é evitar que a senha do usuário seja extraviada.
-
Um database 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 executa a autenticação preliminar.
A idéia que norteia a solução é a existência de um servidor apto a entregar tickets ao usuário para acessar serviços. Estes tickets permanecem válidos por um determinado tempo. O serviço não tem que solicitar qualquer validação destes 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 solicitar um ticket ao servidor Kerberos.
-
O Cliente submeter o titket ao serviço desejado e ser autenticado.
Não existe a possibilidade de falsificar uma identidade ou forjar/reusar um titket. |
Autenticação de Serviços:
Os serviços se autenticam com o Kerberos quando são inicializados, por meio do Kerberos Principal(uma identidade exclusiva 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" confere o serviço por meio 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 poderá então atender o cliente.
O processo de Autenticação do usuário ocorre, resumidamente, da seguinte forma:
-
O Usuário se autentica usando seu Kerberos Principal.
Inicialmente, o usuário deve logar-se na máquina cliente que está habilitada a conversar com o_Cluster_ HADOOP. -
O usuário executa o comando kinit com o Kerberos Principal e a password.
-
Kinit fará o serviço de autenticação do usuário no KDC, obtendo o ticket resultante e colocando-o no ticket cache, no filesystem.
Boas 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. É recomendado remover os tipos fracos para garantir a melhor segurança possível.
-
Quando usar AES-256, as extensões Java Cryptographic precisam ser instaladas em todos os nós do Cluster para permitir tipos de criptografia de "força ilimitada". É importante observar que alguns países proibem o uso destes 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 Dominio AD.
-
Como 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 daquele do KDC em apenas 5 minutos (o padrão), o cliente não poderá autenticar-se.