ค้นหาเว็บไซต์

การตรวจสอบบันทึกการลงชื่อเข้าใช้ของผู้ใช้ใน Azure AD (Microsoft 365)


ในบทความนี้ เราจะแสดงวิธีรับวันที่เข้าสู่ระบบล่าสุดและกิจกรรมการลงชื่อเข้าใช้ของผู้ใช้ Azure Active Directory ของคุณ ส่งออกและวิเคราะห์การลงชื่อเข้าใช้ Azure และบันทึกการตรวจสอบในผู้เช่า Microsoft ของคุณโดยใช้ PowerShell (ด้วยโมดูล AzureADPreview หรือ Microsoft Graph API)

วิธีที่ง่ายที่สุดในการดูบันทึกกิจกรรมของผู้ใช้คือการใช้พอร์ทัล Azure เปิด https://portal.azure.com -> Azure AD -> ผู้ใช้ -> เลือกผู้ใช้ -> บันทึกการลงชื่อเข้าใช้ ประวัติการเข้าสู่ระบบของผู้ใช้แสดงในตารางต่อไปนี้

คุณสามารถรับวันที่เข้าสู่ระบบครั้งล่าสุดของผู้ใช้ ระบบปฏิบัติการบนอุปกรณ์ของผู้ใช้ ตำแหน่ง user-agent เป็นต้น คุณสามารถกำหนดค่าตัวกรองตามพารามิเตอร์ต่างๆ เพิ่ม/ลบคอลัมน์ หรือส่งออกข้อมูลเป็นไฟล์ CSV

อย่างไรก็ตาม หากคุณต้องการรับกิจกรรมการลงชื่อเข้าใช้สำหรับผู้ใช้หลายคนหรือทั้งหมด คุณจะต้องใช้ PowerShell มีสองวิธีในการเข้าถึงบันทึกการลงชื่อเข้าใช้ของผู้ใช้ใน Azure

วิธีรับประวัติการเข้าสู่ระบบของผู้ใช้ใน Azure AD โดยใช้ Microsoft Graph API

มาลองรับบันทึกการลงชื่อเข้าใช้ของผู้ใช้โดยใช้ Microsoft Graph API เชื่อมต่อกับผู้เช่า Azure ของคุณโดยใช้ Microsoft Graph API

ให้สิทธิ์ API ต่อไปนี้กับแอปพลิเคชัน Azure ที่คุณใช้เชื่อมต่อผ่าน Microsoft Graph API: AuditLog.Read.All และ Directory.Read.All

$ApplicationID = "4434ad23-b212-3212-3aad-54321de3bbc"
$TenatDomainName = "26216542-aaaa-bbbb-2212-65566aa6c32"
$AccessSecret="12-32Bh654321d3-seLa23l33p.hhj33MM21aaf"
$Body = @{
Grant_Type    = "client_credentials"
Scope         = "https://graph.microsoft.com/.default"
client_Id     = $ApplicationID
Client_Secret = $AccessSecret
}
$ConnectGraph = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenatDomainName/oauth2/v2.0/token" -Method POST -Body $Body
$token = $ConnectGraph.access_token

หลังจากได้รับโทเค็น คุณสามารถเชื่อมต่อกับ REST API เพื่อรับข้อมูลเกี่ยวกับกิจกรรมการลงชื่อเข้าใช้ของผู้ใช้:

$GraphSignInLogs = "https://graph.microsoft.com/v1.0/auditLogs/signIns"
(Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri $GraphSignInLogs  -Method Get).value

ตรวจสอบให้แน่ใจว่าคุณสามารถรับข้อมูลเกี่ยวกับเหตุการณ์การตรวจสอบผู้ใช้ใน Azure:

โปรดทราบว่า Microsoft Graph API สามารถส่งคืนวัตถุได้สูงสุด 1,000 รายการต่อครั้ง คุณสามารถใช้การเพจเพื่อแบ่งหน้าผลลัพธ์และประมวลผลหลายออบเจกต์ในลูปโดยใช้

@odata.nextLink

คุณสามารถใช้ Azure Graph Explorer (https://developer.microsoft.com/en-us/graph/graph-explorer) เพื่อเลือกชื่อคอลัมน์ (แอตทริบิวต์ของวัตถุ) ที่คุณต้องการดูในรายงานประวัติการเข้าสู่ระบบของผู้ใช้ ตัวอย่างเช่น ฉันต้องการดูข้อมูลเกี่ยวกับผู้ใช้ ระบบปฏิบัติการ แอป Azure/Microsoft 365 ที่ใช้สำหรับการเชื่อมต่อและตำแหน่งในรายงาน (คอลัมน์เหล่านี้คือ:

userDisplayName

,

userPrincipalName

,

appDisplayName

,

location

,

ipAddress

,

clientAppUsed

,

deviceDetail

,

createdDateTime

).

ในตัวอย่างนี้ ฉันต้องการรับรายงานกิจกรรมของผู้ใช้ Azure ในช่วง 90 วันที่ผ่านมา:

