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 リソース は、全イベントをアグリゲートリスナー定義で指定されたリスナーすべてに配信します。

監査モジュールを使用して、レガシーセキュリティードメインのイベントを監視することができます。管理コンソールを使用して、レガシーセキュリティードメインのセキュリティー監査設定を設定できます。

関連情報

1.4.2. ファイル監査ログの有効化

elytron サブシステムを使用して、スタンドアロンサーバーまたは管理ドメイン内のサーバーにあるファイルの監査ログを有効化できます。

ファイル監査ロギングは、監査ログメッセージをファイルシステムにあるファイル 1 つに保存します。デフォルトでは、Elytron はファイル監査ロガーとして local-audit を指定します。local-audit を有効にして、スタンドアロンサーバーでは EAP_HOME/standalone/log/audit.log に、管理ドメインでは EAP_HOME/domain/log/audit.log に、Elytron 監査ログを書き込めるようにする必要があります。

手順

  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 という追加の属性が含まれています。

suffix 属性の値は、java.time.format.Date Time Formatter 形式で指定された日付 (.yyyy-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 は、既存のログファイルの接尾辞に 1 つ足します。たとえば、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 with SSL に対応しています。

最初のインスタンスに syslog を定義すると、ロガーは、以下の例で示すようなメッセージを含む INFORMATIONAL 優先度イベントを syslog サーバーに送信します。

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

&lt;format&gt; は、監査ログハンドラーに設定されている 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 監査ロガーを追加する例

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

関連情報

1.4.6. Elytron でのカスタムセキュリティーイベントリスナーの使用

Elytron を使用して、カスタムイベントリスナーを定義できます。カスタムイベントリスナーは、受信したセキュリティーイベントの処理を管理します。イベントリスナーは、カスタムの監査ログ目的で使用したり、内部の ID ストレージに対するユーザー認証に使したり用できます。

重要

module 管理 CLI コマンドを使用したモジュールの追加および削除は、テクノロジープレビュー機能としてのみ提供されます。module コマンドは、管理ドメイン内での使用や、リモート管理 CLI での接続には適していません。実稼働環境では、手動でモジュールを追加削除する必要があります。

テクノロジープレビュー機能は、Red Hat の実稼働環境でのサービスレベルアグリーメント (SLA) ではサポートされていないため、Red Hat では実稼働環境での使用を推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

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

手順

  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 に追加します。

    以下に、カスタムイベントリスナーをモジュールとして Elytron に追加する管理 CLI コマンドの例を示します。

    module コマンドを使用して、カスタムイベントリスナーを Elytron にモジュールとして追加した例

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

  3. セキュリティードメインのカスタムイベントリスナーを参照します。

    Application Domain でカスタムイベントリスナーを参照する例

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

  4. サービスを再起動します。

    $ reload

    イベントリスナーは、指定されたセキュリティードメインからセキュリティーイベントを受信します。

関連情報