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 类型 |
acl | znode 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=true
在conf/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-->
更改上述配置以自定义审计日志文件、备份数量、最大文件大小、自定义审计记录器等。
审计日志中的用户是谁?
默认情况下只有四个身份验证提供程序:
- IPAuthenticationProvider
- SASLAuthenticationProvider
- X509AuthenticationProvider
- DigestAuthenticationProvider
根据配置的身份验证提供程序决定用户:
- 配置 IPAuthenticationProvider 后,将经过身份验证的 IP 作为用户
- 配置 SASLAuthenticationProvider 后,客户端主体将作为用户
- 配置 X509AuthenticationProvider 后,客户端证书将作为用户
- 配置 DigestAuthenticationProvider 时,经过身份验证的用户是用户
自定义身份验证提供程序可以覆盖 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