1.3. 安全审核
安全审计指的是触发事件,如写入日志以响应授权或身份验证尝试。根据使用的安全系统,审计的配置会有所不同。
- 有关使用 Elytron 配置审计的说明,请参阅 Elytron Audit Logging。
- 有关使用传统安全系统配置审计的说明,请参阅为传统安全域配置安全审计。
1.3.1. Elytron Audit Logging 复制链接链接已复制到粘贴板!
elytron 子系统的审计日志记录可用于记录应用服务器中的 Elytron 身份验证和授权事件。审计日志条目以 JSON 或 SIMPLE (人类可读格式)存储。默认情况下,Elytron 中禁用审计日志记录。
您可以通过为 Elytron 配置以下日志处理程序并添加到所需安全域中来启用审计日志记录:
Elytron 审计日志记录与其他审计日志记录不同,例如 JBoss EAP 管理接口的审计日志记录。如需有关管理界面审计日志记录选项的更多信息,请参见 JBoss EAP 配置指南中 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuration_guide/#management_audit_logging 的管理审计日志记录小节。
文件审计日志记录
文件审计日志记录将审计日志消息存储在文件系统中的一个指定文件中,而不将它们划分为多个文件。
默认定义名为 local-audit 的 Elytron 文件审计日志记录器。启用后,它将将 Elytron 审计日志写入单机服务器上的 EAP_HOME/standalone/log/audit.log,或者将 EAP_HOME/domain/log/audit.log 写入受管域主机。
文件审计日志记录器的属性有:
-
path和relative-to:定义日志文件的位置。 -
Autoflush:指定是否应当在每个审计事件后清空输出流。如果未定义此属性,它将使用 synchronize的值。 -
sync:指定是否应当在每个审计事件后同步文件描述符。默认值为true。 格式:将SIMPLE用于人类可读的文本格式,或使用JSON将个别事件存储为 JSON。您可以使用类似于以下内容的命令来创建文件审计日志:
/subsystem=elytron/file-audit-log=my_audit_log:add(path="my_audit.log",relative-to="jboss.server.log.dir",format=SIMPLE,synchronized=true)将定义的文件审计日志记录器添加到安全域中,以启用它。
/subsystem=elytron/security-domain=domain-with-file-logger:write-attribute(name=security-event-listener, value=my_audit_log)
定期轮转文件审计日志
定期轮转文件审计日志记录会根据配置的计划自动轮转审计日志文件。它具有与默认文件审计日志记录器相同的基本属性,包括以下附加属性:
suffix:这必须采用java.text.SimpleDateFormat格式,如.yyyyy-MM-dd-HH。轮转期间会基于此后缀自动计算,后缀则附加到日志文件名称的末尾。您可以使用类似如下的命令来创建定期轮转文件审计日志:
/subsystem=elytron/periodic-rotating-file-audit-log=my_periodic_audit_log:add(path="my_periodic_audit.log",relative-to="jboss.server.log.dir",format=SIMPLE,synchronized=false,suffix=".yyyy-MM-dd-HH")通过添加至安全域,启用定义的定期轮转文件审计日志记录器。
/subsystem=elytron/security-domain=domain-with-periodic-file-logger:write-attribute(name=security-event-listener, value=my_periodic_audit_log)
轮转文件审计日志的大小
当日志文件达到配置文件的大小时,大小轮转文件审计日志会自动轮转审计日志文件。它具有与默认文件审计日志记录器相同的基本属性,包括以下附加属性:
-
rotate-size:在轮转之前日志文件可以达到的最大大小。默认值为2m(2 MB)。 -
max-backup-index:轮转时要备份的最大文件数。 -
rotate-on-boot:默认情况下,服务器重启时不会创建新的日志文件。您可以将此项设置为true,以在服务器重启时轮转日志。 -
suffix:这可选择性地为轮转的日志添加一个日期后缀。这必须采用java.text.SimpleDateFormat格式,如.yyyyy-MM-dd-HH。
当日志文件大小超过 rotate-size 属性定义的限值时,后缀 .1 将附加到当前文件的末尾,并且会创建新的日志文件。如果存在任何现有的日志文件,其后缀的数字将递增一个,例如 audit_log.1 重命名为 audit_log.2。这会发生此情况,直到达到 max-backup-index 定义的日志文件的最大数量。超过 max-backup-index 后,将删除超过限制的文件,如 audit_log.99。
您可以使用类似于以下内容的命令来创建大小轮转文件审计日志:
/subsystem=elytron/size-rotating-file-audit-log=my_size_log:add(path="my_size_audit.log",relative-to="jboss.server.log.dir",format=SIMPLE,synchronized=false,rotate-size="2m",max-backup-index=10)通过添加审计日志记录器到安全域,启用定义的大小轮转审计日志记录器。
/subsystem=elytron/security-domain=domain-with-size-logger:write-attribute(name=security-event-listener, value=my_size_log)
syslog Audit Logging
syslog 处理程序指定审计日志条目发送到 syslog 服务器的参数,特别是 syslog 服务器侦听的主机名和端口。将审计日志记录发送到 syslog 服务器比记录到本地文件或本地 syslog 服务器更安全的选项。可以定义多个 syslog 处理程序并同时处于活动状态。
首次定义 syslog 日志记录器时,日志记录器会将 INFORMATIONAL 优先级事件发送到包含该消息的 syslog 服务器:
"Elytron audit logging enabled with RFC format: <format>"
<format> 是审计日志记录处理程序配置的 RFC 格式,默认为 RFC5424。
支持的日志格式:
支持的传输协议:
- UDP
- TCP
- 使用 SSL 的 TCP
有关 syslog-audit-log 属性列表,请参阅 syslog-audit-log Attributes。
流程
添加 syslog 处理程序。
/subsystem=elytron/syslog-audit-log=syslog-logger:add(host-name=HOST_NAME, port=PORT, server-address=SERVER_ADDRESS, format=JSON, transport=UDP)将定义的 syslog 审计日志记录器添加到安全域中,以启用它。
/subsystem=elytron/security-domain=domain-with-syslog-logger:write-attribute(name=security-event-listener, value=syslog-logger)
要通过 TLS 将日志发送到 syslog 服务器,您可以添加以下配置:
/subsystem=elytron/syslog-audit-log=remote-audit:add(transport=SSL_TCP,server-address=127.0.0.1,port=9898,host-name=Elytron,ssl-context=audit-ssl)
若要将安全事件发送到更多目的地,主要是记录器,需要使用 aggregate-security-event-listener 资源。这会将所有事件发送到聚合侦听器定义中指定的所有侦听器。
1.3.1.1. Elytron 的自定义安全事件列表 复制链接链接已复制到粘贴板!
您可以定义自定义事件监听程序来调整处理传入的安全事件的方式。此事件侦听器可用于自定义审计日志记录,或根据内部身份存储对用户进行身份验证。
创建一个实现
java.util.function.Consumer<org.wildfly.security.auth.server.event.SecurityEvent>接口的类。例如,当用户成功或失败身份验证时,以下 将打印一条消息:public class MySecurityEventListener implements Consumer<SecurityEvent> { public void accept(SecurityEvent securityEvent) { if (securityEvent instanceof SecurityAuthenticationSuccessfulEvent) { System.err.printf("Authenticated user \"%s\"\n", securityEvent.getSecurityIdentity().getPrincipal()); } else if (securityEvent instanceof SecurityAuthenticationFailedEvent) { System.err.printf("Failed authentication as user \"%s\"\n", ((SecurityAuthenticationFailedEvent)securityEvent).getPrincipal()); } } }按照将自定义组件添加到 Elytron 中所述,添加 JAR 将自定义事件监听程序作为模块提供给 JBoss EAP。以下是管理 CLI 命令的示例,它可将自定义事件监听程序作为模块添加到 Elytron:
/subsystem=elytron/custom-security-event-listener=LISTENER_NAME:add(module=MODULE_NAME, class-name=CLASS_NAME)重要使用
模块管理 CLI 命令添加和删除模块,仅作为技术预览提供。此命令不适合在受管域中使用,或在远程连接管理 CLI 时使用。在生产环境中,应当手动添加和删除模块。如需更多信息,请参阅 手动创建自定义模块并手动 删除 JBoss EAP 配置指南中的自定义模块部分 。技术预览功能不包括在红帽生产服务级别协议(SLA)中,且其功能可能并不完善。因此,红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
如需有关技术预览功能支持范围的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。
从安全域(如
ApplicationDomain)引用新定义的监听程序。/subsystem=elytron/security-domain=DOMAIN_NAME:write-attribute(name=security-event-listener, value=LISTENER_NAME)重新加载服务器,以开始从提供的安全域接收安全事件。
reload