はじめてのOkta Workflowsシリーズ 第4回 日付を指定したユーザーの自動作成と削除
今回のブログでは、指定された日時が来たら自動でユーザーが作成、削除されるフローの作成を解説します。多くの企業では、月初や4月1日に多くの新入社員を迎えたり、契約期間が決められている契約社員の受け入れ対応のために、予めユーザー情報を準備し、業務の開始や終了に合わせてアカウントを確実に作製・削除する必要があるかと思います。始業日以前にアカウントがあるのも問題ですし、始業日にないのも業務の支障となります。また、契約社員の場合は、契約終了日に確実にアカウントが削除(もしくは停止)されている必要があります。
Workflowsを用いることで、表形式のデータから日時指定でアカウントの作製・削除の処理を行うことができます。
本ブログでは、日付を指定したユーザーの自動作成と削除処理の実装概要を解説したいと思います。実利用の際はエラーハンドリングなどが必要になりますが、ここでは本質的な処理に絞って実装を解説します。
フローの実装概要
ユーザー情報はWorkflowsのTablesを用いて定義します。ユーザー作成(入社用)とユーザー削除(退社用)でそれぞれ1組のメインフローとヘルパーフローが、テーブルから日付の条件を満たすユーザー情報を取り込み、プロビジョニング処理を行います。
1. ユーザー情報テーブル
各カラムと用途は下記の表の通りです。Start Date, End Dateをユーザー作製メインフロー、ユーザー削除メインフローが参照し、アカウントの作成、削除を行います。
カラム名 |
フィールドタイプ |
用途 |
rowId(auto) |
- |
Workflowsが自動挿入する行番号(Row ID) |
updated(auto) |
- |
Workflowsが自動挿入する更新日時 |
Start Date |
Date |
ユーザーを作成する日(例 入社日) |
End Date |
Date |
ユーザーを削除する日(例 退社日) |
Created Date |
Date |
ユーザーの作成日。ユーザー作成処理時に挿入します。 |
Removed Date |
Date |
ユーザーの削除日。ユーザー削除処理時に挿入します。 |
User Name, Email, First Name, Last Name |
Text |
Oktaユーザーの必須4属性 |
User ID |
Text |
内部ユーザーID。ユーザー作成処理後に挿入します。 |
ユーザー情報として入力が必要なのは、Start Date、End Date、ユーザーの必須属性(User Name, Email, First Name, Last Name)です。この実装例では、必要最低限の属性しか扱ってませんが、実際の運用で必要となる他の属性も追加可能です。
Start DateとEnd Dateはmm/dd/yy形式で入力できますが、UTCで12 amに設定されます。そこで、日本時間に合うようにカード(Workflowsの処理単位)で時差の補正を行います。
2. Oktaへの接続(Connection)
Oktaのユーザーに対する処理を行うため、WorkflowsがOkta本体のAPIをコールできるよう接続(Connection)を予め作成します。WorkflowsからOkta APIのアクセスにはOAuthを使います。Okta側のOAuthアプリケーションとして、Applicaions配下にある”Okta Workflows OAuth”が予め用意されています。このアプリケーションに登録されているClient IDとSecretによりWorkflowsから接続を行います。なお、”Okta Workflows”アプリは、Workflowsの管理コンソールがOktaと連携するためのアプリケーションです。
3. ユーザー作成用メインフロー
ユーザー作成フローは、5つのカード(Workflowsの処理単位)から構成しています。左から順番に解説します。
- スケジュールによるフローの定期実行
フローを指定した周期で自動起動することができます。日に一度、週に一度など指定した時刻に定期的に自動起動できます。ユーザー情報の投入の周期に合わせて本フローの実行スケジュールを設定が可能です。
Scheduled Flowの設定の仕方や基本的なフローの構成の仕方は、はじめてのOkta Workflowsシリーズ 第2回 Hello Workflows編に解説があるので是非ご参照ください。
利用カード: Okta AppsのSchedule (新規にフローを作成し、Add Eventで Okta AppsのScheduleを選択)
- 現在の時刻の取得
現在の時刻を取得し、プロビジョニングの日時を迎えたデータを取得します。
利用カード: Date&TimeのNow
- UTCへの時差変換
テーブルにmm/dd/yy形式で入力したStart Dateは、特に修正しなければUTCの12 amでの設定となるため、日本時間と時差が生じます。そこで、現在時刻(UTC)に9時間を足して補正します。
利用カード: Date&TimeのAdd
- ユーザー情報テーブルの検索
Start Dateが4で時差補正した現在時刻以降のもの、すなわちプロビジョニングを行うべきデータを検索し取得します。
テーブルの検索には、Where Expressionで条件を指定することができます。条件として、Start Dateが3で生成した日時(現在日時)がStart Date以降になっていることと、Created Dateが01/01/00以前になっているかを条件としています。2つ目の条件は、一度プロビジョニング処理した行を除外するために、Created Dateに日時が入っている行を除外するために設定しています。(日時が空欄だと、”大きさ”としては最小になります。)
利用カード: TablesのSearch Row
- 各行の処理
テーブルの検索から得られた各行ごとにプロビジョニング処理を行う必要があります。このようなケースで、Workflowsではヘルパーフロー(Helper Flow)と呼ばれる”子フロー”を呼び出し、各行のデータを順次処理することができます。プログラミング言語に例えると、for each文で関数を呼び出すイメージですが、Workflowsでも正に”For Each"というカードが用意されています。ヘルパーフローを呼び出すには、予めヘルパーフローを作成しておく必要があるため、親フローの作成を一旦中断し、(3)で解説するユーザー作成処理のためのヘルパーフローを作成します。
”For Each”カードの使い方を少し解説します。まず、インプットとして、テーブルを検索して得られる行データ”Rows"を割り当てます。”Helper Flow"には、(4)で作成するヘルパーフローを選択します。ヘルパーフローを選択すると、ヘルパーフローで定義される変数(引数)の一覧が表示されるので、Rowsに含まれるテーブルのカラム名を選択して割り当てます。これにより各行のデータをヘルパーフローに渡します。
利用カード: ListのFor Each
4. ユーザー作成処理(Helper Flow)
ユーザー作成ヘルパー・フローは、3つのカードから構成しています。
- 親フローからの呼び出し用カード
親フローから受け取る変数を定義(username, firstname, lastname, email, rowid)します。rowidはテーブルに行が追加された時に自動挿入される”行番号”を意味するIDです。該当する行のデータを更新するために必要となります。親フローがヘルパーフローを呼び出す時、ここで定義した変数を割当て先の変数としてマッピングします。
利用カード: Okta AppsのHelper Flow。(新規にフローを作成し、Add Eventで Okta AppsのHelper Flowを選択)
- ユーザー作成
親フローから受け渡されたデータを用いて、Oktaのユーザー作成処理を行います。Oktaのユーザー作成APIを呼び出す必要がありますが、Workflowsでは予めOktaのAPI群をOktaコネクタとしてまとめられており、ユーザー作成APIは、”Create User”というカードが用意されています。この実装例では、Oktaユーザーの必須属性(ユーザ名、姓、名、メールアドレス)をのみ設定していますが、追加属性を含め他の標準属性も設定可能です。
利用カード: OktaのCreate User
- ユーザー情報テーブルの更新
ユーザー作成時に割り当てられた内部ID(User ID)と作成した日時を該当する行に書き込みます。作成日をテーブルに挿入することで実際に作成処理されたか判別がつきます。User IDはユーザーの削除処理時に利用します。
利用カード: TablesのUpdate Row
5. ユーザー削除用メインフロー
実装の考え方としては、(3)のユーザー作成用メインフローと同様です。現在日時がEnd Date以降となっているユーザーをユーザー情報テーブルから検索し、(6)で説明するヘルパーフローを使って削除処理を行います。ヘルパーフローには、ユーザー情報テーブルから取得した削除対象のUser IDとテーブルの行番号(Row ID)を渡します。
6. ユーザー削除処理(Helper Flow)
ユーザー削除ヘルパー・フローは、5つのカードから構成しています。
- 親フローからの呼び出し用カード
ユーザーID(userid)とRow ID(rowid)を引数とします。
利用カード: Okta AppsのHelper Flow。(新規にフローを作成し、Add Eventで Okta AppsのHelper Flowを選択)
- ユーザーの無効化(Deactivate)
ユーザーを削除する前に、まず無効化します。User IDをインプットとします。
利用カード: Okta AppのDeactivate User
- ユーザーの削除
更にユーザーを削除します。運用によっては自動で行うのは2の無効化までとするケースもあるかもしれません。運用に合わせて、退社時のアカウントの処理を実装していただければと思います。
利用カード: Okta AppのDelete User
- 現在時刻の取得
削除を実施した日時を取得します。
利用カード: Date&TimeのNow
- ユーザー情報テーブルの更新
4で取得した削除を実行した日時を挿入します。
利用カード: TablesのUpdate Row
サンプル・フローのダウンロード
今回解説したフローは、こちらからFlow Packファイルとしてダウンロードし、Workflowsにインポートすることで試すことができます。ただし、あくまでサンプルですので、動作の保証をするものではなく、フロー全体としての動作やロジックはサポート対象にはなりませんのでご了承ください。
最後に
Workflowsを使うと簡単に日時を指定してユーザーの作成、削除を行うことを感じていただければ幸いです。Oktaの標準機能であるCSVファイルによるユーザー管理では、ユーザーの作成と更新はサポートしますが、削除がサポートされないため、今回のような実装をWorkflowsで行うメリットもあります。
今回の実装例では、ユーザー情報の管理にWorkflowsのテーブルを利用しましたが、Google SheetsやExcel Onlineを使うこともできます。Google Sheetsからの情報取得方法は、WorkflowsのTempletes ”Importing Users from Google Sheets”として公開されておりますので、ぜひご参照ください。