SaaS

Oktaログの見方をマスターしよう!

こんにちは!たつみんです。

みなさんはOktaのログって見てますか?今日はログの見方やおすすめの検索クエリをご紹介します。

基本編

Okta管理画面からReports>System Logへ移動します。

以下のようにログ画面が表示されます。

全体の画面構成について

まずこの画面全体の構成について解説します。

  1. FromTo
    • ログの抽出期間を設定することができます。
      デフォルトで直近1週間を抽出するように値がセットされています。
  2. Search
    • 検索クエリを入力しログを抽出することができます。
      デフォルトでは何も設定されていないので全件表示となっています。
      応用編で検索クエリの詳細について解説します。
  3. Advanced Filters
    • 応用編で解説します。
  4. Show event trends by category
    • 応用編で解説します。
  5. List View/Map View
    • 応用編でMap Viewについて解説します。
  6. Download CSV
    • ログをCSVでダウンロードできます。
  7. Time
    • ログの発生日時が表示されています。
  8. Actor
    • ログを発生させたユーザーが表示されています。
  9. Event Info
    • 発生したイベントの概要と結果の概要が表示されています。
  10. Targets
    • イベントの対象が表示されています。

次にいくつかのログをみながら詳細について解説します。

下記はOktaダッシュボードからSAML Service Providerという名前のアプリケーションをクリックしSSOを行なった時の関連するログ2件です。

このログを時系列順で確認することで読み取れることは以下のような事柄です。

  1. 7月12日 14:00:18にユーザーであるTatsumi NishikawaがアプリケーションSAML Service Providerに関連するサインオンポリシー内のルールFastPass Ruleの評価を行い許可された。
  2. 7月12日 14:00:19にユーザーであるTatsumi NishikawaがアプリケーションSAML Service ProviderにアプリケーションユーザーTatsumi NishikawaとしてSSOを実行し成功した。

余談ですが、この画面構成はいわゆる英文法のSVO型(主語/動詞/目的語)の順でActor/Event Info/Targetsと並んでいるため、SOV型(主語/目的語/動詞)の言語を使う日本語話者にとっては若干読みづらく感じるかと思います。

ログの詳細について

ログの先頭にある>をクリックするとさらに詳細な内容が表示されます。

ただし上記は概要と比べてもあまり情報量が増えているわけではないため、さらにExpand Allをクリックします。

以下のような1件のログに記録されているすべての情報が表示されます。

かなり量が多いので読み解くのが大変なのですが、いくつかのポイントを押さえながら段落ごとに解説します。

Actor

イベントを発生させた人の詳細情報が表示されます。

後述する応用編で検索クエリでActorを指定する場合はAlternateIdやDisplayNameではなく普遍的な一意なキーであるIDを利用することを推奨します。

Client

どのようなクライアントからのアクセスなのかが表示されます。

IPアドレスも記録されています。GeolocationにはこのIPアドレスに紐づく位置情報も表示されています。

Event

記録されたイベントに対する詳細情報が表示されます。

ここではDisplayMessageEventTypeでイベントの概要を掴みつつ、OutcomeReasonResultでそのイベントが最終的にどのような状態になったかを確認します。

また、DebugContextも非常に重要でBehavior Detectionが利用可能なライセンスを契約している場合はLogOnlySecurityDataで振る舞い検知の各項目の判定結果が表示され最終的にリスクレベルがどうであったかが記録されています。

Request

HTTPリクエスの詳細情報が表示されます。

Target(1)

ターゲットは複数記録されることがあります。

このログではSAML Service Providerという名称のアプリケーションが対象となっていることがわかります。

後述する応用編で検索クエリでTargetを指定する場合はAlternateIdやDisplayNameではなく普遍的な一意なキーであるIDを利用することを推奨します。

Target(2)

このログではFastPass Ruleという名称のRuleが対象となっているこがわかります。

応用編

検索クエリについて

様々な検索クエリを作成できます。例えば以下の検索クエリではイベントタイプがユーザーライフサイクルの作成でかつ、その結果が成功であるログだけを抽出することができます。

eventType eq "user.lifecycle.create" and outcome.result eq "SUCCESS"

ただこのような検索クエリをゼロから作成するのは骨が折れますので任意のログが表示されている場合はログから条件に加えたい部分をクリックすることで検索クエリが自動的に作成されます。

  1. 先ほどの状態からActorであるTatsumi Nishiakwaの部分をクリックする
  2. 検索クエリに自動的にand actor.id eq "<OktaユーザーID>"が追加される
  3. 検索結果が絞り込まれ先ほどまで23件だったイベント数が20件となっている

検索クエリはandやeq以外にもさまざまな演算子を利用することが可能です。

詳細については下記をご参照ください。

演算子を利用することで以下のように主要なユーザーライフサイクルに関連するイベントの成功ログだけを抽出することもできます。

outcome.result eq "SUCCESS" and (eventType eq "user.lifecycle.create" or eventType eq "user.lifecycle.deactivate" or eventType eq "user.lifecycle.delete.completed")

Advanced Filtersについて

検索クエリにeventType eq "user.lifecycle.create" and outcome.result eq "SUCCESS"を入力した状態でAdvanced Filtersをクリックします。

以下のように現在設定されている検索クエリの構造が表示されます。

