GASとスプレッドシートを使ったOkta管理の一例

こんにちは。Corporate IT 所属の田中です。この記事は、Enigmo Advent Calendar 2021 の19日目の記事です。本記事では、Google Apps Script(以下、「GAS」といいます。)を使用して統合認証基盤サービスであるOktaの管理業務を効率化したことについて紹介したいと思います。 Oktaのグループにユーザーを追加する際、ユーザー数が多いと管理コンソール上で行うのに手間がかかり大変かと思います。
また、作業自体は簡単なものであるため業務アシスタントの方にお願いしたいと思いつつ、ロールの仕様上グループへのメンバー追加のみ権限を付与することも難しく、必要以上の権限付与を防ぐため結局自分で作業してしまうということもあるのではないでしょうか。
上記を改善するため、GASを用いてGoogle スプレッドシート上で簡単にメンバーのグループ追加を行えるようにしました。
更に、DB化されたスプレッドシートを利用して、Okta ユーザーのステータス情報を毎月コラボレーションツールのSlackに通知することで、月次のアカウント棚卸を効率化しました。

構成

仕組みはざっくり下図のとおりです。f:id:enigmo7:20211214002140p:plain *1*2

ユーザー及びグループ一覧の取得

OktaのAPIを使用してグループへユーザーを追加するためには、グループとユーザーそれぞれ一意に付与されているIDが必要です。 そのため、プロセスの前段としてGASでOkta APIからユーザー情報一覧とグループ情報一覧をスプレッドシートに同期しています。同期は、GASのトリガーを定期的に実行することで実現しています。
下図が、スプレッドシートへ反映されたユーザー一覧及びグループ一覧です。 「users-list」シートでは、ステータス、氏名、ローマ表記、email、ユーザーID、最後にログインした日時を取得しています。

f:id:enigmo7:20211214003056p:plain

また、group-listでは、グループ名、グループID、グループの説明を取得しています。 f:id:enigmo7:20211214003127p:plain

グループ追加

プロセスの後段として、上記取得した情報を基に、スプレッドシート上でOktaユーザーのグループ追加を行います。 下図左表「users-list」に追加する人の氏名を、右表「group-list」に追加先グループ名をそれぞれ入力すると、スプレッドシートのvlookup関数を利用してid等が自動入力されますので、後は下図右側の画像をクリックすると、GASでOkta APIを使用してグループへのユーザー追加プログラムが実行されます。 f:id:enigmo7:20211214003159p:plain

実行後、下図のように正常に追加されたことを確認しました。今後は、Slackの関連ページから本スプレッドシートを開いて簡単にグループへ多数ユーザーの追加ができそうです。 f:id:enigmo7:20211214003220p:plain

Oktaユーザーのステータスを月次棚卸

Oktaユーザーに関するステータスやログイン状況を利用して、スプレッドシート上で集計し月末にSlackに通知することにより、棚卸作業がやりやすくなりました。 f:id:enigmo7:20211214003254p:plain

最後に

いかがでしたでしょうか。私自身は非エンジニアで公開できる程綺麗なコードは書けませんためここでは非掲載とさせていただきますが、そんなレベルでも上記のような実装ができるぐらいGASは社内ITの連携に活用しやすく親和性のあるサービスかと思います。本記事の実装内容についてご興味ある方はご連絡くださいませ~。
また、enigmo Corporate ITでは各種クラウドサービス間の連携・自動化を実装できるようなコーポレートエンジニア及び部門を横断的にセキュリティ整備を行うセキュリティエンジニアを募集しております!ご興味ある方は下記求人からご応募お待ちしております!

明日の記事の担当は、サービスエンジニアリング本部の寺田さんです。お楽しみに。


株式会社エニグモ すべての求人一覧

hrmos.co

*1:Oktaのロゴは、次の利用規約に基づき使用しております。 https://www.okta.com/terms-of-use-for-okta-content/

*2:Google 製品のロゴは、次の利用規約に基づき使用しております。 https://about.google/brand-resource-center/brand-elements/#product-icons