EntraIDユーザーの最終サインイン時刻を確認してみた

Azure EntraID

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]を取得し、その値にさらにフィルタをかけて、必要な情報を出力させています。

AzureCLIで最終サインイン時刻を表示

ライセンスがない場合の挙動

こちらもライセンスがない場合には以下のような出力が返され、最終サインイン時刻を取得することができません。

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
タイトルとURLをコピーしました