その他

Okta Workflows イベントフック使いこなし術!運用を効率化しよう!

ごきげんよう、IDチームのわかなです!

今回は、Okta Workflowsの「イベントフック」を使いこなすための実践的なコツをお届けします。

はじめに

OktaのイベントをトリガーにWorkflowsを動かす方法には、特定のイベント専用の「コネクタ(例:User Created)」を使う方法と、今回ご紹介する「イベントフック」を使う方法があります。

イベントフックは、Okta内で発生した様々なイベントを、指定したAPIエンドポイント(Workflowsなど)に送信する仕組みです。

コネクタの方が簡単ですが、イベントフックには「再利用性の高さ」「コスト効率」という大きなメリットがあります。

  • 再利用性の高さ: 1つのWorkflowで複数のイベントを待ち受け、処理を分岐させることができます。
  • コスト効率: 複数のイベントを1つのWorkflowに集約できるため、無駄なFlowの実行を抑え、ライセンスの節約に繋がります。

イベントフック利用の基本セットアップ

1. Workflowsで受け口(API Endpoint)を作成する

まず、イベントフックからの情報を受け取るためのWorkflowを作成します。

トリガーには、特定のアプリコネクタではなく「API Endpointカード」を選択してください。

Endpoint SettingsのInvoke URLを後で使うのでコピーしておきましょう。

2. Oktaにイベントフックを登録する

次に、Oktaの管理画面で、どんなイベントが発生した時に先ほどのWorkflowを呼び出すかを設定します。

Workflow > Event Hooks に移動し、「Create Event Hook」をクリックします。

  • Name: フックの分かりやすい名前(例:Event Hook to Workflow)
  • URL: 先ほどコピーしたWorkflowsのInvoke URLを貼り付け
  • Authentication field: Authorization
  • Authentication secret: Workflowsの「API Endpointカード」に表示されているClient Tokenを貼り付け
  • Subscribe to events: このフックで通知したいイベントを全て選択(例:User created, User activated, User deactivatedなど)

イベントフック使いこなしのコツ

コツ1: イベントフックの「2回実行」問題を回避する

Oktaの仕様で、イベントフックは1つのイベントに対して2回呼び出されることがあります。

これは、最初にOkta側でイベントフックが有効であることを確認するための予備的な呼び出し(verification event)が発生するためです。

何も対策しないと、1つのイベントでFlowが2回実行されてしまい、意図しない処理やコストの無駄遣いに繋がります。

対策:最初に「Returnカード」を置く

この問題を回避する最も簡単な方法は、Flowの最初に「Returnカード」を配置することです。

API Endpointトリガーは、検証リクエストを受け取ると自動で適切なレスポンスを返して処理を停止してくれます。実際のイベント通知の時だけ、このReturnカード以降の処理が実行されるという仕組みです。

これにより、無駄な実行を確実に1回に抑えることができます。

(参考:Event Hook sends data twice to Workflows

コツ2: 1つのFlowで複数イベントを華麗にさばく

イベントフックの最大のメリットは、複数のイベントを1つのWorkflowで処理できる点です。

例えば、「ユーザー作成時」と「ユーザー無効化時」で少しだけ違う処理をしたい場合があるとします。

API EndpointトリガーのBodyを「Object – Parseカード」を使って展開すると、data.eventsというリストの中に実際のイベント情報が入っています。

イベントは基本的に1つずつ送られてくるので、data.events.0.eventTypeのパスを辿ることで、どのイベントが発生したのかを示す文字列(例:user.lifecycle.create)を取得できます。

取得したeventTypeを「If/Elseカード」の条件分岐に使えば、イベントに応じた処理の振り分けが可能です。

これで、イベントごとにWorkflowを作成する必要がなくなり、管理がとてもシンプルになりますね!

コネクタ vs イベントフック 比較

コネクタイベントとイベントフックの違いを整理してみました。

比較項目コネクタ(イベント)イベントフック
思想・目的特定の1イベントに対して、1つの処理を簡単に実装する複数のイベントを集約し、1つのエンドポイントで柔軟に処理する
設定の柔軟性低い(1コネクタ=1イベント)高い(1フックに複数イベントを登録可能)
Workflows節約イベントごとにFlowが必要なため、消費が多くなりがち1つのFlowに集約できるため、コスト効率が良い
ユースケース・単発のイベントで処理が完結する場合
・Workflowsを使い始めたばかりで、まず簡単な処理から試したい場合
・ユーザーライフサイクルのように関連する複数のイベントを扱いたい場合
・似たような処理を共通化して、管理コストを下げたい場合

個人的には、少しでも凝ったことをしようとすると、すぐにイベントフックの柔軟性が欲しくなる場面が多いと感じます。

まとめ

本記事では、Okta Workflowsのイベントフックについて、以下の点をご紹介しました。

  • イベントフックの概要とメリット(再利用性とコスト効率)
  • API Endpointを使った具体的なセットアップ手順
  • 知らないと損する2つのコツ(2回実行の回避、複数イベントの分岐)
  • コネクタとの比較と使い分け

イベントフックを使いこなすことで、イベントに応じた処理を1つのWorkflowに集約でき、管理が楽になるだけでなく、Workflowsの実行回数も節約できます。これにより、よりセキュアかつ効率的なID管理の自動化が実現します。

この記事が、皆様のID管理業務のヒントになれば幸いです!

わかなだょ〜

Identityチームの吉澤和香奈です!
みんなに幸せをお届けする楽しいやつを目指しています!
趣味は飲酒、ゲーム、筋トレ(BIG3/パワーリフティング)、サッカー観戦(東京V、ときどきFC東京の味スタエンジョイ勢)、斧投げ(ほんもののマサカリ!)です!StrayKidsが好きです!