はじめに こんにちは、 ネクストモード株式会社 のSaaSおじさん久住です...
【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を作ります。(前記事をリスペクトして適当に端折ります)
Invoke URLがゲットできたら、次は管理コンソールです。
ここからが本題ですが、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の文字列を見てから当ててみることをおすすめします。