元気ですか?元気です。
どうも渡邊です。
最近寒くなってきて、早起きが苦手になってきました。
さて、今回は Microsoft Graph API を使った Azure AD アカウントの最終サインイン日時の取得方法をご紹介します。
Teams のゲスト招待を筆頭に、自社の Azure AD に他社のユーザーをゲスト登録してサービスを利用してもらうという利用スタイルが一般的になってきました。
そんな中で、ゲストアカウントの ID が自社の Azure AD に残り続けるという問題が生じてきます。
不要なアカウントは不要になった時点で無効化するのが ID セキュリティの鉄則でもあります。
そんな ID 管理において、最終サインイン日時の定期的なチェックは必要不可欠なものです。
一方で、Azure AD ではユーザー毎に最終サインイン日時を出力する機能が弱く、サインインログベースの情報しか出力できません。
サインインログベースの情報では、サインインログのエントリが無いユーザーは出力されず、複数のサインインログがあるユーザーは複数のサインイン日時が出力されるため、少し扱い難いデータとなります。
この不便さを解消するために、Microsoft Graph API (以下、MS Graph とします。) を使ってユーザー毎に最終サインイン日時する方法を確立しておこう!というのが今回のブログ記事の趣旨になります。
「Microsoft Azure 導入・運用支援サービス」はこちら
この記事でお伝えしたいことは、ざっくり以下の 2点です。
ということで、早速本題に入っていきます。
「Microsoft Azure 導入・運用支援サービス」はこちら
さて、まずは MS Graph を利用するための準備をしなくてはいけません。
最初に以下の手順で MS Graph を利用するための準備をします。
※これらの操作には Azure AD の管理者権限が必要になります。
Azure AD 管理センターにアクセスして、[アプリの登録] から [新規登録] を選択します。
続いて、わかりやすい名前を付けて [登録] します。
このブログ記事では、「Last_SginIn_Checker」という名前でアプリケーション登録することにします。
"サポートされているアカウントの種類" は「この組織ディレクトリに含まれるアカウント」(デフォルト) にします。
また、"リダイレクト URI" は省略します。
アプリケーション登録が完了すると以下のような画面が表示されます。
MS Graph の利用時の認証に赤枠内の情報を利用するので、メモ帳等に控えておきましょう。
アプリケーション登録ができたので、API のアクセス許可を設定します。
今回、サインイン日時の取得に利用するのは、User オブジェクトの signInActivity プロパティになります。(現在は Beta バージョンでの提供)
まずは、対象のリファレンスを参照して、必要なアクセス権を確認します。
アクセス許可は以下のようになっています。
アクセス許可の種類 | アクセス許可 (特権の⼩さいものから⼤きいものへ) |
---|---|
委任 (職場または学校のアカウント) | User.ReadBasic.All、User.Read.All、User.ReadWrite.All、Directory.Read.All、Directory.ReadWrite.All、Directory.AccessAsUser.All |
委任 (個⼈⽤ Microsoft アカウント) | サポートされていません |
アプリケーション | User.Read.All、User.ReadWrite.All、Directory.Read.All、Directory.ReadWrite.All |
今回はアプリケーションとして最終サインイン日時を読み取るだけなので、"アクセスの許可の種類" が「アプリケーション」、 "アクセスの許可" が「User.Read.All」になります。
設定すべきアクセス許可が確認できたので、実際に API のアクセス許可を設定します。
[API のアクセス許可] から [アクセス許可の追加] を選択します。
API アクセス許可の要求から [Microsoft Graph] を選択します。
[アプリケーションの許可] を選択します。
[User.Read.All] をチェックして [アクセス許可の追加] を選択します。
[User.Read.All] が追加されました。
ただし、このままの状態ではまだアクセス許可が付与されていません。
管理者の同意を与えることで、アクセス許可が付与されます。
アクセス許可が付与されると、次のような表示になります。
アクセス許可が設定できたので、最後にシークレットを発行します。
シークレットはアプリケーションのパスワードにあたります。
それでは、設定していきます。
まずは、[証明書とシークレット] から [新しいクライアント シークレット] を選択します。
説明と有効期限を設定して [追加] します。
シークレットを発行すると、次のような表示になります。
[値] の部分がシークレットになりますので、メモ帳等に控えておきます。
ここまでで MS Graph を利用するための準備が整いました。
引き続き、動作確認をしていきましょう。
動作確認には Postman というツールを利用します。
Postman は REST API を呼び出すことのできるツールで、Microsoft の公式ドキュメントでも紹介されています。
今回はこのツールを利用して、実際に Azure AD アカウントの最終サインイン日時を取得してみます。
なお、Postman はこちらのリンクからダウンロードできます。
Postman で行う動作確認は以下の手順で行います。 (MS Graph を利用する場合には原則この手順になります。)
それでは、Postman を使ってアクセストークンを取得します。
アクセストークンを取得するためには、アプリケーション登録で確認した情報を利用します。
具体的には以下の情報になります。
Postman を起動すると、以下のような画面になります。
この画面に必要情報を入力してアクセストークンを取得します。
KEY | VALUE |
---|---|
grant_type | POST |
client_id | <アプリケーション ID> |
client_secret | <シークレット> |
resource | https://graph.microsoft.com/ |
上記の情報を入力すると以下のようになります。
情報の入力を終えたら、[Send] をクリックしてクエリを発行します。
正しく認証が通ると Response のフィールドに以下のような応答が表示されます。
この応答内容の [access_token] の箇所が MS Graph を利用する際のアクセストークンになります。
※セキュリティ情報なので、一部にモザイクをかけていますが、ダブルクォーテーションで囲まれた部分すべてがアクセストークンです。
アクセストークンが取得できたら、MS Graph のクエリを発行します。
今回は最終サインイン日時と共にユーザー情報も欲しいので以下のようなクエリを発行します。
https://graph.microsoft.com/beta/users?$select=id,mail,displayname,usertype,signInActivity
ここまでで確認したアクセストークンと MS Graph のクエリを Postman に仕込むと以下のようになります。
準備ができたら、[Send] をクリックしてクエリを発行します。
正しくクエリが通ると Response のフィールドに JSON 形式で目的の情報が取得できました。
さて、いかがだったでしょうか?
今回は MS Graph を利用した最終サインイン日時の取得方法ご案内しました。
Azure AD のアプリケーション登録等、多少の手間はありますが、全体を通してやっていることは、とてもシンプルだということが見ていただけたと思います。
MS Graph は今回の最終サインイン日時のみならず、Microsoft 365 に関連した様々な情報を取得することができるインターフェースになっています。
ぜひ、真似して日々の運用にお役立ていただければと思います。
また次回は、今回ご紹介した MS Graph を利用して最終サインイン日時取得を自動化にチャレンジしてみようと思いますので、こちらも乞うご期待です。
それでは、今回はここまでにさせていただきます。
最後までお読みいただきありがとうございました。
「Microsoft Azure 導入・運用支援サービス」はこちら