1.4. 使用 Elytron 进行安全审核
您可以使用 Elytron 在触发事件时完成安全审核。安全审核指的是触发事件,如写入日志,以响应授权或身份验证尝试。
在事件上执行的安全审计类型取决于您的安全域配置。
1.4.1. Elytron 审计日志记录
在使用 elytron
子系统启用审计日志记录后,您可以在应用服务器中记录 Elytron 身份验证和授权事件。Elytron 在 JSON
中存储审计日志条目,用于存储单个事件或 SIMPLE
用于人类可读的文本格式。
Elytron 审计日志记录与其他类型的审计日志记录不同,如 JBoss EAP 管理接口的审计日志记录。
Elytron 默认禁用审计日志记录。您可以通过为 Elytron 配置以下任何日志处理程序来启用审计日志记录。您可以将日志处理程序添加到安全域。
- 文件审计日志记录
- 定期轮转文件审计日志记录
- 大小轮转文件审计日志记录
-
syslog
审计日志记录 - 自定义审计日志记录
您可以使用 aggregate-security-event-listener 资源
,将安全事件发送到更多目的地,如日志记录器。aggregate-security-event-listener 资源
将所有事件发送到聚合监听器定义中指定的所有监听程序。
您可以使用 audit 模块来监控旧安全域的事件。您可以使用管理控制台为旧安全域配置安全审核设置。
其他资源
- 有关使用旧安全系统配置审计的详情,请参考为 旧安全域 配置安全审核。
- 有关管理界面审计日志记录选项的更多信息,请参阅配置指南中的管理审计日志记录。
- 有关文件审计日志记录的更多信息,请参阅启用文件审计日志记录。
- 有关定期轮转文件审计日志记录的更多信息,请参阅定期轮转文件审计日志记录。
- 有关大小轮转文件审计日志记录的更多信息,请参阅 大小轮转文件审计日志记录。
-
有关
syslog
审计日志记录的更多信息,请参阅syslog
审计日志记录。 - 有关自定义审计日志记录的更多信息,请参阅在 Elytron 中使用自定义安全事件监听程序。
1.4.2. 启用文件审计日志记录
您可以使用 elytron
子系统为单机服务器或受管域中的服务器启用文件审计日志记录。
文件审计日志记录在您的文件系统中的单个文件中存储审计日志信息。默认情况下,Elytron 将 local-audit
指定为文件审计日志记录器。您必须启用 local-audit
,以便它可以将 Elytron 审计日志写入单机服务器上的 EAP_HOME/standalone/log/audit.log
,或者用于受管域的 EAP_HOME/domain/log/audit.log
。
流程
创建文件审计日志。
使用
elytron
子系统创建文件审计日志的示例:/subsystem=elytron/file-audit-log=<audit_log_name>:add(path="<path_to_log_file>", relative-to="<base_for_path_to_log_file>", format=<format_type>, synchronized=<whether_to_log_immediately>)
将文件审计日志添加到安全域。
在安全域中添加文件审计日志的命令示例
/subsystem=elytron/security-domain=<security_domain_name>:write-attribute(name=security-event-listener , value=<audit_log_name>)
其他资源
- 有关文件审计日志记录器属性的更多信息,请参阅 文件审计日志记录器属性。
1.4.3. 启用定期轮转文件审计日志记录
您可以使用 elytron
子系统为单机服务器或域域中的服务器启用定期轮转文件审计日志记录。
根据您配置的调度,定期轮转文件审计日志记录自动轮转审计日志。定期轮转文件审计日志记录与默认的文件审计日志记录类似,但定期轮转文件审计日志记录包含一个额外的属性: 后缀
。
suffix
属性的值是一个使用 java.time.format.DateTimeFormatter
格式指定的日期,如 .yyyyy-MM-dd
。Elytron 会自动从后缀提供的值计算轮转的时间。elytron
子系统将后缀附加到日志文件名称的末尾。
流程
创建定期轮转文件审计日志。
在
elytron
子系统中创建定期轮转文件审计日志的示例/subsystem=elytron/periodic-rotating-file-audit-log=<periodic_audit_log_name>:add(path="<periodic_audit_log_filename>", relative-to="<path_to_audit_log_directory>", format=<record_format>, synchronized=<whether_to_log_immediately>,suffix="<suffix_in_DateTimeFormatter_format>")
将定期轮转文件审计日志记录器添加到安全域。
在安全域中添加定期轮转文件审计日志记录示例
/subsystem=elytron/security-domain=<security_domain_name>:write-attribute(name=security-event-listener, value=<periodic_audit_log_name>)
其他资源
- 有关定期轮转文件审计日志记录器属性的信息,请参阅 periodic-rotating-file-audit-log Attributes 表。
1.4.4. 启用大小轮转文件审计日志记录
您可以使用 elytron
子系统为单机服务器或域中服务器启用大小轮转文件审计日志记录。
当日志文件达到配置的文件大小时,大小轮转文件会自动轮转审计日志文件。大小轮转文件审计日志记录与默认的文件审计日志记录类似,但轮转文件审计日志记录包含额外的属性。
当日志文件大小超过 rotate-size
属性定义的限制时,Elytron 会将后缀 .1
附加到当前文件的末尾,而 Elytron 会创建新的日志文件。Elytron 从现有日志文件递增后缀。例如,Elytron 将 audit_log.1
重命名为 audit_log.2
。Elytron 继续增加,直到日志文件数量达到最大日志文件数,由 max-backup-index
定义。当日志文件超过 max-backup-index
值时,Elytron 会移除该文件,例如 audit_log.99
,即超过限制的文件。
流程
创建大小轮转文件审计日志。
使用
elytron
子系统创建大小轮转文件审计日志的示例:/subsystem=elytron/size-rotating-file-audit-log=<audit_log_name>:add(path="<path_to_log_file>",relative-to="<base_for_path_to_log_file>",format=<record_format>,synchronized=<whether_to_log_immediately>,rotate-size="<max_file_size_before_rotation>",max-backup-index=<max_number_of_backup_files>)
将大小轮转审计日志记录器添加到安全域。
使用
elytron
子系统启用大小轮转文件审计日志的示例:/subsystem=elytron/security-domain=<domain_size_logger>:write-attribute(name=security-event-listener, value=<audit_log_name>)
其他资源
- 有关大小轮转文件审计日志属性的信息,请参阅 大小轮转文件审计日志属性 表。
1.4.5. 启用 syslog
审计日志记录
您可以使用 elytron
子系统为单机服务器或域中的服务器启用 syslog
审计日志记录。使用 syslog
审计日志记录时,您要将日志记录结果发送到 syslog
服务器,它提供了比登录到本地文件更多的安全选项。
syslog
处理程序指定用于连接 syslog
服务器的参数,如 syslog
服务器的主机名以及 syslog
服务器侦听的端口。您可以定义多个 syslog
处理程序,并同时激活它们。
支持的日志格式包括 RFC5424
和 RFC3164
。支持的传输协议包括 UDP、TCP 和 TCP(使用 SSL)。
当您为第一个实例定义 syslog
时,日志记录器会向 syslog 服务器发送一个 INFORMATIONAL
事件到 syslog
服务器,如下例所示:
"Elytron audit logging enabled with RFC format: <format>"
<format>
指的是为审计日志日志记录处理器配置的 RFC 格式,它默认为 RFC5424
值
流程
添加
syslog
处理程序。使用
elytron
子系统添加syslog
处理程序示例:/subsystem=elytron/syslog-audit-log=<syslog_audit_log_name>:add(host-name=<record_host_name>, port=<syslog_server_port_number>, server-address=<syslog_server_address>, format=<record_format>, transport=<transport_layer_protocol>)
您还可以通过 TLS 将日志发送到
syslog
服务器:通过 TLS 发送日志的
syslog
配置示例/subsystem=elytron/syslog-audit-log=<syslog_audit_log_name>:add(transport=SSL_TCP,server-address=<syslog_server_address>,port=<syslog_server_port_number>,host-name=<record_host_name>,ssl-context=<client_ssl_context>)
将
syslog
审计日志记录器添加到安全域。将
syslog
audit logger 添加到安全域的示例/subsystem=elytron/security-domain=<security_domain_name>:write-attribute(name=security-event-listener, value=<syslog_audit_log_name>)
其他资源
-
有关
syslog-audit-log
属性的详情,请查看syslog-audit-log
Attributes 表。 -
有关通过设置
ssl-context
配置启用对 TLS 的支持的更多信息,请参阅使用client-ssl-context
。 -
有关
RFC5424
的更多信息,请参阅 Syslog 协议。 -
有关
RFC3164
的更多信息,请参阅 BSD syslog 协议。
1.4.6. 在 Elytron 中使用自定义安全事件监听程序
您可以使用 Elytron 定义自定义事件监听程序。自定义事件监听器管理传入的安全事件。您可以将事件监听程序用于自定义审计日志记录,也可以使用事件监听程序来针对内部身份存储验证用户。
使用 module
管理 CLI 命令来添加和删除模块,仅作为技术预览提供。module
命令不适用于在受管域中使用,或者在与远程管理 CLI 进行连接时使用。您必须在生产环境中手动添加或删除模块。
红帽产品服务等级协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
如需有关 技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。
流程
创建一个实施
java.util.function.Consumer<org.wildfly.security.auth.server.event.SecurityEvent>
接口的类。例如,每当用户成功或身份验证失败时,以下内容会显示一条消息。创建使用指定接口的 Java 类示例:
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()); } } }
示例中的 Java 类会在用户成功或失败时打印消息。
添加 JAR,它将自定义事件监听程序作为 JBoss EAP 模块提供,
以下是管理 CLI 命令的示例,它将自定义事件监听程序添加为 Elytron 的模块。
使用
module
命令将自定义事件监听程序作为模块添加到 Elytron 的示例:/subsystem=elytron/custom-security-event-listener=<listener_name>:add(module=<module_name>, class-name=<class_name>)
在安全域中引用自定义事件监听程序。
在
ApplicationDomain
中引用自定义事件监听程序的示例:/subsystem=elytron/security-domain=<domain_name>:write-attribute(name=security-event-listener, value=<listener_name>)
重启服务器。
$ reload
事件监听程序从指定的安全域接收安全事件。
其他资源
- 有关在生产环境中手动添加或删除模块的详情,请参考《 配置指南》 中的 手动创建 自定义模块 和手动删除自定义模块。
- 有关添加自定义事件监听程序作为模块的详情,请参考在 Elytron 中添加自定义组件。