1.3. セキュリティー監査

セキュリティー監査とは、承認または認証の試行に応答して、ログへの書き込みなどのイベントをトリガーすることを指します。監査は、使用中のセキュリティーシステムによって設定されます。

1.3.1. Elytron 監査ロギング

elytron サブシステムの監査ロギングは、アプリケーションサーバー内の Elytron 認証および承認イベントのロギングを有効にします。監査ログエントリーは、人間が読むことのできる JSON または SIMPLE のいずれかの形式で保存されます。デフォルトでは、Elytron では監査ロギングが無効になっています。

監査ロギングは、Elytron の以下の任意のログハンドラーを設定し、必要なセキュリティードメインに追加することで有効にできます。

重要

Elytron 監査ロギングは、JBoss EAP 管理インターフェースの監査ロギングなど、他の監査ロギングとは異なります。管理インターフェース監査ロギングオプションの詳細は、JBoss EAP『 設定ガイド』 「管理監査ロギング」を参照してください

ファイル監査ロギング

ファイルの監査ロギングでは、監査ログメッセージを複数のファイルに分割せずに、ファイルシステムにある指定のファイルに保存します。

local-audit という名前の Elytron ファイル監査ロガーは、デフォルトで定義されています。有効にすると、Elytron 監査ログがスタンドアロンサーバーの EAP_HOME/standalone/log/audit.log または、管理対象ドメインのホストの EAP_HOME/domain/log/audit.log に書き込まれます。

ファイル監査ロガーの属性は次のとおりです。

  • pathrelative-to: ログファイルの場所を定義します。
  • autoflush: すべての監査イベントの後に出力ストリームがフラッシュされるかどうかを指定します。この属性が定義されていない場合は、synchronized の値を使用します。
  • synchronized: すべての監査イベントの後にファイル記述子を同期すべきかどうかを指定します。デフォルトは true です。
  • format: 人間が読むことのできるテキスト形式 SIMPLE、または JSON で個別のイベントを保存するための JSON を使用します。

    1. 以下のようなコマンドを使用してファイル監査ログを作成できます。

      /subsystem=elytron/file-audit-log=my_audit_log:add(path="my_audit.log",relative-to="jboss.server.log.dir",format=SIMPLE,synchronized=true)
    2. 定義したファイル監査ロガーは、セキュリティドメインに追加して有効化します。

      /subsystem=elytron/security-domain=domain-with-file-logger:write-attribute(name=security-event-listener, value=my_audit_log)
定期的なローテーションファイル監査ロギング

ファイル監査ログを定期的にローテーションすると、設定されたスケジュールに基づいて監査ログファイルが自動的にローテーションされます。これには、デフォルトの ファイル監査ロガー と同じ基本的な属性があり、以下の追加属性が含まれます。

  • suffix: これは java.text.SimpleDateFormat 形式である必要があります。例: .yyyy-MM-dd-HHローテーションの期間はこのサフィックスに基づいて自動的に算出されます。このサフィックスは、ログファイル名の末尾に追加されます。

    1. 以下のようなコマンドを使用して、ファイル監査ログを定期的にローテーションできます。

      /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")
    2. 定義した定期的なローテションファイルは、セキュリティドメインに追加することで有効にできます。

      /subsystem=elytron/security-domain=domain-with-periodic-file-logger:write-attribute(name=security-event-listener, value=my_periodic_audit_log)
サイズローテーションファイル監査ロギング

ログファイルが設定されたファイルサイズに達すると、サイズローテーションファイル監査ログにより自動的に監査ログのローテーションが行われます。これは、以下の追加属性とともに、デフォルトの ファイル監査ロガーと同じ基本的な属性を持ちます。

  • rotate-size: ログファイルの最大サイズです。この値を超えるとファイルがローテーションされます。デフォルトは 2 メガバイトを意味する 2m です。
  • max-backup-index: ローテーションを行う際にバックアップする最大ファイル数。
  • rotate-on-boot: デフォルトでは、サーバーの再起動時に新しいログファイルは作成されません。サーバーの再起動時にログをローテーションするには、true に設定します。
  • suffix: これにより、日付の接尾辞がローテーションログに追加されます。これは、. yyyy-MM-dd-HH のように java.text.SimpleDateFormat 形式である必要があります。

ログファイルのサイズが rotate-size 属性で定義された制限を超えると、接尾辞 .1 が現在のファイルの末尾に追加され、新しいログファイルが作成されます。既存のログファイルがある場合は、接尾辞の付いた番号が 1 つずつ増えます。たとえば、audit_log.1audit_log.2 に変わります。これは、max-backup-index で定義されているログファイルの最大数に達するまで行われます。max-backup-index を超過すると、制限を超えたファイル (audit_log.99) が削除されます。

  1. 以下のようなコマンドを使用して、サイズローテーションファイル監査ログを作成できます。

    /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)
  2. セキュリティードメインに追加して、定義されたサイズローテーション監査ロガーを有効にします。

    /subsystem=elytron/security-domain=domain-with-size-logger:write-attribute(name=security-event-listener, value=my_size_log)
syslog 監査ロギング

syslog ハンドラーは、監査ログエントリーが 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 属性 」を参照してください。

手順

  1. syslog ハンドラーを追加します。

    /subsystem=elytron/syslog-audit-log=syslog-logger:add(host-name=HOST_NAME, port=PORT, server-address=SERVER_ADDRESS, format=JSON, transport=UDP)
  2. 定義した 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 のカスタムのセキュリティーイベントリスナー

カスタムのイベントリスナーを定義して、受信セキュリティーイベントの処理方法を調整できます。このイベントリスナーは、カスタム監査ロギングに使用できます。または内部アイデンティティーストレージに対してユーザーを認証できます。

  1. 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());
            }
        }
    }
  2. Add a Custom Component to Elytron で説明されているように、カスタムイベントリスナーをモジュールとして JBoss EAP に提供する JAR を追加します。以下に、カスタムイベントリスナーをモジュールとして Elytron に追加する管理 CLI コマンドの例を示します。

    /subsystem=elytron/custom-security-event-listener=LISTENER_NAME:add(module=MODULE_NAME, class-name=CLASS_NAME)
    重要

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、テクノロジープレビューとしてのみ提供されます。このコマンドは、管理対象ドメインでの使用や、リモートによる管理 CLI への接続時には適していません。本番環境では、モジュールを手作業で追加および削除する必要があります。詳細は、JBoss EAP『 設定ガイド』の「 カスタムモジュールの手動作成 」および 「カスタムモジュールの手動削除 」を参照してください

    テクノロジープレビューの機能は、Red Hat の本番環境のサービスレベルアグリーメント (SLA) ではサポートされず、機能的に完全ではないことがあるため、Red Hat は本番環境での使用は推奨しません。テクノロジープレビューの機能は、最新の技術をいち早く提供して、開発段階で機能のテストやフィードバックの収集を可能にするために提供されます。

    テクノロジープレビュー機能のサポート範囲については、Red Hat カスタマーポータルの「テクノロジープレビュー機能のサポート範囲 」を参照してください。

  3. ApplicationDomain などのセキュリティードメインから新たに定義されたリスナーを参照します。

    /subsystem=elytron/security-domain=DOMAIN_NAME:write-attribute(name=security-event-listener, value=LISTENER_NAME)
  4. 提供されたセキュリティードメインから、受信セキュリティーイベント開始するようにサーバーをリロードします。

    reload