HBase
 sql >> Base de Dados >  >> NoSQL >> HBase

Como:Habilitar autenticação e autorização de usuário no Apache HBase


Com a configuração padrão do Apache HBase, todos podem ler e gravar em todas as tabelas disponíveis no sistema. Para muitas configurações corporativas, esse tipo de política é inaceitável.

Os administradores podem configurar firewalls que decidem quais máquinas têm permissão para se comunicar com o HBase. No entanto, as máquinas que podem passar pelo firewall ainda têm permissão para ler e gravar em todas as tabelas. Esse tipo de mecanismo é eficaz, mas insuficiente porque o HBase ainda não consegue diferenciar entre vários usuários que usam as mesmas máquinas cliente e ainda não há granularidade em relação ao acesso à tabela HBase, família de colunas ou qualificador de coluna.

Nesta postagem, discutiremos como o Kerberos é usado com o Hadoop e o HBase para fornecer Autenticação do usuário , e como o HBase implementa a Autorização do usuário para conceder permissões aos usuários para ações específicas em um conjunto de dados especificado.

Secure HBase:autenticação e autorização


Um HBase seguro visa proteger contra sniffers, usuários não autenticados/não autorizados e ataques baseados em rede. Ele não protege contra usuários autorizados que excluem acidentalmente todos os dados.

O HBase pode ser configurado para fornecer autenticação do usuário , que garante que apenas usuários autorizados possam se comunicar com o HBase. O sistema de autorização é implementado no nível de RPC e é baseado na Simple Authentication and Security Layer (SASL), que suporta (entre outros mecanismos de autenticação) Kerberos. SASL permite autenticação, negociação de criptografia e/ou verificação de integridade de mensagem por conexão (propriedade de configuração “hbase.rpc.protection”).

A próxima etapa depois de ativar a Autenticação do usuário é dar a um administrador a capacidade de definir uma série de regras de autorização do usuário que permitem ou negam ações específicas. O sistema de autorização, também conhecido como Access Controller Coprocessor ou Access Control List (ACL), está disponível a partir do HBase 0.92 (CDH4) e permite definir a política de autorização (Read/Write/Create/Admin), com tabela/família /qualifier granularidade, para um usuário especificado.

Kerberos


Kerberos é um protocolo de autenticação em rede. Ele foi projetado para fornecer autenticação forte para aplicativos cliente/servidor usando criptografia de chave secreta. O protocolo Kerberos usa criptografia forte (AES, 3DES, …) para que um cliente possa provar sua identidade para um servidor (e vice-versa) em uma conexão de rede insegura. Depois que um cliente e um servidor usam o Kerberos para provar suas identidades, eles também podem criptografar todas as suas comunicações para garantir a privacidade e a integridade dos dados enquanto realizam seus negócios.

Protocolo de troca de passagens

Em um nível alto, para acessar um serviço usando Kerberos, cada cliente deve seguir três etapas:
  • Autenticação Kerberos:o cliente se autentica no Servidor de Autenticação Kerberos e recebe um Ticket Granting Ticket (TGT).
  • Autorização Kerberos:o cliente solicita um ticket de serviço do Ticket Granting Server, que emite um ticket e uma chave de sessão se o TGT do cliente enviado com a solicitação for válido.
  • Solicitação de serviço:o cliente usa o tíquete de serviço para se autenticar no servidor que está fornecendo o serviço que o cliente está usando (por exemplo, HDFS, HBase, …)

HBase, HDFS, ZooKeeper SASL


Como o HBase depende do HDFS e do ZooKeeper, o HBase seguro depende de um HDFS seguro e de um ZooKeeper seguro. Isso significa que os servidores HBase precisam criar uma sessão de serviço segura, conforme descrito acima, para se comunicar com o HDFS e o ZooKeeper.

Todos os arquivos escritos pelo HBase são armazenados em HDFS. Assim como nos sistemas de arquivos Unix, o controle de acesso fornecido pelo HDFS é baseado em usuários, grupos e permissões. Todos os arquivos criados pelo HBase possuem “hbase” como usuário, mas esse controle de acesso é baseado no nome de usuário fornecido pelo sistema, e todos que podem acessar a máquina são potencialmente capazes de “sudo” como o usuário “hbase”. Secure HDFS adiciona as etapas de autenticação que garantem que o usuário “hbase” seja confiável.

O ZooKeeper tem uma Lista de Controle de Acesso (ACL) em cada znode que permite acesso de leitura/gravação aos usuários com base nas informações do usuário de maneira semelhante ao HDFS.

