こんにちは。ドコモ・テクノロジ*1 サービスインテグレーション事業部の伊藤です。
私はドコモCCoE(Cloud Center of Excellence)チームに所属し、ドコモグループのクラウド活用を推進する業務を行なっています。そのひとつとして、従業員のシステム開発や運用効率向上を目的とする様々なツール(SaaS等)をグループ内に提供しています。
ドコモCCoEでは数多くのSaaSを管理していますが、そのうちIDaaS(Identity as a Service)として知られる「Okta」を提供しており、Oktaの運用メンバーとして業務を行っています。
Oktaでは、Okta Workflowsと呼ばれるツールを使ってOktaの運用を効率化(自動化)できますが、本記事ではタイトルの通り、Okta Workflowsを使ってOkta上に登録されているデバイス情報を出力・一覧化する方法について紹介します。
Oktaについて
OktaはIDaaSと呼ばれるクラウドサービスのひとつです。IDaaSとは、企業が利用するWebサービスやアプリケーションのIDやパスワードを一元的に管理できるクラウドサービスです。アプリケーションの認証をOktaが一元的に受け持つ事ができるため、Oktaの一回の認証で、連携中の各アプリケーションにアクセス可能です(シングルサインオン)。また、Okta上でパスワード+FIDO2(生体認証)などといった多要素認証により、安全性と利便性を担保した認証を実現可能です。
ドコモでも数多くのアプリケーションと連携し、Oktaを活用しています。また、アカウントの作成やライフサイクル管理の自動化などといった運用効率化、セキュリティ機能の追加などといったセキュリティ対策も併せて行っています。
Okta Workflowsについて
Okta WorkflowsはOkta専用のノーコードツールです。従業員のアカウント作成やライフサイクル管理の自動化、ユーザーやデバイス等のOkta上の特定情報の出力など、Oktaを管理する上での様々な作業を自動化する事ができます。また、様々な外部アプリケーションとも容易に連携が可能であり、アプリケーションをトリガーとしたワークフローの実行や、Oktaの特定情報をアプリケーション側に出力するなど、様々な使い方ができます。
参考:Okta Workflowsと連携可能なアプリケーション
テーマの背景
我々が管理しているOktaではユーザーによって利用条件が異なり、MDM(Mobile Device Managemen)を使った一律のデバイス制御が困難となっています。そこでデバイスのID情報を軸に、アプリケーションへの認証可否を判断する仕組みの導入を検討しています。 仕組みを構築する上で、デバイスIDをはじめデバイス及びそれに紐づくユーザー情報を利用者に対して可視化する必要があり、可視化のために必要となる情報の出力にOkta Workflowsを利用しました。
Okta Workflowsでデバイス情報を出力する方法
ここからは、Okta Workflowsを使って、Okta上のデバイス情報を出力する方法について紹介します。
事前準備
ワークフローに移る前に、いくつかの事前準備が必要です。
Okta WorkflowsへAPIの権限付与
Okta WorkflowsがOkta上のデバイスにアクセスするための権限付与が必要です。「Okta Workflows OAuth」に対して、以下のAPIの権限を付与します。
- okta.devices.manage
- okta.devices.read
Okta Workflows OAuthはOkta Workflowsが外部アプリケーションのAPIにアクセスする際の認証・認可に使用されるアプリケーションです。Okta管理コンソールの「アプリケーション」から確認できます。
Oktaテーブルの作成
デバイスとユーザー情報を出力するためのOktaテーブルを作成します。また、予め出力したい内容のタイトル(Device IDなど)をヘッダーに追加します。

CSVファイルの作成
Oktaテーブル情報の出力先のCSVファイルを、Google Drive上に作成します。また後のワークフローの設定に必要となる、CSVファイルのファイルIDを確認します。ファイルIDはデベロッパーツールで確認できます。
ワークフローの詳細
それではここからOkta上に登録されているデバイスと、それに紐づくユーザー情報を出力するワークフローを紹介します。以下がワークフローの流れです。
- Okta上のデバイスとそれに紐づくユーザーの情報を、Oktaテーブルに出力
- テーブルの情報をCSVファイルにエクスポートし、Google Driveに保存
また、今回連携する外部アプリケーションはGoogle Driveのみです。
ワークフローは「カード」と呼ばれるステップ(プログラムでいうところの関数)を繋ぎ合わせて処理を作成していきます。ここからはカードの処理内容について解説します。
ワークフロー①(最初に実行されるフロー(親フロー))

ワークフロー②(①から呼び出される子フロー)

ワークフロー③(②から呼び出される子フロー)

