Azure Monitor의 권한 관리에 대한 보관 로그 및 보고
Microsoft Entra ID는 감사 로그에 최대 30일 동안 감사 이벤트를 저장합니다. 그러나 감사 데이터를 Azure Storage 계정으로 라우팅하거나 Azure Monitor를 사용하면 Microsoft Entra ID에서 보고 데이터를 얼마 동안 저장하나요?에 설명된 기본 보존 기간보다 더 오랫동안 보관할 수 있습니다. 그러면 이 데이터에 대한 보고서와 사용자 지정 쿼리 및 통합 문서를 사용할 수 있습니다.
Azure Monitor를 사용하도록 Microsoft Entra ID 구성
팁
이 문서의 단계는 시작하는 포털에 따라 약간 다를 수도 있습니다.
Azure Monitor 통합 문서를 사용하기 전에 감사 로그 복사본을 Azure Monitor로 보내도록 Microsoft Entra ID를 구성해야 합니다.
Microsoft Entra 감사 로그를 보관하려면 Azure 구독에 Azure Monitor가 있어야 합니다. Azure Monitor의 Microsoft Entra 활동 로그에서 Azure Monitor 사용에 대한 필수 조건과 예상 비용에 대해 자세히 알아볼 수 있습니다.
최소한 보안 관리자로 Microsoft Entra 관리 센터에 로그인합니다. Azure Monitor 작업 영역을 포함하는 리소스 그룹에 액세스할 수 있는지 확인합니다.
ID>모니터링 및 상태>진단 설정으로 이동합니다.
감사 로그를 해당 작업 영역으로 보내기 위한 설정이 이미 있는지 확인합니다.
설정이 아직 없는 경우 진단 설정 추가를 선택합니다. Microsoft Entra 로그를 Azure Monitor 로그와 통합의 지침을 사용하여 Microsoft Entra 감사 로그를 Azure Monitor 작업 영역으로 보냅니다.
로그가 Azure Monitor로 전송된 후 Log Analytics 작업 영역을 선택하고 Microsoft Entra 감사 로그가 포함된 작업 영역을 선택합니다.
사용량 및 예상 비용을 선택하고 데이터 보존을 선택합니다. 감사 요구 사항을 충족할 수 있도록 데이터를 유지할 기간(일)으로 슬라이더를 변경합니다.
나중에 작업 영역에 유지되는 날짜 범위를 확인하려면 보관된 로그 날짜 범위 통합 문서를 사용하면 됩니다.
ID>모니터링 및 상태>통합 문서로 이동합니다.
Microsoft Entra 문제 해결 섹션을 확장하고 보관된 로그 날짜 범위를 선택합니다.
액세스 패키지에 대한 이벤트 보기
액세스 패키지에 대한 이벤트를 보려면 기본 Azure Monitor 작업 영역에 대한 액세스 권한(정보는 Azure Monitor에서 로그 데이터 및 작업 영역에 대한 액세스 관리 참조)과 다음 역할 중 하나를 보유하고 있어야 합니다.
- 전역 관리자
- 보안 관리자
- 보안 읽기 권한자
- 보고서 읽기 권한자
- 애플리케이션 관리자
이벤트를 보려면 다음 절차를 따릅니다.
Microsoft Entra 관리 센터에서 ID를 선택한 다음 통합 문서를 선택합니다. 구독이 하나만 있는 경우 3단계로 이동 합니다.
구독이 여러 개 있는 경우 작업 영역이 포함된 구독을 선택합니다.
액세스 패키지 작업이라는 통합 문서를 선택합니다.
해당 통합 문서에서 시간 범위를 선택(확실하지 않은 경우 모두로 변경)하고 해당 시간 범위 중에 작업이 포함된 모든 액세스 패키지의 드롭다운 목록에서 액세스 패키지 ID를 선택합니다. 선택한 시간 범위 동안 발생한 액세스 패키지와 관련된 이벤트가 표시됩니다.
각 행에는 시간, 액세스 패키지 ID, 작업 이름, 개체 ID, UPN 및 작업을 시작한 사용자의 표시 이름이 포함됩니다. 자세한 내용은 JSON에 포함되어 있습니다.
전역 관리자가 사용자를 애플리케이션 역할에 직접 할당하는 것과 같이 액세스 패키지 할당으로 인해 수행되지 않은 애플리케이션에 대한 애플리케이션 역할 할당이 변경되었는지 확인하려면 애플리케이션 역할 할당 작업이라는 통합 문서를 선택할 수 있습니다.
Microsoft Entra 관리 센터를 사용하여 사용자 지정 Azure Monitor 쿼리 만들기
권한 관리 이벤트를 포함하여 Microsoft Entra 감사 이벤트에 대한 쿼리를 직접 만들 수 있습니다.
Microsoft Entra 관리 센터 ID에서 왼쪽 탐색 메뉴 모니터링 섹션의 로그를 선택하여 새 쿼리 페이지를 만듭니다.
작업 영역이 쿼리 페이지의 왼쪽 위에 표시되어야 합니다. Azure Monitor 작업 영역이 여러 개 있고 Microsoft Entra 감사 이벤트를 저장하는 데 사용하는 작업 영역이 표시되지 않는 경우 범위 선택을 선택합니다. 그런 다음 올바른 구독 및 작업 영역을 선택합니다.
다음으로 쿼리 텍스트 영역에서 "검색 *" 문자열을 삭제하고 다음 쿼리로 바꿉니다.
AuditLogs | where Category == "EntitlementManagement"
그런 다음, 실행을 선택합니다.
테이블에는 기본적으로 지난 1시간 동안의 권한 관리에 대한 감사 로그 이벤트가 표시됩니다. "시간 범위" 설정을 변경하여 이전 이벤트를 볼 수 있습니다. 그러나 이 설정을 변경하면 Microsoft Entra ID가 Azure Monitor에 이벤트를 보내도록 구성된 후에 발생한 이벤트만 표시됩니다.
Azure Monitor에 유지되는 최고/최신 감사 이벤트를 알아보려면 다음 쿼리를 사용합니다.
AuditLogs | where TimeGenerated > ago(3653d) | summarize OldestAuditEvent=min(TimeGenerated), NewestAuditEvent=max(TimeGenerated) by Type
Azure Monitor의 감사 이벤트용으로 저장되는 열에 대한 자세한 내용은 Azure Monitor에서 Microsoft Entra 감사 로그 스키마 해석을 참조하세요.
Azure PowerShell을 이용해 사용자 지정 Azure Monitor 쿼리 만들기
Azure Monitor에 로그를 보내도록 Microsoft Entra ID를 구성한 후 PowerShell을 통해 로그에 액세스할 수 있습니다. 그런 다음 테넌트의 전역 관리자가 아니어도 스크립트 또는 PowerShell 명령줄에서 쿼리를 보냅니다.
사용자 또는 서비스 주체에게 올바른 역할이 할당되어 있는지 확인
Microsoft Entra ID에 인증하는 사용자 또는 서비스 주체가 Log Analytics 작업 영역에서 적절한 Azure 역할에 있는지 확인합니다. 역할 옵션은 Log Analytics 독자 또는 Log Analytics 참가자 중 하나입니다. 이러한 역할 중 한 가지를 이미 맡고 있는 경우 하나의 Azure 구독을 사용하여 Log Analytics ID 검색으로 건너뜁니다.
역할 할당을 설정하고 쿼리를 만들려면 다음 단계를 수행합니다.
Microsoft Entra 관리 센터에서 Log Analytics 작업 영역을 찾습니다.
액세스 제어(IAM)를 선택합니다.
추가를 선택하여 역할 할당을 추가합니다.
Azure PowerShell 모듈 설치
적절한 역할 할당을 보유하고 있으면 PowerShell을 시작하고 다음을 입력하여 Azure PowerShell 모듈을 설치(아직 없는 경우)합니다.
install-module -Name az -allowClobber -Scope CurrentUser
이제 Microsoft Entra ID에 인증하고 쿼리 중인 Log Analytics 작업 영역의 ID를 쿼리할 준비가 되었습니다.
하나의 Azure 구독을 사용하여 Log Analytics ID 검색
단일 Azure 구독과 단일 Log Analytics 작업 영역만 있는 경우 다음을 입력하여 Microsoft Entra ID에 인증하고, 해당 구독에 연결하고, 해당 작업 영역을 검색합니다.
Connect-AzAccount
$wks = Get-AzOperationalInsightsWorkspace
여러 Azure 구독을 사용하여 Log Analytics ID 검색
Get-AzOperationalInsightsWorkspace는 한 번에 하나의 구독에서 작동합니다. 따라서 Azure 구독이 여러 개인 경우 Microsoft Entra 로그가 있는 Log Analytics 작업 영역이 있는 구독에 연결해야 합니다.
다음 cmdlet은 구독 목록을 표시하고 Log Analytics 작업 영역이 있는 구독의 ID를 찾습니다.
Connect-AzAccount
$subs = Get-AzSubscription
$subs | ft
Connect-AzAccount –Subscription $subs[0].id
같은 명령을 사용하여 해당 구독에 대한 PowerShell 세션을 다시 인증하고 연결할 수 있습니다. 비대화형 기능을 포함하여 PowerShell에서 Azure를 인증하는 방법에 대해 자세히 알아보려면 Azure PowerShell을 사용하여 로그인을 참조하세요.
해당 구독에 Log Analytics 작업 영역이 여러 개 있는 경우 cmdlet Get-AzOperationalInsightsWorkspace에서 작업 영역의 목록을 반환합니다. 그런 다음 Microsoft Entra 로그가 있는 항목을 찾을 수 있습니다. 이 cmdlet이 반환하는 CustomerId
필드는 Log Analytics 작업 영역 개요의 Microsoft Entra 관리 센터에 표시되는 “작업 영역 ID”의 값과 동일합니다.
$wks = Get-AzOperationalInsightsWorkspace
$wks | ft CustomerId, Name
Log Analytics 작업 영역에 쿼리 보내기
마지막으로, 작업 영역을 확인한 후 Invoke-AzOperationalInsightsQuery를 사용하여 해당 작업 영역에 Kusto 쿼리를 보낼 수 있습니다. 이러한 쿼리는 Kusto 쿼리 언어로 작성됩니다.
예를 들면, 다음과 같은 쿼리를 보내는 데 PowerShell cmdlet을 사용하여 Log Analytics 작업 영역에서 감사 이벤트 레코드의 날짜 범위를 검색할 수 있습니다.
$aQuery = "AuditLogs | where TimeGenerated > ago(3653d) | summarize OldestAuditEvent=min(TimeGenerated), NewestAuditEvent=max(TimeGenerated) by Type"
$aResponse = Invoke-AzOperationalInsightsQuery -WorkspaceId $wks[0].CustomerId -Query $aQuery
$aResponse.Results |ft
또한 다음과 같은 쿼리를 사용해 권한 관리 이벤트도 검색할 수 있습니다.
$bQuery = 'AuditLogs | where Category == "EntitlementManagement"'
$bResponse = Invoke-AzOperationalInsightsQuery -WorkspaceId $wks[0].CustomerId -Query $Query
$bResponse.Results |ft
쿼리 필터 사용
특정 시간 범위에 범위 쿼리를 위하여 TimeGenerated
필드를 포함할 수 있습니다. 예를 들어, 지난 90일 동안 생성되거나 업데이트되는 권한 관리 액세스 패키지 할당 정책에 대한 감사 로그 이벤트를 검색하려면 이 필드와 범주 및 작업 유형을 포함하는 쿼리를 제공할 수 있습니다.
AuditLogs |
where TimeGenerated > ago(90d) and Category == "EntitlementManagement" and Result == "success" and (AADOperationType == "CreateEntitlementGrantPolicy" or AADOperationType == "UpdateEntitlementGrantPolicy") |
project ActivityDateTime,OperationName, InitiatedBy, AdditionalDetails, TargetResources
권한 관리와 같은 일부 서비스의 감사 이벤트의 경우 변경되는 리소스의 영향을 받는 속성을 확장하고 필터링할 수도 있습니다. 예를 들어 사용자가 할당을 추가하도록 승인할 필요가 없는 액세스 패키지 할당 정책을 만들거나 업데이트하는 감사 로그 레코드만 볼 수 있습니다.
AuditLogs |
where TimeGenerated > ago(90d) and Category == "EntitlementManagement" and Result == "success" and (AADOperationType == "CreateEntitlementGrantPolicy" or AADOperationType == "UpdateEntitlementGrantPolicy") |
mv-expand TargetResources |
where TargetResources.type == "AccessPackageAssignmentPolicy" |
project ActivityDateTime,OperationName,InitiatedBy,PolicyId=TargetResources.id,PolicyDisplayName=TargetResources.displayName,MP1=TargetResources.modifiedProperties |
mv-expand MP1 |
where (MP1.displayName == "IsApprovalRequiredForAdd" and MP1.newValue == "\"False\"") |
order by ActivityDateTime desc