OpenAMは、システムセキュリティ、トラブルシューティング、規制遵守にとって重要な監査イベントをキャプチャする、包括的な監査ログサービスをサポートしています。
監査ログには、処理とセキュリティデータを追跡するために、認証メカニズム、システムへのアクセス、ユーザーと管理者のアクティビティ、エラーメッセージ、設定変更など、OpenAMの配備内で発生するイベントに関する操作情報を記録されます。
監査ログサービスは、OpenAM、OpenIDM、OpenDJ、OpenIGを含むForgeRockスタック全体で共通の一貫性があり、文書化、構造化されたメッセージフォーマットを使用しています。
注意:
OpenAM 13では、次の2つの監査ログサービスをサポートしています。
- レガシー監査ログサービス: Java SDKベースで、OpenAM 13より前のバージョンで使用可能です。今後のリリースでは廃止される予定です。
- 新しいRESTベースの共通監査ログサービス: OpenAM 13以降で利用可能です。
OpenAMは、自身のインスタンス、ポリシーエージェント、ssoadmツールなどによって、トリガーされる監査イベントから生成されるログメッセージを書き込みます。
次のようにOpenAMの監査ログサービスは、汎用的で豊富な機能セットを提供します:
-
グローバル、レルムベースのログ設定
すべてのレルムが継承することを保証する、グローバル監査ログを設定することができます。 レルム毎に異なる監査ログを設定することを可能です。 -
監査イベントハンドラ
監査ログサービスは、以下のような様々な監査イベントハンドラをサポートしており、複数のシステムにログを書くことができます: -
CSVハンドラ
-
Syslogハンドラ
-
JDBCハンドラ
-
監査イベントバッファリング
デフォルトでOpenAMは、生成された各ログメッセージを別々に書き込みます。 メモリにログメッセージを保持して、事前設定した時間や数の閾値に達した後にバッファをフラッシュする、メッセージバッファリングをサポートします。 -
改ざん防止用ロギング
ログに不正な改ざんが行われていないことを確かにするために、監査ログにデジタル署名することができます。 この機能を設定するには、事前設定されたロガーの証明書をデプロイし、/path/to/openam/openam/Logger.jksでそれを保存する必要があります。 -
ログローテーションと保持ポリシー
デフォルトでOpenAMは、指定された最大サイズに達すると監査ログをローテーションします。 サイズベースのローテーションポリシーを無効にし、時間ベースで設定することができます。 また、ログローテーションを無効にして、外部のログローテーションツールを使用するオプションもあります。 -
センシティブなフィールドのブラックリスト化
監査ログサービスはブラックリスト登録をサポートしています。HTTPヘッダ、クエリーパラメータ、クッキー、全体のフィールド値などのセンシティブな値やフィールドを非表示にするためのフィルタリングができます。 -
DNSルックアップの反転
監査ログサービスは、ネットワークのトラブルシューティングのために、リバースDNSルックアップ機能をサポートしています。 性能面を考慮して、リバースDNSルックアップはデフォルトで無効になっています。
OpenAMは、4つの異なる監査トピックに基づいてログメッセージを統合しています。トピックとは、スキーマ型に1対1でマッピングされて関連付けられている監査ログイベントのカテゴリです。トピックは、アクセスの詳細、システムアクティビティ、認証操作、設定変更として広く分類することができます。次の表は、そのファイル名が固定されている基本的なイベントのトピックと、関連した監査ログファイルを示しています:
表. 監査ログトピックス
イベントトピック | ファイル名 | 説明 |
---|---|---|
Access | access.csv | 誰が、いつ、何をしたのか、すべてのアクセスに対する出力をキャプチャします。 |
Activity | activity.csv | エンドユーザー(非管理者)によって作成、更新、削除されたオブジェクトの状態の変化をキャプチャします。13.0.0では、セッションの変更のみがログに記録されます。今後のリリースでは、ユーザーの信頼できるデバイス、UMAポリシー、OAuth 2.0のトークンなどへの変更を記録することができます。 |
Authentication | authentication.csv | いつ、どのように対象(ユーザー)が認証されたかを、また認証に関連するイベントをキャプチャします。 |
Configuration | config.csv | 誰が、いつ、OpenAMの設定変更をしたかキャプチャします。設定の変更を行った対象を示すuserIdは、config.csvにはキャプチャされませんが、access.csvのtransactionIdを使用して追跡することができることに注意して下さい。 |
この中の一つであるaccess.csvの出力例を以下のようになります。
"_id","timestamp","eventName","transactionId","userId","trackingIds","server.ip","server.port","client.ip","client.port","request.protocol","request.operation","request.detail","http.request.secure","http.request.method","http.request.path","http.request.queryParameters","http.request.headers","http.request.cookies","http.response.headers","response.status","response.statusCode","response.detail","response.elapsedTime","response.elapsedTimeUnits","component","realm"
"90509889-c42b-4435-b78a-6c3455be9dd9-49","2016-06-04T04:09:59.854Z","AM-ACCESS-OUTCOME","90509889-c42b-4435-b78a-6c3455be9dd9-47",,"[""""]","192.168.1.101","8080","192.168.1.101","57561","CREST","READ",,"false","GET","http://openam01.example.co.jp:8080/openam/json/serverinfo/*","{}","{""accept"":[""application/json, text/javascript, */*; q=0.01""],""accept-api-version"":[""protocol=1.0,resource=1.1""],""host"":[""openam01.example.co.jp:8080""],""referer"":[""http://openam01.example.co.jp:8080/openam/XUI/""],""user-agent"":[""Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0""],""x-requested-with"":[""XMLHttpRequest""]}","{""JSESSIONID"":""DB2D5F17AEBD8B16EEFEFFF3782B6F60""}",,"SUCCESSFUL",,,"83","MILLISECONDS","Server Info","/"
"90509889-c42b-4435-b78a-6c3455be9dd9-56","2016-06-04T04:10:00.303Z","AM-ACCESS-OUTCOME","90509889-c42b-4435-b78a-6c3455be9dd9-54",,"[""f0ddeb71f4c176e801""]",,,"192.168.1.101","57561",,,,"false","POST","http://openam01.example.co.jp:8080/openam/json/authenticate","{}","{""accept"":[""application/json, text/javascript, */*; q=0.01""],""accept-api-version"":[""protocol=1.0,resource=2.0""],""host"":[""openam01.example.co.jp:8080""],""referer"":[""http://openam01.example.co.jp:8080/openam/XUI/""],""user-agent"":[""Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0""],""x-nosession"":[""true""],""x-password"":[""anonymous""],""x-requested-with"":[""XMLHttpRequest""],""x-username"":[""anonymous""]}","{""JSESSIONID"":""DB2D5F17AEBD8B16EEFEFFF3782B6F60"",""i18next"":""ja""}",,"SUCCESSFUL",,,"66","MILLISECONDS","Authentication","/"
デフォルトでOpenAMは、*/path/to/openam/openam/log/*に監査ログを格納します。
管理コンソールを使用して、デフォルトのグローバルロケーションを変更することができます。 レルム > (レルム名) > サービス > 監査ログ > CSV ハンドラ名 をクリックし、ログディレクトリのセクションで、デフォルトログロケーションを変更して下さい。
OpenAMは、CSV、Syslog、JDBCの3種類の監査イベントハンドラをサポートしています。 ハンドラはそれぞれ、CSVファイル、Syslogデーモン、リレーショナルデータベースに監査イベントを転送します。 JDBCハンドラを使用する場合、OracleまたはMySQLに対するSQLが提供されていますが、他のリレーショナルデータベースでも問題無く動作すると思われます。
デフォルトの監査イベントハンドラは、グローバル監査ログサービス用に設定されているCSVハンドラです。 グローバル監査ログサービスは、監査ログサービスが追加で設定されていない任意のレルムのデフォルトの監査サービスとなります。 管理コンソールの 設定 > グローバル > 監査ログ で設定が確認できます。 レルムに監査ログサービスを設定することで、そのレルムの監査ログの出力を変えることもできます。
重要:
デフォルトでOpenDJ 3.0は、監査ログが有効になっていません。管理者が手動でOpenDJの監査ログを有効にする必要があります。 詳細については、OpenDJ管理ガイドの「Syslog Audit Event Handler Configuration」を参照してください。
レガシー監査ログを設定するには、OpenAMの管理者として管理コンソールにログインし、設定 > システム > ログを参照します。
利用可能な設定の詳細については、公式ガイドの「Audit Logging reference」を参照してください。
デフォルトで監査ログは、インスタンスの設定ディレクトリ内のファイル($HOME/openam/log/)に書き込まれます。
OpenAMは、サービスごとに二つのログファイルにメッセージをログに送信します。
- .access
- .error
例えば、認証サービスの場合はログファイル名がamAuthentication.accessとamAuthentication.errorのようになります。
詳細については、公式ガイドの「Log Files and Messages」を参照してください。
OpenAMは、Syslogサーバーへ監査ログメッセージを送信する機能もサポートしています。
管理コンソールまたはssoadmコマンドを使用して、Syslogの監査ログを有効にすることができます。
デフォルトでポリシーエージェントは、デバッグのために設定ディレクトリ内のローカルファイルにログを記録します。ログファイルの正確な場所は、エージェントをインストールした場所によって異なります。
ポリシーエージェントを使用すると、URLへのアクセス試行に関する監査情報を記録する際に、デフォルトでリモートのOpenAMにログメッセージを送信します。 集中管理されたポリシーエージェントの監査ログを設定するには、管理者として管理コンソールにログインし、レルム > レルム名 > エージェント > エージェントタイプ > エージェント名 > グローバル の「監査」セクションで設定します。