はじめに こんにちは、 ネクストモード株式会社 の堀川です。
【Okta】ブックマークレットを使ってManaged Deviceの一覧をCSVで出力してみる!
こんにちは!たつみんです!
Okta管理者としてDevice Trustを構成しているとManagedステータスの端末情報を一覧取得したくなる時ってありませんか?私はたまにあります。
今日は有志によって作成されたブックマークレットを使って簡単にManaged Deviceを取得し、CSV出力することができる方法をご紹介します。
はじめに
今回取得したいManaged Deviceの一覧はデバイスに紐づくユーザーレベルでManagedかどうかを取得します。つまり端末Aにユーザーがaとbが紐づいている状態でも端末AのユーザーaがManagedであるかという粒度の情報を取得します。
この情報を取得する方法はいくつかあります。例えばOkta Admin ConsoleでDirectory>DevicesからManagedでフィルタし、デバイス単位で1つ1つ確認する方法や、Okta WorkflowsからAPIを実行し確認する方法が考えられます。
しかし、Okta Admin Consoleから実施する方法は手間ですし、一覧性には欠けます。Okta WorkflowsでAPIを実行する際はデバイス一覧を取得、デバイスに紐づくユーザー一覧を取得、そのデバイスに紐づくユーザー単位でManagedステータスを取得するという3Flowを消費するという欠点がありました。
ブックマークレットによるManaged Deviceの一覧取得方法
ブックマークレットの導入
以下にアクセスし、ブラウザのブックマークバーにconsole v14の部分をドラッグ&ドロップで追加します。(v14の部分は今後更新される可能性があります)
https://gabrielsroka.github.io/console/
ちなみにこのブックマークレットは先日紹介した 【Okta】ブラウザ拡張機能rockstarで楽にAPI実行しよう! と同じ方が作成しています。
ブックマークレットのテスト
Okta Admin Consoleのどの画面でもいいので表示した状態でブックマークバーに追加した console v14 をクリックします。
以下のような画面が表示されるので filter = 'filter=profile.lastName eq "Doe"'
の Doe 部分を自分のlastnameに置き換えます。
置き換え後に上部のRunボタンをクリックすると以下のようにuser.idとuser.profile.loginつまりメールアドレスが下部のエリアに表示されます。
Managed Deviceとそのデバイスに紐づくユーザー一覧の取得
次に以下のスクリプトをコピーして貼り付けます。
// List devices and users using https://gabrielsroka.github.io/console
start = new Date()
log('Device Display Name,User Email,User First Name,User Last Name,Platform,UDID,Device Status,Management Status')
url = '/api/v1/devices/'
for await (device of getObjects(url + '?search=managementStatus eq "MAN"')) {
for await (user of getObjects(url + device.id + '/users')) {
log(toCSV(device.profile.displayName, user.user.profile.email, user.user.profile.firstName, user.user.profile.lastName, device.profile.platform, device.profile.udid, device.status, user.managementStatus)) // add more attrs...
if (cancel) return
}
}
downloadCSV(debug.value, 'devices')
log('v3 done', (new Date() - start) / 1000, 's')
実行結果
Runをクリックすると以下のように実行結果の表示とともにCSVファイルのダウンロードも実行されます。
検証環境のため1つのデバイスに複数のユーザーが紐づいておりNot Mangedの表示も含まれている状態です。
カスタマイズ
このスクリプトを以下の部分の検索パラメータを変更するとさまざまなデバイス情報を取得できます。
for await (device of getObjects(url + '?search=managementStatus eq "MAN"'))
Managedステータスで絞り込まず全件データを出力するには以下とします。
for await (device of getObjects(url))
OSを絞り込む場合(例として、macOSとiOS)は以下とします。
for await (device of getObjects(url + '?search=profile.platform+eq+"MACOS"+or+profile.platform+eq+"IOS"'))
まとめ
ユーザー情報が紐づいたManaged Deviceの一覧を取得したい時はそれほど多くなく、頻繁に実行する内容でもないかと思います。そのため、Okta WorkflowsやAPIを利用する仕組み化をするよりはこのブックマークレットを利用する方法が手軽でよいかと思います。
以下にはブックマークレット作成者によるさまざまなサンプルスクリプトが公開されているため活用してみましょう。
https://github.com/gabrielsroka/gabrielsroka.github.io/blob/master/console/examples.md
面倒な管理業務を効率的に行えるヒントがたくさんあると思います。