第 15 章 配置审计以跟踪事件
红帽构建的 Keycloak 包括一组审计功能。您可以记录每个登录和管理员操作,并在管理门户中查看这些操作。Red Hat build of Keycloak 还包括一个 Listener SPI,用于侦听事件并可以触发操作。内置监听程序的示例包括日志文件,并在发生事件时发送电子邮件。
15.1. 审计用户事件
您可以记录并查看影响用户的每个事件。红帽构建的 Keycloak 触发登录事件,如成功用户登录、用户输入错误的密码或用户帐户更新。默认情况下,红帽构建的 Keycloak 不会在管理控制台中存储或显示事件。只有错误事件才会记录到 Admin Console 和服务器的 日志文件。
流程
使用这个流程启动审核用户事件。
- 单击菜单中的 Realm settings。
- 单击 Events 选项卡。
- 点 User events settings 选项卡。
将 保存事件 切换为 ON。
用户事件设置
- 指定在 Expiration 字段中存储事件的时间长度。
点 Add saved types 查看您可以保存的其他事件。
添加类型
- 点击 Add。
当您要删除所有保存的事件时,点 Clear user events。
流程
现在,您可以查看事件。
单击菜单中的 Events 选项卡。
用户事件
要过滤事件,请点 Search user event。
搜索用户事件
15.1.1. 事件类型
登录事件:
事件 | 描述 |
---|---|
登录 | 用户登录。 |
注册 | 用户注册。 |
退出 | 用户注销。 |
令牌代码 | 应用或客户端交换令牌的代码。 |
刷新令牌 | 应用程序或客户端刷新令牌。 |
波形强制保护:
事件 | 描述 |
---|---|
被永久锁定禁用的用户 | 由于登录失败太多,暴力强制保护禁用了用户帐户。 |
临时锁定禁用的用户 | 由于登录失败太多,暴力强制保护禁用了用户帐户。 |
身份代理:
事件 | 描述 |
---|---|
联邦身份链接覆盖 | 现有的 Federated 身份链接被覆盖 |
联邦身份链接覆盖错误 | 当尝试覆盖现有的 Federated 身份链接时出现错误 |
OAuth:
事件 | 描述 |
---|---|
OAuth2 扩展授权 | OAuth2 授权已执行 |
OAuth2 扩展授予错误 | OAuth2 授权执行过程中出现错误 |
帐户事件:
事件 | 描述 |
---|---|
社交链接 | 用户帐户链接到社交媒体提供程序。 |
删除社交链接 | 从社交媒体帐户到用户帐户服务器的链接。 |
更新电子邮件 | 帐户更改的电子邮件地址。 |
更新配置文件 | 帐户更改的配置集。 |
发送密码重置 | Red Hat build of Keycloak 会发送密码重置电子邮件。 |
更新密码(已弃用) | 帐户的密码更改。 |
更新凭证 | 帐户更改的密码或(基于时间)一次性密码(OTP/TOTP)设置。 |
update TOTP (已弃用) | 帐户更改基于时间的一次性密码(TOTP)设置。 |
remove TOTP (已弃用) | 红帽构建的 Keycloak 将 TOTP 从帐户中删除。 |
删除凭证 | 红帽构建的 Keycloak 从帐户中删除凭证。 |
发送验证电子邮件 | Red Hat build of Keycloak 会发送电子邮件验证电子邮件。 |
验证电子邮件 | 红帽构建的 Keycloak 验证帐户的电子邮件地址。 |
每个事件都有对应的错误事件。
15.1.2. 事件监听程序
事件监听器侦听事件并根据该事件执行操作。红帽 Keycloak 的构建包括两个内置监听程序,即 Logging Event Listener 和 Email Event Listener。
15.1.2.1. 日志记录事件监听程序
当启用 Logging Event Listener 时,此监听程序会在发生错误事件时写入日志文件。
来自 Logging Event Listener 的日志消息示例:
11:36:09,965 WARN [org.keycloak.events] (default task-51) type=LOGIN_ERROR, realmId=master, clientId=myapp, userId=19aeb848-96fc-44f6-b0a3-59a17570d374, ipAddress=127.0.0.1, error=invalid_user_credentials, auth_method=openid-connect, auth_type=code, redirect_uri=http://localhost:8180/myapp, code_id=b669da14-cdbb-41d0-b055-0810a0334607, username=admin
11:36:09,965 WARN [org.keycloak.events] (default task-51) type=LOGIN_ERROR, realmId=master,
clientId=myapp,
userId=19aeb848-96fc-44f6-b0a3-59a17570d374, ipAddress=127.0.0.1,
error=invalid_user_credentials, auth_method=openid-connect, auth_type=code,
redirect_uri=http://localhost:8180/myapp,
code_id=b669da14-cdbb-41d0-b055-0810a0334607, username=admin
您可以使用日志记录事件 Listener 来防止黑客 bot 攻击:
-
解析
LOGIN_ERROR
事件的日志文件。 - 提取失败的登录事件的 IP 地址。
- 将 IP 地址发送到入侵防止软件框架工具。
Logging Event Listener 将事件记录到 org.keycloak.events
日志类别。默认情况下,Red Hat build of Keycloak 不会在服务器日志中包括调试日志事件。
在服务器日志中包括调试日志事件:
-
更改
org.keycloak.events
类别的日志级别 - 更改 Logging 事件监听器使用的日志级别。
要更改日志记录事件监听程序使用的日志级别,请添加以下内容:
bin/kc.[sh|bat] start --spi-events-listener-jboss-logging-success-level=info --spi-events-listener-jboss-logging-error-level=error
bin/kc.[sh|bat] start --spi-events-listener-jboss-logging-success-level=info --spi-events-listener-jboss-logging-error-level=error
日志级别的有效值为 debug
、info
、warn
、error
和 fatal
。
15.1.2.2. 电子邮件事件 Listener
当事件发生并支持以下事件时,电子邮件事件 Listener 会向用户的电子邮件地址发送信息:
- 登录错误.
- 更新密码.
- 更新基于时间的一次性密码(TOTP)。
- 删除一次性密码(OTP)。
- 更新凭据.
- 删除凭据.
要发送电子邮件,需要满足以下条件:
- 用户 有一个电子邮件地址。
- 用户的电子邮件地址标记为验证。
先决条件
- 配置了域的电子邮件设置。
流程
启用电子邮件 Listener :
- 单击菜单中的 Realm settings。
- 单击 Events 选项卡。
- 点 Event listeners 字段。
选择
电子邮件
。事件监听程序
您可以使用 --spi-events-listener-email-exclude-events
参数排除事件。例如:
kc.[sh|bat] --spi-events-listener-email-exclude-events=UPDATE_CREDENTIAL,REMOVE_CREDENTIAL
kc.[sh|bat] --spi-events-listener-email-exclude-events=UPDATE_CREDENTIAL,REMOVE_CREDENTIAL