Microsoft Entra IDユーザーの最終サインイン時刻を確認してみました。
最終サインイン時刻の確認にはMicrosoft Entra ID P1以上のライセンスが必要になります。
Azureポータルから確認する
この操作は「グローバル管理者」の権限で実施します。
他の権限も少し試しましたが、この方法では表示されませんでした。
EntraIDのユーザー画面に移動して「ビューの管理」から[最後の対話型サインイン時刻]、[最後の非対話型サインイン時刻]を選択して表示させます。
上記の2項目を追加することでそれぞれのユーザーのサインイン時刻を取得することができます。
なお、P1以上のライセンスがない場合には「ビューの管理」の項目に[最後の対話型サインイン時刻]、[最後の非対話型サインイン時刻]が出てきません。
AzureCLIで確認する
AzureCLIコマンドを利用しても確認することができます。
こちらは [グローバル管理者] 以外にも [レポート閲覧者] [セキュリティ閲覧者] [セキュリティ管理者] [グローバル閲覧者] の権限で取得することができます。
# AzureCLIを利用してGraphAPIを呼び出し
$json = az rest --method GET --url 'https://graph.microsoft.com/v1.0/users?$select=displayname%2CuserPrincipalName%2Csigninactivity' | ConvertFrom-Json
# 取得した値を編集して表示
$json.value | fl displayname, userprincipalname, @{name="lastSignInDateTime"; expression={$_.signInActivity.lastSignInDateTime}}, @{name="lastNonInteractiveSignInDateTime"; expression={$_.signInActivity.lastNonInteractiveSignInDateTime}}
GraphAPIを利用して[displayname]と[userPrincipalName]と[signinactivity]を取得し、その値にさらにフィルタをかけて、必要な情報を出力させています。
ライセンスがない場合の挙動
こちらもライセンスがない場合には以下のような出力が返され、最終サインイン時刻を取得することができません。
ERROR: Forbidden({"error":{"code":"Authentication_RequestFromNonPremiumTenantOrB2CTenant","message":"Neither tenant is B2C or tenant doesn't have premium license"・・・・・・
[参考]100件以上取得したい場合
一度に取得できる件数は100件までとなっています。
100件以上は一度に出力できず、レスポンス内にある[@odata.nextLink]というリンクにアクセスすることで次の100件を出力することができます。
#GraphAPI に対するアクセス トークンを取得
$token = az account get-access-token --resource "https://graph.microsoft.com/" | ConvertFrom-Json
# GraphAPI 呼び出し時に付与する認証ヘッダーを用意
$headers = @{ "Authorization"="Bearer $($token.accessToken)" }
# リクエスト先のURLを定義
$url = 'https://graph.microsoft.com/v1.0/users?$select=displayname%2CuserPrincipalName%2Csigninactivity'
# すべてのユーザー情報を取得(@odata.nextLink が含まれなくなるまで繰り返す)
$users = @()
do {
$res = Invoke-WebRequest -Method Get -Uri $url -Headers $headers
$ret = $res.Content | ConvertFrom-Json
$ret.value | ForEach-Object {
$users += [PSCustomObject]@{
displayname = $_.displayname
userprincipalname = $_.userPrincipalName
lastSignInDateTime = $_.signInActivity.lastSignInDateTime
lastNonInteractiveSignInDateTime = $_.signInActivity.lastNonInteractiveSignInDateTime
}
}
$url = $ret.'@odata.nextLink'
} while ($url -ne $null -and $url.length > 0)
# 取得した情報を表示
$users | fl