今日やること
今日はOpenAMで取得可能なログについての話です。
このAdvent Calendarの1日目の
OpenAMでできることというところで、以下のように書きました。
Audit Logging(監査ログ)
AuthenticationとかAuthorizationとかFederationのログがしっかり残せる
OpenAMはIAMとして、アプリの認証とか認可を代わりにやってあげるようなことをしているので、自ずとこういったログの集積も可能なわけってことです。
Audit Log(監査ログ)
ここでのAudit Logの定義は、システムのセキュリティやトラブルシューティング、いろんな約束事(笑)の遵守などに役立つに情報のことを指します。例えば、然るべき役職の人が、然るべき認証を経て、然るべき認可を受けて、然るべきシステムにアクセスしているか?といった情報です。
こういったログはどういった場面で必要とされるかは、あまり経験がないのでわからないです。しかし、先述のセキュリティと絡めたケースを考えると、「セキュリティ侵害が発生した時に役立ちそう!」ってのはわかりやすいです。
「システム監査時に有効そう!」ってのは監査というものを受けたことがないので、よくわからないです。きっと、ログの解析までして、業務の有効性とか財務報告の信頼性を確保したりとかするんですかね。内部統制的なお話ですかね~。
OpenAMの監査ログ
OpenAMは以下の4つトピックに基づいて、ログを統合します。
トピック | 実際のファイル名 | 説明 |
---|---|---|
アクセス | access.csv |
アクセスごとに、誰が、何を、いつ、どうしたか?みたいなのを出力 |
アクティビティ | activity.csv |
ユーザーが作成、更新、削除したセッションの情報を出力 |
認証 | authentication.csv |
ユーザーが認証された時間と認証の方法を出力 |
設定 | configuration.csv |
誰が、いつOpenAMの設定を変更したかを出力 |
アクティビティはOAuth2.0やOpenID Connect関連のトークン(ID TokenやAccess Token)のイベントは記録されない的な注意書きがAdministration Guideに書いてありましたが、のちのリリースで対応されるみたいです。
デフォルトの監査ログの置き場所
OpenAMのデフォルトの設定では**OpenAMの設定情報が格納されているディレクトリ以下に保存されているみたいです。(本記事では/home/openam/openam/openam/log
となります)
[vagrant@iam ~]$ sudo -u openam ls -l /home/openam/openam/openam/log
total 3880
-rw-r--r-- 1 openam openam 3667621 Dec 13 23:44 access.csv
-rw-r--r-- 1 openam openam 69570 Dec 15 19:42 activity.csv
-rw-r--r-- 1 openam openam 177533 Dec 13 23:44 authentication.csv
-rw-r--r-- 1 openam openam 33669 Dec 13 23:32 config.csv
このログの出力場所の設定は、OpenAMの設定から変更できます。
CONFIGURE => GLOBAL SERVICESをクリックし、
Audit Loggingをクリックします。
Secondary Configuration => Global CSV Handlerをクリックします。
(深いですね...)CSV Configurationというタブの中に、Log Directoryという設定項目がありますので、ここで変更可能です。
ログローテーションとかもできる
先ほどのGlobal CSV Handlerでは、CSV形式のファイル出力に関する設定ができるようになっています。
- Global Handler Configuration
- 出力するトピックを指定します
- デフォルトでは
access
、activity
、authentication
、config
と設定されています
- Audit Event Handler Factory
- ここはいじらいない
- Audit Event Handlerのクラスパスが設定されています
- CSV Configuration
- CSVファイルの出力先ディレクトリを指定します
- File Rotation
- ファイルローテーションのポリシーを指定します
- デフォルトでは100000000Byteに達したらローテーションされます
- File Retention
- ローテーションしたファイルをどのぐらい(何世代)保持するかを指定します
- デフォルトでは、無制限に保持となっています
- Buffering
- ロギングをバッファリングしてから行うかを指定します
- Tamper Evident Configuration
- イベントごとにHMAC Digestを生成し、エントリに挿入するかどうかを指定します
- 改ざん防止的な設定かな?
Audit Logの中身
ちょっと、整形するのは心が折れた...
- Authentication
"_id","timestamp","eventName","transactionId","userId","trackingIds","result","principal","context","entries","component","realm"
"7bf6332a-cab7-4e8b-8661-bbed75571246-79","2016-12-01T12:04:35.494Z","AM-LOGIN-MODULE-COMPLETED","7bf6332a-cab7-4e8b-8661-bbed75571246-77","id=amadmin,ou=user,dc=openam,dc=forgerock,dc=org","[""502e295c57ad44dd01""]","SUCCESSFUL","[""amadmin""]",,"[{""moduleId"":""DataStore"",""info"":{""authControlFlag"":""REQUIRED"",""moduleClass"":""DataStore"",""ipAddress"":""192.168.33.1"",""authLevel"":""0""}}]","Authentication","/"
- Activity
"_id","timestamp","eventName","transactionId","userId","trackingIds","runAs","objectId","operation","before","after","changedFields","revision","component","realm"
"7bf6332a-cab7-4e8b-8661-bbed75571246-81","2016-12-01T12:04:35.611Z","AM-SESSION-CREATED","7bf6332a-cab7-4e8b-8661-bbed75571246-77","id=amadmin,ou=user,dc=openam,dc=forgerock,dc=org","[""502e295c57ad44dd01""]","id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org","502e295c57ad44dd01","CREATE",,,,,"Session","/"
- Access
"_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"
"7bf6332a-cab7-4e8b-8661-bbed75571246-67","2016-12-01T12:03:29.914Z","AM-ACCESS-OUTCOME","7bf6332a-cab7-4e8b-8661-bbed75571246-60",,,"iam.example.com","443","192.168.33.1","61462","CREST","READ",,"true","GET","https://iam.example.com:443/openam/json/serverinfo/*","{}","{""accept"":[""application/json, text/javascript, */*; q=0.01""],""Accept-API-Version"":[""protocol=1.0,resource=1.1""],""host"":[""iam.example.com""],""referer"":[""https://iam.example.com/openam/XUI/""],""user-agent"":[""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36""],""X-Requested-With"":[""XMLHttpRequest""]}","{""JSESSIONID"":""6D3835342673B06D0DE661B71C28833C""}",,"SUCCESSFUL","",,"397","MILLISECONDS","Server Info","/
- Config
"_id","timestamp","eventName","transactionId","userId","trackingIds","runAs","objectId","operation","before","after","changedFields","revision","component","realm"
"7bf6332a-cab7-4e8b-8661-bbed75571246-50","2016-12-01T12:02:13.942Z","AM-CONFIG-CHANGE","7bf6332a-cab7-4e8b-8661-bbed75571246-0",,,"id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org","ou=https://iam.example.com:443/openam,ou=com-sun-identity-servers,ou=default,ou=GlobalConfig,ou=1.0,ou=iPlanetAMPlatformService,ou=services,dc=openam,dc=forgerock,dc=org","UPDATE",,,"[""sunKeyValue""]",,,
この**trackingIds
**というのは凄く気になりますね。複数のログファイル、また、違うトピックのログファイルにわたって検索できるキーになるんでしょうか?どれどれ...
$ sudo -u openam grep 502e295c57ad44dd01 ./* | awk -F":" '{print $1}'
./access.csv
./access.csv
./access.csv
./access.csv
./access.csv
./access.csv
./access.csv
./access.csv
./access.csv
./access.csv
./access.csv
./access.csv
./activity.csv
./activity.csv
./activity.csv
./authentication.csv
./authentication.csv
おお~、ログの串刺しが捗りそうですね~!ログ分析とかやったことないけど(´ρ`)
〆
他にもマニュアルを読んでると、Legacy Logなんてのもあるみたいですが、Legacyっていうぐらいですから、消えゆく機能なんでしょうかね~?
本日のまとめとしては
- OpenAMの監査ログを取得できる
- 監査ログはアクセス、認証、アクティビティ、設定というトピックからなる
- CSV形式で出力されて、ローテーションやリテンションのポリシーを設定できる
- なんだか有能そうな串刺し属性(trackingIds)が出力されている
明日はなにしよう~?
ばい!