Azure ADの監査ログを取得 ~Microsoft Graph API編~

★★★ Live配信告知 ★★★

第4回のPS Live配信は、昨年のCloudNative Days Tokyo 2020で、OSSのAPIGatewayでおなじみKongが開発する、サービスメッシュのKumaについて発表を行った槌野が、再びKumaについて語ります!
【2021/6/25(金) 17:00〜17:30】Kumaでメッシュなマイクロサービス リターンズ

こんにちは、サイオステクノロジーの小川です。

前回はAzure ポータルからダウンロードして監査ログを取得する方法について紹介しました。

詳細は以下の記事をご覧ください。

Azure ADの監査ログを取得 ~ポータルダウンロード編~

今回は、Azure ADの監査ログをMicrosoft Graphを利用して、監査ログを自動取得する方法を紹介します。

監査ログとは

Azure AD 内のさまざまな機能によって行われたすべての変更についてログによる追跡可能性を提供します。 監査ログの例として、ユーザー、アプリ、グループ、ロール、ポリシーの追加や削除など、Azure AD 内のあらゆるリソースに加えられた変更があります。

Microsoft Graph APIを利用し、ログを取得する

Microsoft Graph APIを利用する方法ではスクリプトですべての処理を行うので、ポータルにログインするなどの操作が不要になります。タスクスケジューラ等で、定期的に実行することで、監査ログをローカルに保持することが可能になります。

アプリケーションとの接続用証明書とNugetのモジュール取得のスクリプトこちらの内容を参照させていただきました。

1. Azure ADに接続する証明書を作成する

以下スクリプトを適当なフォルダに配置し、実行します。今回はC:\AuditLog配下で実行することとします。
本設定では証明書の有効期限は10年で作成しています。

2. 処理に必要なライブラリをNugetで取得するスクリプトを準備し、実行する

証明書を用いたトークン取得処理はライブラリを用いて行います。処理に必要なライブラリはNugetで取得します。
以下スクリプトを C:\AuditLog 配下に配置し、実行します。

3. Azureにアクセスするためのアプリケーションを作成する

1. Azureポータルにグローバル管理者権限を持つアカウントでサインインします。
2. アプリの登録を選択し、アプリケーションを新規作成します。
3. アプリケーションの任意の表示名とアカウントの種類「この組織ディレクトリのみに含まれるアカウント (xxx のみ – シングル テナント)」を選択し、登録します。(クライアントIDとテナントIDを控えます。)
4. 作成したアプリに移動し、「APIのアクセス許可」を選択します。
5. APIのアクセス許可の画面で「+アクセス許可の追加」を選択し、「Microsoft Graph」の「アプリケーションの許可」を選択します。
6. 「AuditLog.Read.All」と「Directory.Read.All」を有効にします。
7. 「xxxに管理者の同意を与えます」をクリックし、「はい」を選択します。

4. アプリケーション認証に利用する証明書を登録する

1. 3で作成したアプリケーションを選択し、「証明書とシークレット」に移動します。
2. 「証明書のアップロード」を選択し、1で作成した「SelfSignedCert.cer」をアプロードします。
3. アップロード証明書の拇印を控えておく。

5. Azure ADの監査ログを取得するスクリプトを作成する

1. 以下スクリプトを C:\AuditLog 配下に配置し、ファイルを開きます。
2. tenantID, clientID, thumprintに3で控えたクライアントID・テナントIDと4で控えた拇印の値で置き換えます。
3. ログの取得期間と取得するログの種別を指定します。以下では7日前からのログでUserに関するログを取得する設定にしています。

※監査ログすべてを取得する場合は、(targetResources・・・)の項目の設定をしないことで、指定した日付の監査ログを取得することができます。

    • 取得開始日時指定:$startdate
    • 取得終了日時指定:$enddate
    • 取得ログファイル表示日時:$outputdate
    • 取得ログフィルター:$url の $filter=(activityDateTime ge $startdate) and (activityDateTime le $enddate) and (targetResources/any(t:t/type eq ‘User’))

※その他の条件で取得するログをフィルタする場合は、derectoryAuditのフィルタオプション一覧をご覧ください。フィルタ条件に指定できる設定が記載されております。

4. 3の設定が完了したらファイルを保存し、powershellで実行します。

取得したログを確認してみる

上記のスクリプトで取得したCSVファイルを確認してみましょう。

以下はID同期で1アカウントを追加した際の監査ログになります。

operationTypeとUserPrincipalNameはすべての行に明示的に出力するようにスクリプトを記載しているので、どの項目でどのアカウントに関する記載なのかが一目瞭然です!

テキストベースで少し見づらいですが、Excleのシート等で確認するとより見やすいです。

各属性の項目でoldValueとnewValueで更新されている箇所を確認することができるので、いつどの値が更新したのかを長期で保持することが可能になります。





ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!


ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

Be the first to comment

Leave a Reply

Your email address will not be published.


*


11 − 5 =