Apache > ZooKeeper
 

ZooKeeper 审计日志

ZooKeeper 审核日志

Apache ZooKeeper 支持 3.6.0 版本的审计日志。默认情况下,审核日志被禁用。要启用审计日志,请在 conf/zoo.cfg 中配置 audit.enable=true。审计日志不会记录在所有 ZooKeeper 服务器上,而是仅记录在客户端连接的服务器上,如下图所示。

审核日志

审计日志捕获选择要审计的操作的详细信息。审计信息被写成一组 key=value 对,用于以下键

钥匙 价值
会议客户端会话 ID
用户与客户端会话关联的用户的逗号分隔列表。有关这方面的更多信息,请参阅审核日志中的用户身份
ip客户端 IP 地址
手术任何一项选定的审计操作。可能的值是(serverStart、serverStop、create、delete、setData、setAcl、multiOperation、reconfig、ephemeralZNodeDeleteOnSessionClose)
节点znode的路径
znode类型创建操作时的 znode 类型
aclznode ACL 的字符串表示形式,如 cdrwa(create, delete,read, write, admin)。仅记录 setAcl 操作
结果操作的结果。可能的值是(成功/失败/调用)。结果“invoked”用于 serverStop 操作,因为在确保服务器实际停止之前记录了停止。

以下是所有操作的示例审计日志,其中客户端从 192.168.1.2 连接,客户端主体为 zkcli@HADOOP.COM,服务器主体为 zookeeper/192.168.1.3@HADOOP.COM

user=zookeeper/192.168.1.3 operation=serverStart   result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=create    znode=/a    znode_type=persistent  result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=create    znode=/a    znode_type=persistent  result=failure
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=setData   znode=/a    result=failure
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=setData   znode=/a    result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=setAcl    znode=/a    acl=world:anyone:cdrwa  result=failure
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=setAcl    znode=/a    acl=world:anyone:cdrwa  result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=create    znode=/b    znode_type=persistent  result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=setData   znode=/b    result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=delete    znode=/b    result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=multiOperation    result=failure
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=delete    znode=/a    result=failure
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=delete    znode=/a    result=success
session=0x19344730001   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=create   znode=/ephemral znode_type=ephemral result=success
session=0x19344730001   user=zookeeper/192.168.1.3   operation=ephemeralZNodeDeletionOnSessionCloseOrExpire  znode=/ephemral result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=reconfig  znode=/zookeeper/config result=success
user=zookeeper/192.168.1.3 operation=serverStop    result=invoked

ZooKeeper 审计日志配置

默认情况下,审核日志被禁用。要启用审核日志,请audit.enable=trueconf/zoo.cfg中配置。审计日志是使用 logback 完成的。以下是审计日志的默认 logback 配置conf/logback.xml

<!--
  zk audit logging
-->
<!--property name="zookeeper.auditlog.file" value="zookeeper_audit.log" />
<property name="zookeeper.auditlog.threshold" value="INFO" />
<property name="audit.logger" value="INFO, RFAAUDIT" />

<appender name="RFAAUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <File>${zookeeper.log.dir}/${zookeeper.auditlog.file}</File>
  <encoder>
    <pattern>%d{ISO8601} %p %c{2}: %m%n</pattern>
  </encoder>
  <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>${zookeeper.auditlog.threshold}</level>
  </filter>
  <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
    <maxIndex>10</maxIndex>
    <FileNamePattern>${zookeeper.log.dir}/${zookeeper.auditlog.file}.%i</FileNamePattern>
  </rollingPolicy>
  <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    <MaxFileSize>10MB</MaxFileSize>
  </triggeringPolicy>
</appender>

<logger name="org.apache.zookeeper.audit.Slf4jAuditLogger" additivity="false" level="${audit.logger}">
  <appender-ref ref="RFAAUDIT" />
</logger-->

更改上述配置以自定义审计日志文件、备份数量、最大文件大小、自定义审计记录器等。

审计日志中的用户是谁?

默认情况下只有四个身份验证提供程序:

根据配置的身份验证提供程序决定用户:

自定义身份验证提供程序可以覆盖 org.apache.zookeeper.server.auth.AuthenticationProvider.getUserName(String id) 以提供用户名。如果身份验证提供程序没有覆盖此方法,则存储在 org.apache.zookeeper.data.Id.id 中的任何内容都将被视为用户。通常只有用户名存储在此字段中,但由自定义身份验证提供程序存储在其中的内容。对于 org.apache.zookeeper.data.Id.id 的审计日志记录值将被视为用户。

在 ZooKeeper Server 中,并非所有操作都由客户端完成,但有些操作是由服务器本身完成的。例如,当客户端关闭会话时,服务器会删除临时 znode。这些删除不是由客户端直接完成的,而是由服务器本身完成的,这些被称为系统操作。对于这些系统操作,与 ZooKeeper 服务器关联的用户在审核记录这些操作时被视为用户。例如,如果 ZooKeeper 服务器主体是 zookeeper/hadoop.hadoop.com@HADOOP.COM,那么这将成为系统用户,并且所有系统操作都将使用此用户名记录。

user=zookeeper/hadoop.hadoop.com@HADOOP.COM operation=serverStart result=success

如果没有与 ZooKeeper 服务器关联的用户,则启动 ZooKeeper 服务器的用户被视为用户。例如,如果服务器由 root 启动,则 root 被视为系统用户

user=root operation=serverStart result=success

单个客户端可以将多个身份验证方案附加到一个会话,在这种情况下,所有经过身份验证的方案都将被视为用户,并将显示为逗号分隔的列表。例如,如果客户端通过主体 zkcli@HADOOP.COM 和 ip 127.0.0.1 进行身份验证,则创建 znode 审计日志将如下所示:

session=0x10c0bcb0000 user=zkcli@HADOOP.COM,127.0.0.1 ip=127.0.0.1 operation=create znode=/a result=success