Funciones mejoradas de código abierto de ZooKeeper
Registro mejorado
En el modo de seguridad, se elimina un nodo efímero siempre que expire la sesión que creó el nodo. La eliminación de nodo efímero se registra en los registros de auditoría de modo que se puede obtener un estado de nodo efímero.
Los nombres de usuario deben agregarse a los registros de auditoría para todas las operaciones realizadas en los clientes de ZooKeeper.
En el cliente de ZooKeeper, cree un znode, cuyo principal de Kerberos es zkcli/hadoop.<System domain name>@<System domain name>.
Por ejemplo, abra el archivo <ZOO_LOG_DIR>/zookeeper_audit.log. El contenido del archivo es el siguiente:
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
El contenido muestra que los registros del usuario cliente ZooKeeper zkcli/hadoop.hadoop.com@HADOOP.COM se agregan al registro de auditoría.
Detalles de usuario de ZooKeeper
En ZooKeeper, diferentes esquemas de autenticación utilizan diferentes credenciales como usuarios. En función del requisito del proveedor de autenticación, cualquier parámetro puede considerarse como usuarios.
Ejemplo:
- SAMLAuthenticationProvider utiliza el principal de cliente como usuario.
- X509AuthenticationProvider utiliza el certificado de cliente de usuario como usuario.
- IAuthenticationProvider utiliza la dirección IP del cliente como usuario.
- Se puede obtener un nombre de usuario del proveedor de autenticación personalizado implementando el método org.apache.zookeeper.server.auth.ExtAuthenticationProvider.getUserName(String). Si el método no está implementado, se omitirá la obtención del nombre de usuario de la instancia del proveedor de autenticación.
Función de código abierto mejorada: comunicación de SSL de ZooKeeper (conexión de Netty)
El diseño ZooKeeper contiene el paquete Nio y no es compatible con SSL posterior a la versión 3.5. Para resolver este problema, se agrega Netty a ZooKeeper. Por lo tanto, si necesita usar SSL, habilite Netty y establezca los siguientes parámetros en el servidor y el cliente:
El servidor de código abierto solo admite contraseñas de texto sin formato, lo que puede causar problemas de seguridad. Por lo tanto, dichas contraseñas de texto ya no se utilizan en el servidor.
- Client
- Establezca -Dzookeeper.client.secure en el archivo zkCli.sh/zkEnv.sh en true para utilizar la comunicación segura en el cliente. A continuación, el cliente puede conectarse al secureClientPort en el servidor.
- Establezca los siguientes parámetros en el archivo zkCli.sh/zkEnv.sh para configurar el entorno del cliente:
Parámetro
Descripción
-Dzookeeper.clientCnxnSocket
Utilizado para la comunicación de Netty entre clientes.
Valor predeterminado: org.apache.zookeeper.ClientCnxnSocketNetty
-Dzookeeper.ssl.keyStore.location
Indica la ruta de acceso para almacenar el archivo de keystore.
-Dzookeeper.ssl.keyStore.password
Cifra una contraseña.
-Dzookeeper.ssl.trustStore.location
Indica la ruta de acceso para almacenar el archivo Truststore.
-Dzookeeper.ssl.trustStore.password
Cifra una contraseña.
-Dzookeeper.config.crypt.class
Descifra una contraseña cifrada.
-Dzookeeper.ssl.password.encrypted
Valor predeterminado: false
Si las contraseñas del almacén de claves y del almacén de confianza están cifradas, establezca este parámetro en true.
-Dzookeeper.ssl.enabled.protocols
Define los protocolos de SSL que se habilitarán para el contexto SSL.
-Dzookeeper.ssl.exclude.cipher.ext
Define la lista de contraseñas separadas por una coma que debe excluirse del contexto SSL.
Los parámetros anteriores se deben establecer en el archivo zkCli.sh/zk.Env.sh.
- Server
- Establezca secureClientPort en 3381 en el archivo zoo.cfg.
- Establezca zookeeper.serverCnxnFactory en org.apache.zookeeper.server.NettyServerCnxnFactory en el archivo zoo.cfg del servidor.
- Establezca los siguientes parámetros en el archivo zoo.cfg (en la ruta zookeeper/conf/zoo.cfg) para configurar el entorno del servidor:
Parámetro
Descripción
ssl.keyStore.location
Ruta de acceso para almacenar el archivo keystore.jks
ssl.keyStore.password
Cifra una contraseña.
ssl.trustStore.location
Indica la ruta de acceso para almacenar el archivo Truststore.
ssl.trustStore.password
Cifra una contraseña.
config.crypt.class
Descifra una contraseña cifrada.
ssl.keyStore.password.encrypted
Valor predeterminado: false
Si este parámetro se establece en true, se puede usar la contraseña cifrada.
ssl.trustStore.password.encrypted
Valor predeterminado: false
Si este parámetro se establece en true, se puede usar la contraseña cifrada.
ssl.enabled.protocols
Define los protocolos de SSL que se habilitarán para el contexto SSL.
ssl.exclude.cipher.ext
Define la lista de contraseñas separadas por una coma que debe excluirse del contexto SSL.
- Inicie ZKserver y conecte el cliente de seguridad al puerto de seguridad.
- Credencial
La credencial utilizada entre el cliente y el servidor de ZooKeeper es X509AuthenticationProvider. Esta credencial se inicializa con los certificados de servidor especificados y de confianza mediante los siguientes parámetros:
- zookeeper.ssl.keyStore.location
- zookeeper.ssl.keyStore.password
- zookeeper.ssl.trustStore.location
- zookeeper.ssl.trustStore.password
Si no desea utilizar el mecanismo predeterminado de ZooKeeper, puede configurarse con diferentes mecanismos de confianza según sea necesario.