カード(処理)の内容
※ワークフロー①、②、③内のカード上にある番号(カード番号)の順番に処理されます。以下の処理内容の解説も番号に沿って行います。
カード番号1(ワークフロー①)
バッチ処理を設定します。設定した時間や頻度(月/週/日など)でワークフローを実行できます。

こちらの設定では、毎日23:00にワークフローの処理を開始します。
カード番号2(ワークフロー①)
作成したOktaテーブルの全ての行を削除します。2回目以降の実行を考慮し、前回実行時の情報を削除してから新しい情報を出力します。
カード番号3(ワークフロー①)
Okta上の登録デバイスを検索し、デバイスに関する情報を返します。デバイスの情報はワークフロー②に情報が渡され、ワークフロー②の処理が開始されます。
カード番号4(ワークフロー②)
カード番号3で返される情報のうち、取得したい情報をカスタムフィールドに追加します。
カード番号5(ワークフロー②)
カード番号6のAPIアクションで使用するAPIのURLを指定します。このURLによって、デバイス(Resource ID)に紐づくユーザーの情報を取得できます。(参考:List all users for a device)
カード番号6(ワークフロー②)
デバイス(Resource ID)に紐づくユーザー情報を取得します。カード番号5で指定したURLを「Relative URL」に指定することで情報を取得できます。
カード番号7(ワークフロー②)
デバイスに紐づくユーザー数分の繰り返し処理を行います。ユーザー毎にワークフロー③に処理が引き継がれます。また、デバイス情報も次のフローに渡す事で、ユーザーとデバイス情報をワークフロー③で利用できます。
カード番号8(ワークフロー③)
取得したい情報をカスタムフィールドに追加します。
カード番号9(ワークフロー③)
Oktaテーブルにユーザー及びデバイス情報を出力します。予め、Oktaテーブルに設定したヘッダー情報が、Fieldsに追加されます。すべてのデバイス・ユーザー情報の出力が完了後、ワークフロー①のカード番号10の処理が開始されます。
カード番号10(ワークフロー①)
Oktaテーブルの情報をCSVにエクスポートします。
カード番号11(ワークフロー①)
エクスポートしたCSVを予め作成したGoogle Drive上のCSVファイルに上書きします。上書きするCSVファイルの識別のため、CSVファイル作成時に確認したファイルIDを指定します。
処理の結果
以下のようにOktaテーブル上に下記のようにユーザー及びデバイス情報を一覧化する事ができました。
- First Name(名)
- Last Name(性)
- User ID(ユーザーID)
- MailAddress(ユーザーのメールアドレス)
- Status(ユーザーステータス)
- Device Name(デバイス名)
- Device ID(デバイスID)
- Platform(デバイスのプラットフォーム(OS))
- Device Status(デバイスステータス)

また、ワークフローの一連の処理が成功すれば、CSVの更新(上書き)がされます。
デバイス情報を利用者に可視化する方法について
ここまでOkta Workflowsを用いて、デバイス情報をCSVに出力するところまで紹介しました。本記事の冒頭で背景として記載していた「利用者への可視化」については、更新したCSVファイルをGoogleスプレッドシートにインポートし、さらにそれを「Looker Studio」を利用して、利用者への可視化を行なっています。CSVファイルのスプレッドシートへのインポート方法については、公式ページで公開されています。
Tips
Oktaのワークフローからデバイス情報をOktaテーブルへ出力し、CSVファイルに出力し、さらにそれをスプレッドシートにインポートすることが可能とお伝えしましたが、Google SheetsのCreate Rowアクションを使う事で、ワークフローから直接スプレッドシートへデバイス情報を出力する事も可能です。但しスプレッドシートに直接出力するやり方に比べ、Oktaテーブルへ出力するやり方の方が処理時間が圧倒的に早いため、大規模にOktaを利用している環境では処理時間が大きく変わる可能性があります。
カード番号9の処理をGoogle SheetsのCreate Rowアクションに置き換える事で直接スプレッドシートへの出力が可能ですが、出力数が千行を超えてくるようであればOktaテーブルへ出力するやり方が推奨です。
終わりに
今回、Okta Workflowsを使ってOkta認証に利用されているデバイス情報を出力・一覧化する方法について解説しました。今回デバイス情報というOkta上のデータを出力するという使い方の事例でしたが、アカウント作成の自動化等のOktaの日常のオペレーション業務の自動化などにも有効なツールです。
今後もOktaの運用効率向上を図りながら、運用中のOktaの価値を高めていきたいと思います。
*1: ドコモ・テクノロジはNTTドコモグループの研究開発を支える機能分担会社です。