Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda> MapReduce Service> Descripción general del servicio> Componentes> ZooKeeper> Funciones mejoradas de código abierto de ZooKeeper
Actualización más reciente 2023-04-14 GMT+08:00

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
    1. 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.
    2. 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
    1. Establezca secureClientPort en 3381 en el archivo zoo.cfg.
    2. Establezca zookeeper.serverCnxnFactory en org.apache.zookeeper.server.NettyServerCnxnFactory en el archivo zoo.cfg del servidor.
    3. 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.

    4. 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.