SaaS

Okta Workflowsでアクティベーションメールを1週間ごとに再送する仕組みを作ったよ

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

先日Oktaの導入開始したお客様より次のようなご相談をいただきました。

従業員に初回ログインのためにアクティベーションメールを送ったんだけどユーザーが対応しないまま1週間の有効期限が切れちゃった。再送したいんだけどOkta管理画面でぽちぽちやるのは辛いんだけど…これってどうにかできない?

きっとOkta Workflows使えばいい感じにできるだろうと思い早速取り組んでみることにしました。

課題の背景

まずお客様から頂いた課題の背景についてもう少し解説します。Oktaの導入時にはざっくりと以下のようなステップで進めることが多いのですが、ステップ5.についてはユーザーに実施してもらう必要があるため進捗にばらつきが発生します。

  1. パスワードポリシーや利用する認証要素の選択などテナント初期セットアップ
  2. ユーザー属性やグループの設計
  3. ユーザーをCSVインポート等によってステータスStagedとして作成
  4. ユーザーへアクティベーションメールの送付
  5. ユーザーによるアクティベーション操作
  6. SaaS連携(SSO/Provisioning)の開始

ステップ5.の大変さ

ステップ5.はさらに以下のように分解されます。

  1. Okta管理画面で1週間の有効期限付きのアクティベーションメールの初回送付を行う
    • ステータスがStagedからPending user actionに変化
  2. ユーザーがアクティベーション操作を実施
    • ステータスがPending user actionからActiveに変化
  3. 1週間経過しPending user actionのままのユーザーに対してアクティベーションメールの再送を行う
    • 以下、Pending user actionがゼロになるまで1週間ごとに繰り返す必要あり

1.のアクティベーションメールの初回送付は一括で行うことができるのですが、3.のアクティベーションメールの再送を行う時にはOkta管理画面では該当ユーザーの画面をひとつひとつ開いてResend Activation Emailをクリックする必要があります。今回の課題はこの作業部分です。

全体ユーザーが100名の場合にアクティベーションメールの初回送付を一括で実施し、1週目で4割(40ユーザー)がアクティベーション操作を実行したと仮定すると、2週目の再送対象は6割(60ユーザー)です。つまり上記のOkta管理画面での操作を60回やる必要があります。

2週目の再送対象60ユーザーのうち20ユーザーが実行した場合は3週目には40ユーザーに対して再々送の操作をする必要があります。あくまでも感覚値ですがアクティベーションを行ってくれるユーザーの割合は概ねこのような推移を辿ることが多いです。

上記の場合はまだOkta管理画面でぽちぽち操作することでもなんとか成り立ちそうそうですが、全体ユーザーが1,000名になった場合、単純に規模感が10倍となるため人間がOkta管理画面を操作するのは時間もかかりますし、なにより面白くありません。

そこでこれらの定期的で面白みのない作業をOkta Workflowsで実装できないか検討してみました。

やりたいことは以下のドキュメントにあるAPI /api/v1/users/${userId}/lifecycle/reactivate にパラメータ ?sendEmail=true を指定し、POSTすることで実現できそうです。

1時間で完成しました!

今回の実現したいことのためには以下の1つのテーブルと2つのFlowを作成することで実現できました。

  • Okta User情報を格納するためのテーブル
  • 週に1度起動し、Okta User情報を取得し、ヘルパーFlowへ情報を渡すMain Flow
  • メインFlowから受け取った情報を元に処理を行うHelper Flow

テーブル作成

以下のようなカラムを持つOktaのユーザーを格納するためにOkta User Listというテーブルを作成します。

Okta User情報を取得するMain Flow

全体像は以下のとおりです。

  1. トリガーにはScheduledカードを選択し週に1度だけ起動するように設定をします。(カード解説)
  2. Clear Tableカードでテーブルの初期化を行います。(カード解説)
  3. List Users with Searchカードで全てのOktaユーザーを取得する設定とし、オプションでStream Matching Recordsを選択し、Helper FlowにOktaユーザーデータを1件1件渡します。(カード解説)

Main Flowから情報を受け取って処理をするHelper Flow

こちらの全体像は以下のとおりです。

  1. トリガーにはHelper Flowカードを選択しフィールド名をUserlistとし、今回はオブジェクト型を指定しました。これによりMain Flowから渡されたユーザーデータを変数名userlistとして扱うことができるようになります。(カード解説)
  2. Get Multipleカードで1.で受け取ったuserlistから次の処理で必要なデータを取り出します。(カード解説)
  3. Create Rowカードでテーブルに定義済みのカラムに対して2.で取り出したデータを指定し、格納します。(カード解説)
  4. If/Elseカードで2.で取り出したデータのうちOktaユーザーのステータスがPROVISIONEDであることを条件に指定します。
    以下の5.6.7.がTrueの処理8.がFalseの処理です。(カード解説)
  5. Composeカードを使用し、APIを実行する際のURLを作成します。(カード解説)
    Resend Activation Emailを実行するためのAPIが以下であるため、${userId}にあたる部分は2.で取り出したRecord.IDをドラッグ&ドロップにて当てはめています。
    /api/v1/users/${userId}/lifecycle/reactivate?sendEmail=true
  6. Custom API Actionカードを利用し、Request TypeはPOSTを指定し、Relative URLには5.で作成したアウトプットを当てはめます。(カード解説)
  7. Update Rowカードでテーブルを指定し実行結果を書き込みます。この時にRow IDは3.のCreate Rowで作成した時のアウトプットであるRow IDを指定します。更新を行うカラムはResend Activation Emailのみとし、この場合は再送済みという文字列を直接指定します。(カード解説)
  8. Falseの場合は7.とほぼ同様にUpdate Rowカードで3.のCreate Rowで作成した時のアウトプットであるRow IDを指定し、テーブルのResend Activation Emailカラムに直接、対象外という文字列を指定します。(カード解説)

実行結果

以下のように対象者には自動的にアクティベーションメールが送付されます。

テーブルにもStatusがPROVISIONEDのみに対してResend Activation Emailのカラムが再送済みがセットされています。

まとめ

APIを調べる必要がありますが仕組みがわかればOkta Worflowsでの実装は1時間程度で可能でした。なによりも定期的な作業でGUIでは時間がかかるし、面白みのない作業を自動化できるのは大きいのではないでしょうか。

もちろん今回のケースではただ定期的にアクティベーションメールを再送するだけでなく、アクティベーション操作を実施してくれないユーザーへどのようなアプローチをすべきかを考えることも必要です。部署の上長から呼びかけてもらうなど地道な作業も必要かもしれません。 泥臭い作業が続くフェーズですがまずはユーザーアクティベーションを完了させて次のフェーズであるSaaS連携(SSO/Provisioning)に繋げられるよう頑張りましょう???

それでは今日はこのへんで!また別の記事でお会いしましょう?

たつみん

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