はじめてのOkta Workflowsシリーズ 第5回

特定の条件に該当するユーザリストの作成とエクスポート

今回のブログでは、Statusなど特定の条件を満たしたユーザのみ抽出し、その一覧の作成とCSVによるエクスポートを行うためのフローを解説します。

Oktaのユーザ一覧をエクスポートするだけであれば、標準のReports機能で事足りる場合があるかもしれませんが、例えばOktaの初期導入時に、一定期間経過後もアカウントの有効化/Activationを実施していないユーザだけをリスト化したい場合や、特別な権限を付与された識別子であるカスタムの属性値を持つユーザをリスト化したい場合など、特定の条件にマッチするユーザの一覧が欲しい場面もあるかと思います。

本ブログでは、ユーザの検索機能を用いて特定のユーザの抽出とリスト作成から、最終的にCSVファイルのエクスポートを行うまでのフローの実装概要を解説します。実利用の際はエラーハンドリングなどが必要になりますが、ここでは本質的な処理に絞って実装を解説します。

フローの実装概要

メインフローにて条件にマッチするユーザの抽出を行い、ヘルパーフローにてリストに必要な情報だけを更に抽出し、テーブルに書き出します。最後にExportボタンでテーブルの内容をエクスポートする流れとなります。

今回ご紹介する例では、アカウント作成後にユーザがActivationメールをクリックして初期セットアップを行っていない(または提供されたパスワードでログインしていない)状態であるProvisioned statusの者を抽出して、氏名や上長の情報をリスト化するフローとなります。

  1. テーブル作成

まず、最終出力結果を保存するテーブルを作成します。

テーブル作成

各カラムと用途は下記の表の通りです。*autoのカラムについては割愛します。
該当するユーザの姓、名、メールアドレス、部署、上長を記載します。

カラム名

フィールドタイプ

用途 (入力値の概要)

lastName

Text

該当ユーザの姓

firstName

Text

該当ユーザの名

email

Text

該当ユーザのメールアドレス (Primary email)

department

Text

該当ユーザの部署

manager

Text

該当ユーザの上長 (マネージャ)

この実装例では、必要最低限の属性しか扱ってませんが、実際の運用で必要となる他の属性も追加可能です。例えばユーザの作成日などを取得して経過日数を計測するなど。

  1. メインフローの作成

Provisioned状態のユーザを抽出し、その結果をヘルパーフローに渡します。
各Statusの詳細はこちらを参照ください。

メインフローの作成

Step 1:スケジュールによるフローの定期実行

過去のOkta Workflowsシリーズでもよく使用しており、フローを指定した周期で自動起動することができます。

利用カード: OktaのScheduled Flow

Step 2:最終出力先のテーブルの内容をクリア (前回実行内容の削除)

利用カード: TableのClear Table

Step 3: StatusがProvisionedであるユーザを抽出

オプション設定にて、条件にマッチするユーザの内、どの程度の数を結果として出力するかを選択できます。1つのフロー内で処理が重くならないように、First Matching RecordやFirst 200 Matching Recordsなどが用意されています。
今回はマッチした全件(200件以上)をリスト化するフローとするため、Stream Matching Recordsを選択します。こちらの場合は、得られた結果をヘルパーフローへ渡すため、Flow項目で既存ヘルパーフローを選択しますが、今回はまだ存在していないので新規作成します。詳細は(3)へ続く。

StatusがProvisionedであるユーザを抽出

利用カード: OktaのList Users with Search

  1. ヘルパーフローの作成

メインフローから渡された情報(Record)から、必要な情報だけを抜き出してテーブルに書き込みます。

ヘルパーフローの作成

Step 1:メインフローからの呼び出し用カード

メインフローから受け取る変数を定義しますが、今回は通常と異なりStreamingを使用しているので、こちらに記載の通りRecordとStateを定義します。

利用カード: OktaのHelper Flow (Add Eventにて選択)

Step 2:取得した情報から必要なブロックを抽出1

各ユーザの様々な情報を得られますが、最終的に必要としているユーザ属性以外は不要なため該当の箇所のみ抽出します。

データ構造から、まずはRaw Output部分を抽出します。取得した情報から必要なブロックを抽出1
利用カード: ObjectのGet

Step 3:取得した情報から必要なブロックを抽出2

更にユーザのプロファイル情報であるprofile部分を抽出します。

利用カード: ObjectのGet

Step 4:必要な属性値のみ抽出

ユーザプロファイルの内、テーブルに書き出す必要のある情報だけを選択します。こちらのカードは次のTableのカードとセットで編集することになります。

利用カード: ObjectのGet Multiple

Step 5:属性値の書き出し

先に作成したテーブルを選択すると、予め設定しておいたカラムの情報を読み込めます。この5つのカラムに相当する情報を、Step 4で作成したGet Multipleカードより取得します。

取得した情報から必要なブロックを抽出2属性値の書き出し 利用カード: TablesのCreate Row

  1. テーブルの確認とエクスポート

条件にマッチしたユーザの属性情報が記載されています。

書き出された情報を確認し、問題なければそのままExportボタンを押すとCSVファイルとして取得できます。

テーブルの確認とエクスポート

サンプル・フローのダウンロード

今回解説したフローは、こちらからFlow Packファイルとしてダウンロードし、Workflowsにインポートすることで試すことができます。ただし、あくまでサンプルですので、動作の保証をするものではなく、フロー全体としての動作やロジックはサポート対象にはなりませんのでご了承ください。

最後に

Workflowsを使うことで、特定の条件にマッチした情報だけをリスト化して簡単に出力できることを実感頂けたでしょうか。今回の実装例では、ユーザー情報の管理にWorkflowsのテーブルを利用しましたが、Google SheetsやExcel Onlineを使うこともできます。また、Status以外のパラメータや時間を条件にして、更にカスタマイズさせたフローによるユーザリスト作成も可能です。