Microsoft Graphを利用してAzureADサインインログを取得
- t_o_dと申します。
- Azure ADを利用するにあたり、認証の「調査・記録」を行うことは非常に重要であり、そのためサインインログを残す必要があります。
- そこでMicrosoft Graphを利用してREST APIで「Azure ADサインインログ」を取得する方法を記録いたします。
環境
- mac OS Monterey 12.2
- curl 7.79.1
手順
アプリ登録
- Graph APIにアクセスするための認証情報を取得するためにアプリケーションを登録する必要があります。
- まずグローバル管理者の権限をもったアカウントでAzure Portalにサインインしてください。
- アプリケーション管理者でもアプリの登録自体は可能ですが、APIに対するアクセス許可の権限は持っていません。
- サインイン後、左ウィンドウから「Azure Active Directory」を選択して、表示画面左の「アプリの登録」を選択して、「新規登録」をクリックしてください。
- アプリケーションの登録情報に以下を入力してください。
- 名前 : 任意
- サポートされているアカウントの種類 : この組織ディレクトリのみに含まれるアカウント
- リダイレクトURI :「Web」→「https://localhost」
- 入力後、「登録」ボタンをクリックしてください。
アクセス許可
- 登録後、アプリ情報ページに遷移するため左メニューから「APIのアクセス許可」を選択して、「アクセス許可の追加」ボタンをクリックしてください。
- 「APIアクセス許可の要求」でMicrosoft Graphを選択して、「アプリケーションの許可」をクリックしてください。
- 以下の権限にチェックをつけて、「アクセス許可の追加」ボタンをクリックしてください。
- AuditLog.Read.All
- Directory.Read.All
- ※User.Readはすでについています。
- 以下のように追加されていることを確認してください。
- 「管理者の同意を与えます」をクリックしてください。
- ※状態欄にチェックがついていなければ、グローバル管理者に承認を依頼する必要があります。
クライアントシークレットの取得
- 再度左ウィンドウから「Azure Active Directory」「アプリの登録」「証明書とシークレット」の順に選択して、「新しいクライアントシークレット」をクリックしてください。
- 以下のように入力して、「追加」をクリックしてください。
- 説明 : APIの説明
- 有効期限 : 24か月
- 保存後、クライアントシークレットの値をコピーしてください。
各種ID
- ここまででGraph APIにアクセスするための情報は揃いましたので、必要な情報をメモしておきます。
- メモする値は以下の3つです。
- テナントID
- クライアントID
- クライアントシークレット
- ※「クライアントシークレットの取得」手順でコピーした値
- まず、アプリケーションページから「概要」を選択します。
- 概要ページから「テナントID」「クライアントID」をコピーしてください。
curlでリクエスト
- それでは実際にGraph APIにリクエストを投げてみます。
- リクエストの際は以下のように2つ必要です。
- OAuth2認証でトークンの取得。
- そのトークンを用いてGraph APIにリクエスト。
トークンの取得
- リクエストに必要なトークンを取得をするため、以下のコマンドをうってください。
- ※その際に「クライアントID」「クライアントシークレット」「テナントID」をコピーした値に変更してください。
curl -X POST -d "grant_type=client_credentials&scope=https://graph.microsoft.com/.default&client_id=クライアントID&client_secret=クライアントシークレット" 'https://login.microsoftonline.com/テナントID/oauth2/v2.0/token'
- 以下のような結果が返されるため、「access_token」の値をメモしてください。
{ "token_type":"Bearer", "expires_in":3599, "ext_expires_in":3599, "access_token":"アクセストークン" }
サインインログ取得APIへのリクエスト
- ここまででサインインを取得する準備が整いましたので、以下のコマンドをうち取得できるか確認してください。
- その際に「アクセストークン」を取得した値に変更してください。
- ※デフォルトでは1000件取得されます
curl 'https://graph.microsoft.com/v1.0/auditLogs/signIns' -H 'Authorization: Bearer アクセストークン'
- 以下のような形式で返ってきます。
{ "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#auditLogs/signIns", "@odata.nextLink":"https://graph.microsoft.com/v1.0/auditLogs/signIns?$skiptoken=xxxx", "value":[ { "id":"xxxxx", "createdDateTime":"xxxx","userDisplayName":"xxxx", "userPrincipalName":"xxxx", "userId":"xxxxx", "appId":"xxxxx, xxxxxx } ] }
補足
- サインインログを絞り込むため、いくつかのオプションをご紹介いたします。
- まず、特定の文字列や期間で絞り込む際はfilterオプションを付与した以下のURLにリクエストを投げます。
# ユーザー名が「キーワード」で始まるログのみ。 https://graph.microsoft.com/v1.0/auditLogs/signIns?$filter=startswith(userDisplayName,'キーワード') # 特定期間のログ。 https://graph.microsoft.com/v1.0/auditLogs/signIns?$filter=createdDateTime ge 期間の最初 and createdDateTime lt 期間の最後
- 次に、結果の件数を指定する際はtopオプションを付与した以下のURLにリクエストを投げます。
# 結果の件数を2件に絞る。 https://graph.microsoft.com/v1.0/auditLogs/signIns?$top=2
- その他多数あるため全オプションはこちらをご確認ください。
まとめ
- サインインログの取得や分析は「エラーの調査・知見の蓄積・管理作業の効率化」等に重要だと実感しました。
- 今後もMicrosoft Graphのさまざまなサービスを適宜利用していき、日々の業務改善に努めてまいります。
参考
- https://docs.microsoft.com/ja-jp/graph/overview
- https://docs.microsoft.com/ja-jp/graph/api/signin-list
- https://docs.microsoft.com/ja-jp/azure/active-directory/roles/permissions-reference#application-administrator
- https://docs.microsoft.com/ja-jp/graph/auth-v2-service
- https://docs.microsoft.com/ja-jp/graph/query-parameters
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。