$SetDate = (Get-Date).AddDays(-90)
$SetDate = Get-Date($SetDate) -format yyyy-MM-dd
$GraphSignInLogs  = "https://graph.microsoft.com/v1.0/auditLogs/signIns"
$result = (Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri $GraphSignInLogs  -Method Get).value | Select-Object userDisplayName, userPrincipalName, appDisplayName, ipAddress, clientAppUsed, deviceDetail, location,createdDateTime | Where-Object {$_.createdDateTime -gt $SetDate }
$alluserhistory = @()
foreach ($resitem in $result){
$userhistory = New-Object PSObject -Property @{
User=$resitem.userDisplayName
UPN=$resitem.userPrincipalName
AzureAppUsed =$resitem.appDisplayName
UserApp =$resitem.clientAppUsed
IP=$resitem.ipAddress
Date=$resitem.createdDateTime
OS=($resitem.deviceDetail).operatingSystem
browser=($resitem.deviceDetail).browser
City=($resitem.location).city
Country=($resitem.location).countryOrRegion
}
$alluserhistory += $userhistory
}

หากต้องการส่งออกผลลัพธ์เป็นไฟล์ CSV ให้เรียกใช้คำสั่งด้านล่าง:

$alluserhistory| Export-Csv "C:\PS\azure_signin_logs.csv" -NoTypeInformation

ไฟล์ CSV มีข้อมูลเกี่ยวกับกิจกรรมของผู้ใช้ทั้งหมด: อุปกรณ์และตำแหน่งใดที่พวกเขาเข้าสู่ระบบจากแอป Microsoft ที่พวกเขาใช้ คุณสามารถเพิ่มช่องอื่นๆ ได้หากจำเป็น

ในการรับวันที่เข้าสู่ระบบครั้งล่าสุดสำหรับผู้ใช้ AAD ทุกคนในรายการ ให้รันคำสั่งนี้:

$alluserhistory| Group-Object UPN |%{ $_.Group | Select UPN,Date -First 1}

คุณสามารถค้นหาผู้ใช้ Azure ที่ไม่ได้ใช้งานทั้งหมดในช่วงเวลาที่กำหนด ในการทำเช่นนั้น รับรายชื่อผู้ใช้ UserPrincipalNames (UPN) ทั้งหมดใน Azure โดยใช้ Graph API และเปรียบเทียบกับรายชื่อผู้ใช้ที่รับรองความถูกต้องใน Azure ในช่วง 90 วันล่าสุดที่คุณสร้างขึ้นก่อนหน้านี้

$GrapUserUrl = 'https://graph.microsoft.com/v1.0/users'
$allusers=(Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri $GrapUserUrl -Method Get).value
$allusers = $allusers | Select-Object @{Name="UPN"; Expression = {$_.userprincipalname.ToLower()}}
$activeusers = $alluserhistory|select UPN -Unique

จากนั้นคุณต้องเปรียบเทียบทั้งสองรายการ ดังนั้น การใช้สคริปต์ PowerShell คุณสามารถค้นหาผู้ใช้ที่ไม่ได้ใช้งานและลบสิทธิ์การใช้งาน Microsoft 365/Azure AD ที่ไม่ได้ใช้

ส่งออกบันทึกการลงชื่อเข้าใช้ของผู้ใช้ Azure AD โดยใช้ Get-AzureADAuditSignInLogs Cmdlet

คุณสามารถใช้ cmdlet รับ AzureADAuditSignInLogs จากโมดูล AzureADPreview PowerShell เพื่อรับและส่งออกบันทึกการตรวจสอบการลงชื่อเข้าใช้ Azure AD/ Microsoft 365 ด้วยเหตุผลบางอย่าง ไม่มี cmdlet ดังกล่าวใน AzureAD ล่าสุดสำหรับโมดูล PowerShell (เห็นได้ชัดว่า Microsoft คิดว่า Graph API เพียงพอสำหรับเรา)

Install the AzureADPreview module to your computer:
Install-Module AzureADPreview -AllowClobber

เชื่อมต่อกับผู้เช่า Azure ของคุณโดยใช้ AzureADPreview:

AzureADPreview\Connect-AzureAD

คำสั่งต่อไปนี้จะส่งคืนข้อมูลเกี่ยวกับเหตุการณ์การลงชื่อเข้าใช้ของผู้ใช้ 10 ครั้งล่าสุดไปยังแอป Azure และ Microsoft 365:

Get-AzureADAuditSignInLogs -Filter "UserPrincipalName eq 'maxbak@a-d.onmicrosoft.com'" -Top 10 | select CreatedDateTime, UserPrincipalName, IsInteractive, AppDisplayName, IpAddress, TokenIssuerType, @{Name = 'DeviceOS'; Expression = {$_.DeviceDetail.OperatingSystem}}|ft

คุณสามารถแสดงสถิติเกี่ยวกับการเข้าสู่ระบบของผู้ใช้ไปยัง Azure ในช่วง 3 วันที่ผ่านมา และส่งออกเป็นไฟล์ CSV:

$SetDate = (Get-Date).AddDays(-3);
$SetDate = Get-Date($SetDate) -format yyyy-MM-dd
$array = Get-AzureADAuditSignInLogs -Filter "createdDateTime gt $SetDate" | select userDisplayName, userPrincipalName, appDisplayName, ipAddress, clientAppUsed, @{Name = 'DeviceOS'; Expression = {$_.DeviceDetail.OperatingSystem}},@{Name = 'Location'; Expression = {$_.Location.City}}
$array | Export-Csv "C:\PS\AzureUserSigninLogs.csv" -NoTypeInformation

คุณสามารถรวบรวมข้อมูลประวัติการเข้าสู่ระบบของผู้ใช้สำหรับโดเมน Active Directory ภายในองค์กรได้จากบันทึกการรักษาความปลอดภัยของตัวควบคุมโดเมน

บทความที่เกี่ยวข้อง