第15章 監査およびイベント

Red Hat Single Sign-On は、豊富な監査機能のセットを提供します。すべてのログインアクションはデータベースへ記録および保存でき、管理コンソールでレビューできます。すべての管理者アクションも記録し、レビューすることもできます。プラグインがこれらのイベントをリッスンし、一部のアクションを実行できる Listener SPI もあります。組み込みリスナーには、簡単なログファイルとイベントが発生したときにメールを送信する機能が含まれています。

15.1. ログインイベント

ログインイベントは、ユーザーが正常にログインしたり、一部の本文が不正なパスワードに入るとき、またはユーザーアカウントの更新時に行われます。ユーザーに発生するすべてのイベントは、記録と表示が可能です。デフォルトでは、イベントは管理コンソールに保存または表示されません。エラーイベントのみがコンソールおよびサーバーのログファイルに記録されます。永続化を開始するには、ストレージを有効にする必要があります。左側のメニュー項目 Events に移動し、Config タブを選択します。

イベント設定

login events config

イベントの保存を開始するには、Login Events SettingsSave Events スイッチをオンに切り替える必要があります。

イベントの保存

login events settings

Saved Types フィールドでは、イベントストアに保存するイベントタイプを指定できます。Clear events ボタンを使用すると、データベースのすべてのイベントを削除できます。Expiration フィールドでは、イベントの保存期間を指定できます。ログインイベントのストレージを有効にし、設定を決定したら、このページの下部にある Save ボタンをクリックしないでください。

イベントを表示するには、Login Events タブに移動します。

ログインイベント

login events

ご覧のとおり、多くの情報が保存され、すべてのイベントを保存する場合は、ログインアクションごとに多数のイベントが保存されるイベントがあります。このページの Filter ボタンを使用すると、実際に対象のイベントをフィルターできます。

ログインイベントフィルター

login events filter

このスクリーンショットでは、Login イベントのみを絞り込みています。Update ボタンをクリックしてフィルターを実行します。

15.1.1. イベントタイプ

ログインイベント:

  • Login: ユーザーがログインしている。
  • Register: ユーザーが登録済みです。
  • Logout: ユーザーがログアウトしました。
  • トークンへのコード: アプリケーション/クライアントではトークンのコードが交換されます。
  • 更新トークン: アプリケーション/クライアントでトークンが更新されました。

アカウントイベント:

  • ソーシャルリンク: アカウントがソーシャルプロバイダーにリンクされている。
  • Remove Social Link: ソーシャルプロバイダーがアカウントから削除されました。
  • Update Email: アカウントのメールアドレスが変更されました。
  • Update Profile: アカウントのプロファイルが変更されました。
  • パスワードリセットの送信: パスワードリセットメールが送信されました。
  • Update Password: アカウントのパスワードが変更されました。
  • Update TOTP: アカウントの TOTP 設定が変更になりました。
  • Remove TOTP: TOTP はアカウントから削除されました。
  • Send Verify Email: メールの検証メールが送信されました。
  • Verify Email: アカウントのメールアドレスが検証されました。

すべてのイベントには、対応するエラーイベントがあります。

15.1.2. イベントリスナー

イベントリスナーはイベントをリッスンし、そのイベントに基づいてアクションを実行します。Red Hat Single Sign-On には、Logging Event Listener と Email Event Listener の 2 つの組み込みリスナーがあります。

Logging Event リスナーは、エラーイベントが発生し、デフォルトで有効にされるたびにログファイルに書き込みます。ログメッセージの例を以下に示します。

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

このロギングは、fail2Ban などのツールを使用して、ユーザーパスワードの推測を試みる場所のハッカーボットがあるかどうかを検出する場合に非常に便利です。LOGIN_ERROR のログファイルを解析し、IP アドレスをプルできます。次に、この情報を Fail2Ban にフィードし、攻撃を防ぐのに役立ちます。

Logging Event リスナーは、イベントを org.keycloak.events ロガーカテゴリーに記録します。デフォルトでは、デバッグログイベントはサーバーログに含まれません。

サーバーログにデバッグログイベントを含めるには、standalone.xml ファイルを編集し、Logging Event リスナーによって使用されるログレベルを変更します。または、org.keycloak.events のログレベルを設定することもできます。

たとえば、ログレベルを変更するには、以下を追加します。

<subsystem xmlns="urn:jboss:domain:logging:...">
    ...
    <logger category="org.keycloak.events">
        <level name="DEBUG"/>
    </logger>
</subsystem>

Logging Event リスナーによって使用されるログレベルを変更するには、以下を追加します。

<subsystem xmlns="urn:jboss:domain:keycloak-server:...">
    ...
    <spi name="eventsListener">
      <provider name="jboss-logging" enabled="true">
        <properties>
          <property name="success-level" value="info"/>
          <property name="error-level" value="error"/>
        </properties>
      </provider>
    </spi>
</subsystem>

ログレベルの有効な値は debuginfowarnerror、および fatal です。

メールイベントリスナーは、イベント発生時にユーザーのアカウントにメールを送信します。

現在、Email Event リスナーは以下のイベントをサポートします。

  • ログインエラー
  • パスワードの更新
  • TOTP の更新
  • TOTP の削除

Email Listener を有効にするには Config タブに移動し、Event Listeners フィールドをクリックします。これにより、メールを選択できるドロップダウンリストが表示されます。

ディストリビューションに同梱される standalone.xmlstandalone-ha.xml、または domain.xml を編集して、1 つ以上のイベントを除外できます。以下は例になります。

<spi name="eventsListener">
  <provider name="email" enabled="true">
    <properties>
      <property name="exclude-events" value="[&quot;UPDATE_TOTP&quot;,&quot;REMOVE_TOTP&quot;]"/>
    </properties>
  </provider>
</spi>

standalone.xmlstandalone-ha.xml、または domain.xml を編集して、データベースに保存されているイベントの詳細の最大長を設定することもできます。この設定は、一部のフィールド (例: redirect_uri) が非常に長い場合に役に立ちます。以下は、最大長を定義する例です。

<spi name="eventsStore">
    <provider name="jpa" enabled="true">
        <properties>
            <property name="max-detail-length" value="1000"/>
        </properties>
    </provider>
</spi>

standalone.xmlstandalone-ha.xml、または domain.xml ファイルが存在する場所の詳細は、『サーバーインストールおよび設定ガイド』を参照してください。