다음을 통해 공유


프로비전이 Azure Monitor 로그와 통합되는 방식 이해

프로비전은 Azure Monitor 로그 및 Log Analytics와 통합됩니다. Azure 모니터링을 사용하면 통합 문서(다른 이름: 대시보드) 만들기, 30일이 넘는 프로비전 로그 저장, 사용자 지정 쿼리 및 경고 만들기 등의 작업을 수행할 수 있습니다. 이 문서에서는 프로비전 로그가 Azure Monitor 로그와 통합되는 방법을 설명합니다. 프로비전 로그가 일반적으로 작동하는 방식에 대한 자세한 내용은 프로비전 로그를 참조하세요.

프로비저닝 로그 통합 활성화

Azure Monitor 및 Log Analytics에 아직 익숙하지 않은 경우 다음 리소스를 탐색한 다음 다시 돌아와서 애플리케이션 프로비저닝 로그를 Azure Monitor 로그와 통합하는 방법을 알아봅니다.

Azure Monitor 로그와 프로비전 로그를 통합하려면 다음을 수행합니다.

  1. 최소한 보안 관리자Microsoft Entra 관리 센터에 로그인합니다.

  2. Log Analytics 작업 영역을 만듭니다.

  3. ID>모니터링 및 상태>진단 설정으로 이동합니다.

    진단 설정에 액세스하는 스크린샷

  4. 스트리밍할 로그를 선택하고 Log Analytics 작업 영역으로 보내기 옵션을 선택한 다음 필드를 작성합니다.

    애플리케이션 프로비저닝 로그를 사용하도록 설정하는 스크린샷

  5. ID>모니터링 및 상태>Log Analytics로 이동하여 데이터 쿼리를 시작합니다.

참고 항목

통합을 처음 사용하도록 설정한 후 Log Analytics에 로그가 표시되기까지 다소 시간이 걸릴 수 있습니다. 구독이 microsoft.insights를 사용하도록 등록되지 않았다는 오류가 표시되면 몇 분 후에 다시 확인하세요.

데이터 이해

프로비전에서 로그 뷰어에게 보내는 기본 데이터 스트림은 거의 동일합니다. Azure Monitor 로그는 Microsoft Entra 관리 센터 및 Microsoft Graph API와 거의 동일한 스트림을 가져옵니다. 다음 표에 설명된 대로 로그 필드에는 몇 가지 차이점이 있습니다. Log Analytics는 Microsoft Entra 관리 센터의 로그보다 더 많은 이벤트를 표시할 수 있습니다. 이러한 필드에 대해 자세히 알아보려면 provisioningObjectSummary 나열을 참조하세요.

Azure Monitor 로그 Azure Portal UI Azure API
errorDescription reason resultDescription
상태 resultType resultType
activityDateTime TimeGenerated TimeGenerated

Microsoft Entra 통합 문서

Microsoft Entra ID 통합 문서는 데이터 분석을 위한 유연한 캔버스를 제공합니다. Azure Portal 내에서 풍부한 시각적 보고서를 만들 수도 있습니다. 자세한 내용은 Microsoft Entra 통합 문서를 참조 하세요.

프로비전 분석프로비전 인사이트는 미리 빌드된 통합 문서 중 두 가지입니다. 데이터를 보려면 모든 필터(timeRange, jobID, appName)가 채워져 있어야 합니다. 또한 앱이 프로비저닝되었는지 확인합니다. 그렇지 않으면 로그에 데이터가 없습니다.

애플리케이션 프로비전 통합 문서

애플리케이션 프로비전 대시보드

사용자 지정 쿼리

사용자 지정 쿼리를 만들고 통합 문서에 데이터를 표시할 수 있습니다. 방법을 알아보려면 Azure Monitor에서 로그 쿼리 시작 및 Azure Monitor의 로그 쿼리 시작을 참조하세요.

다음은 애플리케이션 프로비저닝 로그 쿼리를 시작하기 위한 몇 가지 샘플입니다.

원본 시스템에서 사용자의 ID를 기반으로 사용자에 대한 로그를 쿼리합니다.

AADProvisioningLogs
| extend SourceIdentity = parse_json(SourceIdentity)
| where tostring(SourceIdentity.Id) == "49a4974bb-5011-415d-b9b8-78caa7024f9a"

ErrorCode당 개수 요약:

AADProvisioningLogs
| summarize count() by ErrorCode = ResultSignature

작업별 일일 이벤트 수를 요약합니다.

AADProvisioningLogs
| where TimeGenerated > ago(7d)
| summarize count() by Action, bin(TimeGenerated, 1d)

이벤트 및 프로젝트 키 속성 100개를 가져옵니다.

