長期間利用されていないアカウントの洗い出し 今回の「はじめての 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.で計算したログインしていない期間をテーブルの各フィールドへと入力しています。 フローの解説は以上となります。.