コンテンツまでスキップ

【Okta】いつもと違う挙動だけを拾ってSlackに通知させたい!【イベントフック】

はじめに


こんにちは、 ネクストモード株式会社 のSaaS事業部hagiです。

今回もあるあるネタを紹介していきます。

 

Oktaのログ監視について


Oktaのログを正攻法で捌くには、下記のようにAmazon EventBridgeまたはSplunk Cloudのいずれかとの連携をします。

https://help.okta.com/oie/en-us/content/topics/reports/log-streaming/about-log-streams.htm

では、早速やっていきましょう。
とはならない場合もありますよね?

 

日々本業に追われてお疲れの兼業情シスさまなら、こう考える方もいらっしゃるはずです。

「能書きはいいから通知だけ欲しい…」
「コスト考えたくない…」
「インフラのメンテ稼働もコストだぞ…いいか、メンテ稼d……Zzz」

 

分かります!!

 

これ見たことあるやつ!※1


ステップをちゃんと踏みたい方はまずこちらのよく分かる有り難い前記事をご確認ください。

 

 

設定手順


まずはWorkflowsでAPI Endpointを作ります。(前記事をリスペクトして適当に端折ります)

okta-webhook-workflows-002

 

Invoke URLがゲットできたら、次は管理コンソールです。

okta-webhook-workflows-006

 

ここからが本題ですが、Subscribe to eventsの中から気になる要素をピックアップしていきます。
何があるかな…?

 

景色すご!!
インスペクションから数えた時点で142個ありました。

user.credential.enroll
user.authentication.authenticate
device.user.remove
device.user.add
device.lifecycle.unsuspend
device.lifecycle.suspend
device.lifecycle.deactivate
device.lifecycle.activate
device.lifecycle.delete
device.enrollment.create
resource.entitlement_policy.draft.delete
resource.entitlement_policy.draft.update
resource.entitlement_policy.draft.create
resource.entitlement_policy.activate
resource.governance.engine.disable
resource.governance.engine.enable
resource.entitlement.delete
resource.entitlement.update
resource.entitlement.create
resource.entitlement_bundle.delete
resource.entitlement_bundle.update
resource.entitlement_bundle.create
resource.user_entitlements.update
policy.auth_reevaluate.fail
policy.continuous_access_evaluate.fail
user.risk.change
user.account.report_suspicious_activity_by_enduser
user.authentication.sso
user.import.password
user.account.lock
user.session.end
user.session.start
system.sms.send_phone_verification_message
application.policy.sign_on.deny_access
user.account.update_password
user.account.unlock
user.account.reset_password
user.session.clear
user.mfa.factor.reset_all
user.mfa.factor.update
user.mfa.factor.unsuspend
user.mfa.factor.suspend
user.mfa.factor.deactivate
user.mfa.factor.activate
user.authentication.auth_via_mfa
system.voice.send_phone_verification_call
system.api_token.revoke
system.api_token.create
security.authenticator.lifecycle.deactivate
security.authenticator.lifecycle.activate
security.authenticator.lifecycle.update
security.authenticator.lifecycle.create
iam.resourceset.bindings.delete
iam.resourceset.bindings.add
iam.resourceset.resources.delete
iam.resourceset.resources.add
iam.resourceset.delete
iam.resourceset.create
iam.role.permission.conditions.delete
iam.role.permission.conditions.add
iam.role.permissions.delete
iam.role.permissions.add
iam.role.delete
iam.role.create
app.oauth2.client.privilege.revoke
app.oauth2.client.privilege.grant
group.privilege.revoke
group.privilege.grant
user.account.privilege.revoke
user.account.privilege.grant
app.oauth2.as.consent.revoke.user.client
app.oauth2.as.consent.revoke.user
app.oauth2.as.consent.revoke.implicit.user
app.oauth2.as.consent.revoke.implicit.scope
app.oauth2.as.consent.revoke.implicit.client
app.oauth2.as.consent.revoke.implicit.as
app.oauth2.as.consent.revoke
app.oauth2.as.consent.grant
application.provision.user.sync
application.user_membership.change_password
app.access_request.deny
app.access_request.grant
app.access_request.delete
app.access_request.expire
app.access_request.approver.deny
app.access_request.approver.approve
app.access_request.request
application.user_membership.remove
application.user_membership.add
system.org.rate_limit.violation
system.org.rate_limit.warning
group.application_assignment.update
group.application_assignment.add
group.application_assignment.remove
group.profile.update
group.user_membership.remove
group.user_membership.add
user.lifecycle.delete.initiated
user.lifecycle.unsuspend
user.lifecycle.suspend
user.lifecycle.reactivate
user.lifecycle.activate
user.lifecycle.create
user.lifecycle.deactivate
user.account.update_profile
certification.campaign.item.remediate
certification.campaign.item.decide
certification.campaign.close
certification.campaign.launch
system.import.roadblock
system.import.complete
system.import.start
system.import.group.delete
system.import.group.create
group.lifecycle.delete
group.lifecycle.create
app.oauth2.trusted_server.delete
app.oauth2.trusted_server.add
policy.rule.delete
policy.rule.deactivate
policy.rule.activate
policy.rule.update
policy.rule.add
policy.lifecycle.update
policy.lifecycle.deactivate
policy.lifecycle.activate
system.log_stream.lifecycle.delete
system.log_stream.lifecycle.deactivate
system.log_stream.lifecycle.activate
system.log_stream.lifecycle.update
system.log_stream.lifecycle.create
application.lifecycle.update
application.lifecycle.delete
application.lifecycle.deactivate
application.lifecycle.create
application.lifecycle.activate
application.provision.group_push.mapping.update.or.delete.failed.with.error
inline_hook.executed
access.request.cancel
access.request.resolve
access.request.create
system.email.delivery

 

