Shows how to download sign-in activity log and audit log on Azure AD using key with PowerShell
PowerShell スクリプトで従来のキー (client_secret) を利用して Azure AD のサインイン アクティビティ レポートおよび監査ログを csv 形式で取得する方法を紹介します。
平文のキーによる取得のため、当該スクリプトの運用環境での利用は推奨されません。推奨される方法は証明書を用いたトークン取得です。以下に一連の手順をおまとめしましたので、参考としていただければ幸いです。
以下の手順で、Entra ID 上にアプリケーションを準備します。なお、Azure AD Premium P1 ライセンス以上も必要です。
- Azure ポータルに、全体管理者の権限を持つアカウントでサインインします。
- Microsoft Entra ID のブレードを選択します。
- [アプリの登録] を選択します。
- [+ 新規登録] を選択します。
- 表示名と、アカウントの種類を入力して、[登録] を選択します。
- アプリが作成されたら、ドメイン名とクライアント ID を控えます。
- アプリが作成されたら [API のアクセス許可] を選択します。
- [API のアクセス許可] のブレードで、[+ アクセス許可の追加] を選択します。
- [Microsoft Graph] を選択し[アプリケーションの許可] を選択します。
- AuditLog.Read.All と Directory.Read.All にチェックをつけます。
- [アクセス許可の追加] を選択します。
- [{テナント名} に管理者の同意を与えます] をクリックし [はい] を選択します。
- [証明書とシークレット] のブレードを選択し、[クライアント シークレット] のタブから [+ 新しいクライアント シークレット] を選択します。
以下のような画面でキーが表示されますので、文字列を控えておきます。
続いて、GetSigninAndAuditReportsWithKey.ps1 ファイルを開き、以下の 3 行を確認した結果に合わせて変更します。$client_secret は上記例の値にしていますので、$tenantId と $clientId を適宜変更ください。
$tenantId = "yourtenant.onmicrosoft.com" # or GUID "01234567-89AB-CDEF-0123-456789ABCDEF"
$clientId = "FEDCBA98-7654-3210-FEDC-BA9876543210"
$clientSecret = "M9Q1lk5+fFkrI6Cg9+Tynv1B87JJVCIEju2568+wZW8="
最後に、GetSigninAndAuditReportsWithKey.ps1 を実行します。これによりサインイン アクティビティ レポートと監査ログを csv ファイルとして取得できます。
キーを使用した認証処理では、Azure AD の token エンドポイントに対して Client credentials grant flow でアクセストークンを取得します。
POST https://login.microsoftonline.com/yourtenant.onmicrosoft.com/oauth2/token
client_id: FEDCBA98-7654-3210-FEDC-BA9876543210
client_secret: M9Q1lk5+fFkrI6Cg9+Tynv1B87JJVCIEju2568+wZW8=
grant_type: client_credentials
resource: https://graph.microsoft.com
取得したトークンを Authorization ヘッダーに Bearer トークンとして添えることで Graph API へアクセスしています。
GET https://graph.microsoft.com/beta/auditLogs/signIns HTTP/1.1
Authorization: Bearer eyJ0eXAiOi{省略}3lISmxZIn0.eyJhdWQiOi{省略}joiMS4wIn0.FDlzA1xpic{省略}Nj_6yECdIw
GET https://graph.microsoft.com/beta/auditLogs/directoryAudits HTTP/1.1
Authorization: Bearer eyJ0eXAiOi{省略}3lISmxZIn0.eyJhdWQiOi{省略}joiMS4wIn0.FDlzA1xpic{省略}Nj_6yECdIw
本スクリプトでは、各ログの採取に長時間 (1 時間) を要する場合でも、トークンが失効しないよう、適宜失効が近づいた場合はトークンを再取得するよう構成しています。