ここでoutcome.resultの演算子をequalsからnot equalに変更し、Apply Filterを実行します。

そうすると以下のように検索クエリの中で該当部分がeqからneに変化し、検索結果も0件となりました。

ただし、Advanced Filtersでは複数の条件をorで繋ぐことはできないため、先ほどご紹介した以下のような検索クエリの場合は機能しません。

outcome.result eq "SUCCESS" and (eventType eq "user.lifecycle.create" or eventType eq "user.lifecycle.deactivate" or eventType eq "user.lifecycle.delete.completed")

Show event trends by categoryについて

Show event trends by categoryをクリックすることで以下のようにCount of events per target,Count of events per actor,Count of events per event typeが表示されます。

それぞれの棒グラフにカーソルを合わせることで対象が表示されます。

たとえばCount of events per actorで一番多い部分がtatsumi@cloudnative.co.jpでありイベント数は20であることがわかります。そのままクリックすれば検索クエリに追加されます。

大量のログがある場合にtargetやactorの傾向を掴むのに役立ちます。

List View/Map Viewについて

Map Viewに切り替えることで以下のような世界地図が表示されます。この地図に表示されているのはIPアドレスに紐づくGeolocationなので必ずしも正確な位置情報ではありません。

日本以外にもアメリカからアクセスがあるようなので以下のように拡大表示します。さらにフィルターマークをクリックすることでログの絞り込みを行います。

絞り込みを行なった結果、イベント数が7311件と表示されました。さらにShow event trends by categoryを表示し、Count of events per targetを確認することでOkta Workflowsに関連するOAuthが2000件ほどあることがわかります。気になるところがあればさらに拡大したり絞り込んで確認をします。

おすすめの検索クエリ

よく利用する検索クエリには以下のようなものがあります。

ユーザーライフサイクルに関連するイベントの検索クエリ

これまでにすでに紹介をしていますが以下のような検索クエリでユーザーの作成や削除などのイベントを検索することができます。

outcome.result eq "SUCCESS" and (eventType eq "user.lifecycle.create" or eventType eq "user.lifecycle.deactivate" or eventType eq "user.lifecycle.delete.completed")

ユーザーのアカウントロックの発生と管理者による解除の検索クエリ

eventType eq "user.account.lock" or eventType eq "user.account.unlock_by_admin"

その他のイベントタイプについて

以下を参照し活用してみましょう。

Office 365に関連する検索クエリ

レガシー認証

debugContext.debugData.requestUri eq "/app/office365/<IssuerUri>/sso/wsfed/active"

先進認証

debugContext.debugData.requestUri eq "/app/office365/<IssuerUri>/sso/wsfed/passive"

IssuerUriについて

View Setup Instructionsもしくは関連するログから確認することができます。

特定の認証ポリシー内のルールを参照した場合の検索クエリ

eventType eq "policy.evaluate_sign_on" and target.id eq "<ruleID>"

ThreatInsightに関連する検索クエリ

eventType eq "security.threat.detected"

ThreatInsightに関するその他ログや概要などは以下の公式ドキュメントに詳細が記載されています。

各種IDの確認方法

actor.idやtarget.idに指定する各種のIDを確認する方法をご紹介します。

ユーザーID

Okta管理画面で対象のユーザーを表示し、URLから確認します。

以下のように表示されたURLのview/以降の部分です。/#tab-appsなど部分は不要です。

https://<YourOktaOrgURL>-admin.okta.com/admin/user/profile/view/<UerID>/#tab-apps

グループID

Okta管理画面で対象のグループを表示し、URLから確認します。

以下のように表示されたURLのgroup/以降の部分です。/#tab-usersなどの部分は不要です。

https://<YourOktaOrgURL>-admin.okta.com/admin/group/<GroupID>/#tab-users

ルールID

以下のように既存ログから確認が可能です。

ただし作成したばかりのルールや例外的なルールの場合は簡単にはログからは確認できないため、その場合は以下のようにAPIを利用し確認します。

  1. 対象のルールがあるポリシーのID確認します。
    • ポリシーIDは該当のポリシーを表示したときのURLのPolicy/以降の部分です。
      https://<YourOktaOrgURL>-admin.okta.com/admin/authn/authentication-policies#authentication-policies/policy/<PolicyID>/
  2. GETリクエストをAPI /api/v1/policies/<PolicyID>/rulesに対して実行します。
  3. ルールのリストが表示され、ルールIDについて確認ができます。

最後に

Oktaの膨大なログから検索クエリを利用し必要なものを自在に抽出できるようになれば、すばやく現状を把握することができます。エンドユーザーからログインができない、普段と挙動が異なるなど相談を受けた場合はまずログを確認しましょう。ログの内容とユーザーからヒアリングした内容を照らし合わせることで漠然とした疑問が明確なものとなり、どのような対策を行えばよいか見えてくることがあります。

また、ログの検索をOkta Workflowsで行い、アラートを通知することに活用することもできます。弊社では実際に本番環境でこの仕組みを活用し通知を実行しています。詳細は以下のブログで少し紹介していますのでぜひご参照ください。

それでは今日はこのあたりで〜よきログライフを〜?

たつみん

事業会社の情シスからクラウドネイティブにJoin!
好きなものはF1海外観戦とベルギービール!
集中力の質は深く長く遅い典型的なシングルタスクタイプです。