はじめてのOkta Workflowsシリーズ 第3回 長期間利用されていないアカウントの洗い出し
長期間利用されていないアカウントの洗い出し
今回の「はじめての Workflows シリーズ」ブログでは、長期間利用されていない Okta ユーザのアカウントをリスト化するワークフローを解説します。このワークフローは“Identify inactive Okta users”という名称で テンプレートとして提供されていますので、Templete メニューからすぐに使って頂くことができます。ユースケースは
- 退職などで不要になったアカウントの削除漏れの洗い出し、
- ライセンスの無駄使いの回避
などがあります。
最初に、フローの中身を順を追ってご説明します。フローの構成を理解頂くことで、カスタマイズしたり他のテンプレートとの融合など、活用方法へ広げることができますので、様々な業務自動化の推進にお役立て頂けます。本ワークフローを利用するための手順はブログの最後でご紹介します。
フロー解説
概要
このワークフローは、メインフローとそこから呼び出されるヘルパーフローの2つから成り立っています。行われる処理の大まかな流れは、
メインフロー:アカウントのステータスがアクティブなユーザをリストアップ
ヘルパーフロー:リストでユーザの最終ログイン日時を確認し、長期間(30日以上)ログインがない場合、テーブルに出力
となっており、結果として以下のようなテーブルが得られます。
なお、テーブルは Workflows の機能の一部であり、必要に応じて作成・使用することができます。このテンプレートにはフローとテーブルがセットになっており、上図のテーブルはインポートした時にフローと一緒に作成されています。
メインフロー解説
- 最初のカードはフローの開始条件を決定するイベントカードです。
このフローでは、任意のスケジュールでフローを実行するイベントカードを利用しています。
このカードの詳細は後半の「フロー利用方法」で解説しますので、ここでは「指定したスケジュールのタイミングが訪れると実行される」と理解し、次に進みます。
次以降にある緑のカードは全てノートカードで、
処理には一切関わらないカードです。処理の意図などをコメントで残すと、後で見返す時や他の人に引き継ぐ時に便利です。
- 次に実行される処理は水色のカード、テーブルに関する処理です。
解説冒頭でご紹介したテーブルの情報を全て消去し、初期化しています。
過去の実行結果を消去し、最新の結果だけを表示するためです。
オレンジ色のカードは、処理には無関係のため一旦飛ばして後ほどご説明します。
- Okta のマークがあるカードです。Okta 上の情報を扱うために利用します。
ここでは、Okta に登録されているユーザのリストを取得しています。長期ログインしていないアカウントを探すのが目的であり、無効なアカウントをチェックする必要がないため、ステータスが ACTIVE であるユーザだけを対象としています。
実行されると複数のユーザがマッチします。それらのユーザを個別に確認するために、別のフロー(ヘルパーフロー)へと処理を引き継いでいます。
同時に、もう1つヘルパーフローに受け渡している情報があります。今回の処理の目的である「長期間使用していないユーザを判定」するための日数で、ここでは30と静的に入力しています。つまり30日間以上ログインしていないユーザを、長期未使用ユーザとして扱うことになります。
Note:
この期間日数の値は単純な静的な値ですから、実際はヘルパーフローの中で指定するように作ることもできます。しかし、メインフローで指定するように作っておくことで、たとえば以下のような活用が可能となる利点があります。
- 長期(30日)、超長期(90日)以上の2つのリストを作るようにカスタマイズしたい。
- 全く異なる目的のフローでこのヘルパーフローを利用したい。
ヘルパーフローの中で値を設定すると、上記のようなケースで取り回しが悪くなってしまいますが、今回のようにメインフローで値を指定して渡すように作成すれば、上記のようなシーンにおいて最小限の負担でワークフローの作成ができます。
- オレンジ色のカード Now では現在時刻を取得しています。
ここでの用途は単にデバッグ目的で時刻を取得することで、このフローの処理において必須ではありません。
最後にあるオレンジのカードも同じことをしていますが、フローの実行後に履歴情報を確認し、両者を比較して処理にどれくらいの時間がかかったのか確認できます。
上図は実行後の履歴情報です。左右の Now カードの「時刻」を比較すると、約5秒で完了していることがわかります。
ヘルパーフロー解説
メインフローから呼び出されて実行されます。その際、以下の2つの情報を渡していました。
- (メインフローが Okta から取得したユーザリストの)ユーザ情報
- 長期未使用(期間)日数(値:30)
ユーザ情報は1名分ずつ渡され、ユーザリストに含まれる全てのユーザを処理し終わるまでヘルパーフローの実行は続きます。つまり処理の流れは以下のようになります。
- メインフローで条件に合うユーザが3名該当(したとします)
- ヘルパーフローでユーザAを処理
- ヘルパーフローでユーザBを処理
- ヘルパーフローでユーザCを処理
- メインフローにある、ヘルパーフローを呼び出したカードに戻る
- メインフローで次以降の処理を実行(本ワークフローでは現在日時の取得をして終了)
メインフローから受け渡された情報は、ヘルパーフローの最初のカードで確認できます。
ユーザ情報には様々な情報が含まれますが、このカードではこの後の処理で使用する3つの情報だけを取り出しています。それぞれ Okta ユーザの内部ID(ID)、最終ログイン日時(Last Login)、ログイン名(Login)です。
これらの値は最終的にテーブルに登録する情報としても使われています。フロー概要でご紹介したテーブルと見比べてみてください。
では、続きのカードを見ていきましょう。
- 最初の処理にあたる水色のカードでは、このフローの実行継続条件を判定しています。
ユーザの最終ログイン日時に値が入っていれば継続、値が空(empty)であれば処理を終了し、次のユーザの処理を開始します。
これはユーザを作成、有効化して ACTIVE のステータスになったもののログインはまだしていない、という場合などが該当します。
- ログインをしたことがないユーザは、長期未使用かどうか判定できない。
- この後の処理で最終ログイン日に対して日数の四則演算を行っており、値が空だと計算エラーとなる
といった理由により、値が入っていないユーザは処理から除外しています。
- 次のカードはメインフローにもあった現在日時の取得です。
その次のカードで、取得した日時を利用しています。現在日時から長期未使用期間である30日を減算した日時を求めています。こうして求められた日時は、長期未使用を判定するための基準日になります。
- の水色の条件カードでは、2. で求めた日時を使って実際の判定を行っています。
最終ログイン日が基準日(現在-30日)よりも過去の場合は長期未使用のため処理を継続。基準日より新しい場合は処理を止め、次のユーザのチェックに進みます。
ここまでをまとめると、以下の条件を全て満たすユーザだけが次のカードの処理に進みます。
- ステータスが ACTIVE (メインフローでユーザ抽出時に判定)
- ログインした履歴がある(最終ログイン日時が記録されている)
- 最終ログイン日時より30日以上経過している
以上で、長期利用のないユーザと判断可能なため、あとはテーブルに情報を保存すれば完了です。
- しかし、このワークフローではその前に2つのカードがあります。
ユーザがログインしていない日数を計算しています。結果の出力に参考情報として追加するためです。
1つめの濃いオレンジのカードでは、2.の Now カードで取得した現在日時を再度使って
現在日時 ー 最終ログイン日時の計算を行い、時間の差を求めています。
日数を求めるにあたり、少数で表現される場合もあります。(例:計算された差が42時間の場合、1.75日)
そこで次の薄いオレンジのカードで四捨五入を行い、整数に直します。
- 最後の水色のカードはテーブルへの行の追加、つまり結果の出力です。
長期間ログインしていないユーザの各情報(最初のカードで受け取った3つのユーザ情報)と、チェックを行った日時、4.で計算したログインしていない期間をテーブルの各フィールドへと入力しています。
フローの解説は以上となります。
このワークフローには以下の要素が含まれています。どれも Workflows にとって重要で便利な要素ですので、改めてご確認ください。
- フロー内のカードだけで行う処理(日付を取得、そしてそれを計算など)
- 求めた/受け取った値を他のカードで利用(計算した日時をテーブルカードで保存など)
- フローの外からの情報取得(Okta からのユーザリスト取得)
- ヘルパーフローの呼び出し
- フロー間の情報の受け渡し(ユーザ情報、日数をメインフローからヘルパーフローへ)
- テーブルへの結果出力
フローの利用方法
最後に、このワークフローを使うための手順についてご紹介します。
まずはテンプレートからワークフローを追加する作業です。
Workflows 設定画面(Workflows Console) の上部にあるメニューから、Templates をクリックします。
利用できるテンプレート一覧が表示されますので、そこから ”Identify inactive Okta users” を検索しクリックしてください。検索キーワードボックスにテンプレート名の一部または全部を入力すると表示を絞り込むことができます。
テンプレートの説明や、解説などのリソースが確認できます。左側の Add template をクリックしてテンプレートをご利用の環境に取り込み、使用できる状態にします。
テンプレートからフローを追加すると、自動的に追加された2つのフローが表示されます。
実行の起点となるフローは TYPE が Schedule となっている上のフローです。TYPE が Helper となっているフローは上のフローから呼び出されて動作します。
実際に利用するには3つほど準備が必要となりますので、順番にご説明します。
まずは上のフロー [scheduled] identify inactive Okta users をクリックして内容にアクセスします。
最初のステップは、このフローの実行間隔の設定です。Scheduled Flow カードの下部にある時計のマークをクリックして、実行間隔の設定画面にアクセスします。
実行間隔はデフォルトで毎週(WEEK)、日曜日(S)と木曜日(T)の午前2時(ロサンゼルス時間)となっています。必要な場合、この実行間隔をご利用の目的に合わせて変更してください。例えば、次の図の例では日本時間の毎週日曜日、午前3時30分に変更しました。
スケジュールはフローの目的に応じて、分単位、時間単位、毎日、毎週、毎月の間隔で設定することができます。また、Advanced Option を展開して設定すれば、スケジュール実行を開始する日時と、実行を停止する日時が設定できます。
次のステップでは、Okta から情報を取得するためのカードのコネクション設定を行います。右へスクロールして List Users with Search カードを見つけ、Choose Connection をクリックしてください。既にコネクションが設定されており、緑のマークが表示されている場合はそのまま利用できます。有効なコネクションがない場合は +New Connection をクリックしてコネクションを設定してください。
ドメインはご利用頂く Okta テナント のドメイン名を入力してください。Client ID と Client Secret は Okta Admin 画面の、Application > Applications > Okta Workflows Oauth > Sign-On で確認できます。
ここまでの変更が完了したら、フロー名の右にある Save ボタンを押して変更を保存します。
最後のステップはフローの有効化です。
両方のフローの ON/OFF スイッチを上図のようにONにしてください。
これで完了です。最初のステップで設定した実行スケジュールになるとフローが実行されます。
テンプレートには、さらに自動化を盛り込んだ Suspend Inactive Users も収録されています。このテンプレートでは、長期利用されていないアカウントのステータスを自動的に休止状態に変更します。ぜひこちらも確認、利用してみてください。