Recursos de código aberto aprimorados do ZooKeeper
Log aprimorado
No modo de segurança, um nó efêmero é excluído desde que a sessão que criou o nó expire. A exclusão de nó efêmero é registrada nos logs de auditoria para que o status de nó efêmero possa ser obtido.
Os nomes de usuário devem ser adicionados aos logs de auditoria de todas as operações executadas em clientes do ZooKeeper.
No cliente do ZooKeeper, crie um znode, do qual o principal do Kerberos é zkcli/hadoop.<System domain name>@<System domain name>.
Por exemplo, abra o arquivo <ZOO_LOG_DIR>/zookeeper_audit.log. O conteúdo do arquivo é o seguinte:
2016-12-28 14:17:10,505 | INFO | CommitProcWorkThread-4 | session=0x12000007553b4903?user=10.177.223.78,zkcli/hadoop.hadoop.com@HADOOP.COM?ip=10.177.223.78?operation=create znode?target=ZooKeeperServer?znode=/test1?result=success 2016-12-28 14:17:10,530 | INFO | CommitProcWorkThread-4 | session=0x12000007553b4903?user=10.177.223.78,zkcli/hadoop.hadoop.com@HADOOP.COM?ip=10.177.223.78?operation=create znode?target=ZooKeeperServer?znode=/test2?result=success 2016-12-28 14:17:10,550 | INFO | CommitProcWorkThread-4 | session=0x12000007553b4903?user=10.177.223.78,zkcli/hadoop.hadoop.com@HADOOP.COM?ip=10.177.223.78?operation=create znode?target=ZooKeeperServer?znode=/test3?result=success 2016-12-28 14:17:10,570 | INFO | CommitProcWorkThread-4 | session=0x12000007553b4903?user=10.177.223.78,zkcli/hadoop.hadoop.com@HADOOP.COM?ip=10.177.223.78?operation=create znode?target=ZooKeeperServer?znode=/test4?result=success 2016-12-28 14:17:10,592 | INFO | CommitProcWorkThread-4 | session=0x12000007553b4903?user=10.177.223.78,zkcli/hadoop.hadoop.com@HADOOP.COM?ip=10.177.223.78?operation=create znode?target=ZooKeeperServer?znode=/test5?result=success 2016-12-28 14:17:10,613 | INFO | CommitProcWorkThread-4 | session=0x12000007553b4903?user=10.177.223.78,zkcli/hadoop.hadoop.com@HADOOP.COM?ip=10.177.223.78?operation=create znode?target=ZooKeeperServer?znode=/test6?result=success 2016-12-28 14:17:10,633 | INFO | CommitProcWorkThread-4 | session=0x12000007553b4903?user=10.177.223.78,zkcli/hadoop.hadoop.com@HADOOP.COM?ip=10.177.223.78?operation=create znode?target=ZooKeeperServer?znode=/test7?result=success
O conteúdo mostra que os logs do usuário cliente do ZooKeeper zkcli/hadoop.hadoop.com@HADOOP.COM são adicionados ao log de auditoria.
Detalhes do usuário no ZooKeeper
No ZooKeeper diferentes esquemas de autenticação usam credenciais diferentes como usuários. Com base no requisito do provedor de autenticação, qualquer parâmetro pode ser considerado como usuário.
Exemplo:
- SAMLAuthenticationProvider usa o cliente principal como um usuário.
- X509AuthenticationProvider usa o certificado de cliente do usuário como um usuário.
- IAuthenticationProvider usa o endereço IP do cliente como um usuário.
- Um nome de usuário pode ser obtido do provedor de autenticação personalizado implementando o método org.apache.zookeeper.server.auth.ExtAuthenticationProvider.getUserName(String). Se o método não for implementado, a obtenção do nome de usuário da instância do provedor de autenticação será ignorada.
Recurso de código aberto aprimorado: comunicação SSL do ZooKeeper (Conexão Netty)
O design do ZooKeeper contém o pacote Nio e não suporta SSL posterior à versão 3.5. Para resolver este problema, o Netty é adicionado ao ZooKeeper. Portanto, se você precisar usar SSL, ative Netty e defina os seguintes parâmetros no servidor e no cliente:
O servidor de código aberto suporta apenas senhas de texto simples, o que pode causar problemas de segurança. Portanto, essas senhas de texto não são mais usadas no servidor.
- Cliente
- Defina -Dzookeeper.client.secure no arquivo zkCli.sh/zkEnv.sh como true para usar a comunicação segura no cliente. Em seguida, o cliente pode se conectar ao SecureClientPort no servidor.
- Defina os seguintes parâmetros no arquivo zkCli.sh/zkEnv.sh para configurar o ambiente cliente:
Parâmetro
Descrição
-Dzookeeper.clientCnxnSocket
Usado para comunicação Netty entre clientes.
Valor padrão: org.apache.zookeeper.ClientCnxnSocketNetty
-Dzookeeper.ssl.keyStore.location
Indica o caminho para armazenar o arquivo keystore.
-Dzookeeper.ssl.keyStore.password
Criptografa uma senha.
-Dzookeeper.ssl.trustStore.location
Indica o caminho para armazenar o arquivo truststore.
-Dzookeeper.ssl.trustStore.password
Criptografa uma senha.
-Dzookeeper.config.crypt.class
Descriptografa uma senha criptografada.
-Dzookeeper.ssl.password.encrypted
Valor padrão: false
Se as senhas de armazenamento de chaves e de armazenamento de confiança estiverem criptografadas, defina esse parâmetro como true.
-Dzookeeper.ssl.enabled.protocols
Define os protocolos SSL a serem ativados para o contexto SSL.
-Dzookeeper.ssl.exclude.cipher.ext
Define a lista de senhas separadas por uma vírgula que devem ser excluídas do contexto SSL.
Os parâmetros anteriores devem ser definidos no arquivo zkCli.sh/zk.Env.sh.
- Servidor
- Defina secureClientPort como 3381 no arquivo zoo.cfg.
- Defina zookeeper.serverCnxnFactory como org.apache.zookeeper.server.NettyServerCnxnFactory no arquivo zoo.cfg no servidor.
- Defina os seguintes parâmetros no arquivo zoo.cfg (no caminho zookeeper/conf/zoo.cfg) para configurar o ambiente de servidor:
Parâmetro
Descrição
ssl.keyStore.location
Caminho para armazenar o arquivo keystore.jks
ssl.keyStore.password
Criptografa uma senha.
ssl.trustStore.location
Indica o caminho para armazenar o arquivo truststore.
ssl.trustStore.password
Criptografa uma senha.
config.crypt.class
Descriptografa uma senha criptografada.
ssl.keyStore.password.encrypted
Valor padrão: false
Se esse parâmetro for definido como true, a senha criptografada poderá ser usada.
ssl.trustStore.password.encrypted
Valor padrão: false
Se esse parâmetro for definido como true, a senha criptografada poderá ser usada.
ssl.enabled.protocols
Define os protocolos SSL a serem ativados para o contexto SSL.
ssl.exclude.cipher.ext
Define a lista de senhas separadas por uma vírgula que devem ser excluídas do contexto SSL.
- Inicie o ZKserver e conecte o cliente de segurança à porta de segurança.
- Credencial
A credencial usada entre o cliente e o servidor no ZooKeeper é X509AuthenticationProvider. Essa credencial é inicializada usando os certificados de servidor especificados e confiáveis pelos seguintes parâmetros:
- zookeeper.ssl.keyStore.location
- zookeeper.ssl.keyStore.password
- zookeeper.ssl.trustStore.location
- zookeeper.ssl.trustStore.password
Se você não quiser usar o mecanismo padrão do ZooKeeper ele pode ser configurado com diferentes mecanismos de confiança conforme necessário.