全部クリックして選ぶのも楽しいですが、今回は気づきたいあるあるケースをピックアップしようと思います。

  • 新規デバイスのEnroll
  • ユーザーロックアウト

 

さて、このまま端折ってSlackに飛ばすとどうなるかというと…

 

こうじゃ!(※イメージ)

JSONという気味の悪い構文が飛んできます。
(ネスト構造も総崩れだよっ!)

そのまま「読める読めるぞ!」の人はそれでいいですが、Detail不要な方はGet Multipleですこしきれいにします。

 

はい見やすい!
(黄帯になっているのはSlackの機能でキーワードによるハイライトをしているためです)

 

あれ?お気づきの方は私だけではないですよね?

「Slackがキーワードで通知できるなら、普段は全部出しておいて、気になるものだけ適宜キーワードで引っ掛ければいいのでは」

 

更にお気づきの方は、こう思いませんか?

「Slackってログいくつまで貯められるのかな?」
「おや?無料で簡易SIEMに使えるかこれ?」

 

最後に


Okta Workflowsは分け隔てなくご契約の皆さんが無償で5フローまで利用できます。

コレに味をしめて自動化の世界へ足を踏み入れていただけたら幸いです。

 

※1 参考文献 https://youtu.be/JR-xjj83PrU

 

20231220 追記


ハンズオンラボで用いられるdemo.oktaにて、追加でやっておいた方が良さそうな設定があったので抜粋します。
本設定により、FastPass認証時のフィッシング検出時のみ通知させることができます。
また、本設定を応用することで、選択したイベントから更に深ぼった形でフィルタできるため、日常のノイズを減らしてより健やかなイベントフック通知運用が可能となります。

 

まず、本機能は現時点でEAのため、下記を有効にします。(https://xxxxxxx-admin.okta.com/admin/settings/featuresから有効化)

 

すると作成済みのHookにフィルタタブが表示されます。

 

下記の要領で、イベントを追加します。

  • 対象イベント

  • フィルタ
    • 先ほど選択したイベントを文字列から検索してフィルターを適用

  • 式言語を書き換えます

event.outcome.reason eq "FastPass declined phishing attempt"

 

以上です!

応用する場合は、System Logの文字列を見てから当ててみることをおすすめします。