HBase ACL


Agora que nossos usuários são autenticados via Kerberos, temos certeza de que o nome de usuário que recebemos é um de nossos usuários confiáveis. Às vezes, isso não é granularidade suficiente – queremos controlar se um usuário especificado é capaz de ler ou gravar uma tabela. Para isso, o HBase fornece um mecanismo de Autorização que permite acesso restrito a usuários específicos.

Para habilitar esse recurso, você deve habilitar o coprocessador do Controlador de Acesso, incluindo-o em hbase-site.xml nas classes de coprocessador do servidor mestre e da região. (Veja como configurar a segurança do HBase aqui.)

Um coprocessador é um código que é executado dentro de cada HBase Region Server e/ou Master. Ele é capaz de interceptar a maioria das operações (colocar, obter, excluir, …) e executar código arbitrário antes e/ou após a execução da operação.

Usando essa capacidade de executar algum código antes de cada operação, o coprocessador do Controlador de Acesso pode verificar os direitos do usuário e decidir se o usuário pode ou não executar a operação.

O shell do HBase tem alguns comandos que permitem que um administrador gerencie os direitos do usuário:
  • conceder [tabela] [família] [qualificador]
  • revogar [tabela] [família] [qualificador]

Como você vê, um administrador tem a capacidade de restringir o acesso do usuário com base no esquema da tabela:
  • Conceder ao Usuário-W apenas direitos de leitura para Tabela-X/Família-Y (conceder 'Usuário-W', 'R', 'Tabela-X', 'Família-Y' )
  • Dê ao usuário-W todos os direitos de leitura/gravação para o Qualificador-Z (concede 'Usuário-W', 'RW', 'Tabela-X', 'Família-Y', 'Qualificador-Z' )

Um administrador também pode conceder direitos globais, que operam no nível do cluster, como criar tabelas, balancear regiões, desligar o cluster e assim por diante:
  • Dê ao usuário-W a capacidade de criar tabelas (conceder 'User-W', 'C' )
  • Dê ao usuário-W a capacidade de gerenciar o cluster (conceder 'User-W', 'A' )

Todas as permissões são armazenadas em uma tabela criada pelo coprocessador do Controlador de Acesso, chamada _acl_. A chave primária desta tabela é o nome da tabela que você especifica no comando grant. A tabela _acl_ tem apenas um grupo de colunas e cada qualificador descreve a granularidade dos direitos para uma determinada tabela/usuário. O valor contém os direitos reais concedidos.

Como você pode ver, os comandos do shell do HBase estão intimamente relacionados à forma como os dados são armazenados. O comando grant adiciona ou atualiza uma linha e o comando revoke remove uma linha da tabela _acl_.

Controlador de acesso nos bastidores

Conforme mencionado anteriormente, o coprocessador do Controlador de acesso usa a capacidade de interceptar cada solicitação do usuário e verificar se o usuário tem direitos para executar as operações.

Para cada operação, o Controlador de Acesso precisa consultar a tabela _acl_ para ver se o usuário tem direitos para executar a operação.

No entanto, esta operação pode ter um impacto negativo no desempenho. A solução para corrigir esse problema é usar a tabela _acl_ para persistência e o ZooKeeper para acelerar a pesquisa de direitos. Cada servidor de região carrega a tabela _acl_ na memória e é notificado sobre alterações pelo ZkPermissionWatcher. Dessa forma, cada servidor de região tem o valor atualizado todas as vezes e cada verificação de permissão é realizada usando um mapa na memória.

Roteiro


Embora o Kerberos seja um sistema de autenticação estável, bem testado e comprovado, o recurso HBase ACL ainda é muito básico e sua semântica ainda está evoluindo. HBASE-6096 é o JIRA abrangente como referência para todas as melhorias a serem enviadas em uma v2 do recurso ACL.

Outro tópico aberto sobre autorização e controle de acesso é a implementação de um sistema de segurança por KeyValue (HBASE-6222 ) que dará a possibilidade de ter valores diferentes na mesma célula associados a uma tag de segurança. Isso permitiria mostrar uma determinada informação com base nas permissões do usuário.

Conclusão


O HBase Security adiciona dois recursos extras que permitem proteger seus dados contra sniffers ou outros ataques de rede (usando o Kerberos para autenticar usuários e criptografar comunicações entre serviços) e permitir que você defina políticas de autorização de usuários, restrinja operações e limite a visibilidade de dados para usuários específicos.

Matteo Bertozzi é Engenheiro de Software no Spotify e Consultor HBase na Cloudera.