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 模块来监控旧安全域的事件。您可以使用管理控制台为旧安全域配置安全审核设置。

其他资源

1.4.2. 启用文件审计日志记录

您可以使用 elytron 子系统为单机服务器或受管域中的服务器启用文件审计日志记录。

文件审计日志记录在您的文件系统中的单个文件中存储审计日志信息。默认情况下,Elytron 将 local-audit 指定为文件审计日志记录器。您必须启用 local-audit,以便它可以将 Elytron 审计日志写入单机服务器上的 EAP_HOME/standalone/log/audit.log,或者用于受管域的 EAP_HOME/domain/log/audit.log

流程

  1. 创建文件审计日志。

    使用 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>)

  2. 将文件审计日志添加到安全域。

    在安全域中添加文件审计日志的命令示例

    /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 子系统将后缀附加到日志文件名称的末尾。

流程

  1. 创建定期轮转文件审计日志。

    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>")

  2. 将定期轮转文件审计日志记录器添加到安全域。

    在安全域中添加定期轮转文件审计日志记录示例

    /subsystem=elytron/security-domain=<security_domain_name>:write-attribute(name=security-event-listener, value=<periodic_audit_log_name>)

其他资源

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,即超过限制的文件。

流程

  1. 创建大小轮转文件审计日志。

    使用 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>)

  2. 将大小轮转审计日志记录器添加到安全域。

    使用 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 处理程序,并同时激活它们。

支持的日志格式包括 RFC5424RFC3164。支持的传输协议包括 UDP、TCP 和 TCP(使用 SSL)。

当您为第一个实例定义 syslog 时,日志记录器会向 syslog 服务器发送一个 INFORMATIONAL 事件到 syslog 服务器,如下例所示:

"Elytron audit logging enabled with RFC format: <format>"

<format> 指的是为审计日志日志记录处理器配置的 RFC 格式,它默认为 RFC5424

流程

  1. 添加 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>)

  2. syslog 审计日志记录器添加到安全域。

    syslog audit logger 添加到安全域的示例

    /subsystem=elytron/security-domain=<security_domain_name>:write-attribute(name=security-event-listener, value=<syslog_audit_log_name>)

其他资源

1.4.6. 在 Elytron 中使用自定义安全事件监听程序

您可以使用 Elytron 定义自定义事件监听程序。自定义事件监听器管理传入的安全事件。您可以将事件监听程序用于自定义审计日志记录,也可以使用事件监听程序来针对内部身份存储验证用户。

重要

使用 module 管理 CLI 命令来添加和删除模块,仅作为技术预览提供。module 命令不适用于在受管域中使用,或者在与远程管理 CLI 进行连接时使用。您必须在生产环境中手动添加或删除模块。

红帽产品服务等级协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

如需有关 技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。

流程

  1. 创建一个实施 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 类会在用户成功或失败时打印消息。

  2. 添加 JAR,它将自定义事件监听程序作为 JBoss EAP 模块提供,

    以下是管理 CLI 命令的示例,它将自定义事件监听程序添加为 Elytron 的模块。

    使用 module 命令将自定义事件监听程序作为模块添加到 Elytron 的示例:

    /subsystem=elytron/custom-security-event-listener=<listener_name>:add(module=<module_name>, class-name=<class_name>)

  3. 在安全域中引用自定义事件监听程序。

    ApplicationDomain 中引用自定义事件监听程序的示例:

    /subsystem=elytron/security-domain=<domain_name>:write-attribute(name=security-event-listener, value=<listener_name>)

  4. 重启服务器。

    $ reload

    事件监听程序从指定的安全域接收安全事件。

其他资源