AADProvisioningLogs
| extend SourceIdentity = parse_json(SourceIdentity)
| extend TargetIdentity = parse_json(TargetIdentity)
| extend ServicePrincipal = parse_json(ServicePrincipal)
| where tostring(SourceIdentity.identityType) == "Group"
| project tostring(ServicePrincipal.Id), tostring(ServicePrincipal.Name), ModifiedProperties, JobId, Id, CycleId, ChangeId, Action, SourceIdentity.identityType, SourceIdentity.details, TargetIdentity.identityType, TargetIdentity.details, ProvisioningSteps
| take 100

참조 해결 문제로 인해 생략된 멤버가 있는 그룹을 검색합니다.

AADProvisioningLogs
| where TimeGenerated >= ago(10d)
| where JobId == "Azure2Azure.73f0883f-d67d-4af1-ac8a-45367f8982e0.5ef3be57-f45f-451g-88c4-68a7fda680bb" // Customize by adding a specific app JobId
| extend SourceIdentity = parse_json(SourceIdentity)
| extend ProvisioningSteps = parse_json(ProvisioningSteps)
| where tostring(SourceIdentity.identityType) == "Group"
| where ProvisioningSteps matches regex "UnableToResolveReferenceAttributeValue"
| parse tostring(ProvisioningSteps.[2].description) with "We were unable to assign " userObjectId " as the members of " groupDisplayName "." *
| project groupDisplayName, userObjectId,  JobId
| take 100

애플리케이션별 작업을 요약합니다.

AADProvisioningLogs
| where TimeGenerated > ago(30d)
| where JobId == "Azure2Azure.73f0883f-d67d-4af1-ac8a-45367f8982e0.5ef3be57-f45f-451g-88c4-68a7fda680bb" // Customize by adding a specific app JobId
| extend ProvisioningSteps = parse_json(ProvisioningSteps)
| extend eventName = tostring(ProvisioningSteps.[-1].name)
| summarize count() by eventName, JobId
| order by JobId asc
| take 5

특정 작업의 급증을 식별합니다.

AADProvisioningLogs
| where TimeGenerated > ago(30d)
| where JobId == "scim.73f0883f-d67d-4af1-ac8a-45367f8982e0.5ef3be57-f45f-451g-88c4-68a7fda680bb" // Customize by adding a specific app JobId
| extend ProvisioningSteps = parse_json(ProvisioningSteps)
| extend eventName = tostring(ProvisioningSteps.[-1].name)
| summarize count() by eventName, bin(TimeGenerated, 1d)
| render timechart

사용자 지정 경고

Azure Monitor를 사용하면 프로비전과 관련된 주요 이벤트에 대한 알림을 받을 수 있도록 사용자 지정 경고를 구성할 수 있습니다. 예를 들어, 오류 급증, 사용 불가 급증 또는 삭제 급증에 대한 경고를 받고자 할 수 있습니다. 프로비저닝에 결함이 있어 문제가 발생하면 경고를 받고 싶을 수도 있습니다.

경고에 대한 자세한 내용은 Azure Monitor 로그 경고를 참조하세요. 다양한 옵션과 구성이 있으므로 전체 설명서를 검토하세요. 하지만 개략적으로 경고를 만드는 방법은 다음과 같습니다.

  1. Log Analytics에서 + 새 경고 규칙선택합니다.
  2. 조건 탭에서 결과 보기를 선택하고 로그 링크에서 쿼리를 편집합니다.
  3. 경고할 쿼리를 입력하고, 경고를 만드는 데 필요한 필드를 완료합니다.

오류가 급증할 때 경고를 만들려면 다음을 수행합니다.

AADProvisioningLogs
| where JobId == "string" // Customize by adding a specific app JobId
| where ResultType == "Failure"

프로비전 서비스 실행을 중지하는 문제가 있을 수 있습니다. 다음 쿼리를 사용하여 지정된 시간 간격 동안 프로비저닝 이벤트가 없는 경우를 검색합니다.

AADProvisioningLogs
| take 1

비활성화 또는 삭제가 급증할 때 경고를 만들려면 다음을 따라 진행하세요.

AADProvisioningLogs
| where Action in ("Disable", "Delete")

커뮤니티 기여

애플리케이션 프로비전 쿼리 및 대시보드에 대한 오픈 소스 및 커뮤니티 기반 접근 방식을 사용하고 있습니다. 다른 사용자에게 유용하다고 생각되는 쿼리, 경고 또는 통합 문서를 작성한 후 AzureMonitorCommunity GitHub 리포지토리에 게시합니다. 링크가 포함된 이메일을 보내주세요. 쿼리와 대시보드를 검토하고 서비스에 게시하여 다른 사용자도 혜택을 받습니다. provisioningfeedback@microsoft.com로 마이그레이션하는 방법을 보여 줍니다.

다음 단계