Azure RBAC 변경 사항에 대한 활동 로그 보기

감사 또는 문제 해결 등의 목적으로 Azure RBAC(Azure 역할 기반 액세스 제어) 변경 사항에 대한 정보가 필요한 경우가 있습니다. 구독 내에서 역할 할당 또는 역할 정의가 변경될 때마다 변경 사항이 Azure 활동 로그에 기록됩니다. 활동 로그를 보면 지난 90일 동안의 Azure RBAC 변경 사항을 모두 확인할 수 있습니다.

기록되는 작업

다음은 활동 로그에 기록되는 Azure RBAC 관련 작업입니다.

  • 역할 할당 만들기
  • 역할 할당 삭제
  • 사용자 지정 역할 정의 만들기 또는 업데이트
  • 사용자 지정 역할 정의 삭제

Azure Portal

가장 손쉽게 시작할 수 있는 방법은 Azure Portal을 사용하여 활동 로그를 보는 것입니다. 다음 스크린샷은 활동 로그의 역할 할당 작업 예를 보여 줍니다. 로그를 CSV 파일로 다운로드하는 옵션도 포함되어 있습니다.

Activity logs using the portal - screenshot

자세한 내용을 보려면 항목을 클릭하여 요약 창을 엽니다. 자세한 로그를 보려면 JSON 탭을 클릭합니다.

Activity logs using the portal with summary pane open - screenshot

포털에서 활동 로그에는 몇 가지 필터가 있습니다. Azure RBAC 관련 필터는 다음과 같습니다.

필터
이벤트 범주
  • 관리
연산
  • 역할 할당 만들기
  • 역할 할당 삭제
  • 사용자 지정 역할 정의 만들기 또는 업데이트
  • 사용자 지정 역할 정의 삭제

활동 로그에 대한 자세한 내용은 Azure 활동 로그를 참조하세요.

로그 항목 해석

JSON 탭, Azure PowerShell, Azure CLI의 로그 출력에는 많은 정보가 포함될 수 있습니다. 로그 항목을 해석하려고 할 때 찾아볼 수 있는 몇 가지 주요 속성은 다음과 같습니다. Azure PowerShell 또는 Azure CLI를 사용하여 로그 출력을 필터링하는 방법은 다음 섹션을 참조하세요.

속성 예제 값 설명
authorization:action Microsoft.Authorization/roleAssignments/write 역할 할당 만들기
Microsoft.Authorization/roleAssignments/delete 역할 할당 삭제
Microsoft.Authorization/roleDefinitions/write 역할 정의 만들기 또는 업데이트
Microsoft.Authorization/roleDefinitions/delete 역할 정의 삭제
authorization:scope /subscriptions/{subscriptionId}
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}
작업 범위
caller admin@example.com
{objectId}
작업을 시작한 사람
eventTimestamp 2021-03-01T22:07:41.126243Z 작업이 발생한 시간
status:value Started
성공
실패
작업의 상태

Azure PowerShell

Azure PowerShell을 사용하여 활동 로그를 보려면 Get-AzLog 명령을 사용합니다.

이 명령은 지난 7일 동안 구독에서 발생한 모든 역할 할당 변경 내용을 나열합니다.

Get-AzLog -StartTime (Get-Date).AddDays(-7) | Where-Object {$_.Authorization.Action -like 'Microsoft.Authorization/roleAssignments/*'}

이 명령은 지난 7일 동안 리소스 그룹에서 발생한 모든 역할 정의 변경 내용을 나열합니다.

Get-AzLog -ResourceGroupName pharma-sales -StartTime (Get-Date).AddDays(-7) | Where-Object {$_.Authorization.Action -like 'Microsoft.Authorization/roleDefinitions/*'}

로그 출력 필터링

로그 출력에는 많은 정보가 포함될 수 있습니다. 다음 명령은 지난 7일 동안 구독에서 발생한 모든 역할 할당 및 역할 정의 변경 사항을 나열하고 출력을 필터링합니다.

Get-AzLog -StartTime (Get-Date).AddDays(-7) | Where-Object {$_.Authorization.Action -like 'Microsoft.Authorization/role*'} | Format-List Caller,EventTimestamp,{$_.Authorization.Action},Properties

다음은 역할 할당을 만들 때 필터링된 로그 출력의 예를 보여 줍니다.

Caller                  : admin@example.com
EventTimestamp          : 3/1/2021 10:07:42 PM
$_.Authorization.Action : Microsoft.Authorization/roleAssignments/write
Properties              :
                          statusCode     : Created
                          serviceRequestId: {serviceRequestId}
                          eventCategory  : Administrative
                          entity         : /subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}
                          message        : Microsoft.Authorization/roleAssignments/write
                          hierarchy      : {tenantId}/{subscriptionId}

Caller                  : admin@example.com
EventTimestamp          : 3/1/2021 10:07:41 PM
$_.Authorization.Action : Microsoft.Authorization/roleAssignments/write
Properties              :
                          requestbody    : {"Id":"{roleAssignmentId}","Properties":{"PrincipalId":"{principalId}","PrincipalType":"User","RoleDefinitionId":"/providers/Microsoft.Authorization/roleDefinitions/fa23ad8b-c56e-40d8-ac0c-ce449e1d2c64","Scope":"/subscriptions/
                          {subscriptionId}/resourceGroups/example-group"}}
                          eventCategory  : Administrative
                          entity         : /subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}
                          message        : Microsoft.Authorization/roleAssignments/write
                          hierarchy      : {tenantId}/{subscriptionId}

서비스 주체를 사용하여 역할 할당을 만드는 경우 Caller 속성은 서비스 주체 개체 ID입니다. Get-AzADServicePrincipal을 사용하여 서비스 주체에 대한 정보를 가져올 수 있습니다.

Caller                  : {objectId}
EventTimestamp          : 3/1/2021 9:43:08 PM
$_.Authorization.Action : Microsoft.Authorization/roleAssignments/write
Properties              : 
                          statusCode     : Created
                          serviceRequestId: {serviceRequestId}
                          eventCategory  : Administrative

Azure CLI

Azure CLI를 사용하여 활동 로그를 보려면 az monitor activity-log list 명령을 사용합니다.

다음 명령은 3월 1일부터 7일 동안의 기간에 발생한 리소스 그룹의 활동 로그를 나열합니다.

az monitor activity-log list --resource-group example-group --start-time 2021-03-01 --offset 7d

다음 명령은 3월 1일부터 7일 동안의 기간에 발생한 권한 부여 리소스 공급자의 활동 로그를 나열합니다.

az monitor activity-log list --namespace "Microsoft.Authorization" --start-time 2021-03-01 --offset 7d

로그 출력 필터링

로그 출력에는 많은 정보가 포함될 수 있습니다. 다음 명령은 7일 동안 구독에서 발생한 모든 역할 할당 및 역할 정의 변경 사항을 나열하고 출력을 필터링합니다.

az monitor activity-log list --namespace "Microsoft.Authorization" --start-time 2021-03-01 --offset 7d --query '[].{authorization:authorization, caller:caller, eventTimestamp:eventTimestamp, properties:properties}'

다음은 역할 할당을 만들 때 필터링된 로그 출력의 예를 보여 줍니다.

[
 {
    "authorization": {
      "action": "Microsoft.Authorization/roleAssignments/write",
      "role": null,
      "scope": "/subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}"
    },
    "caller": "admin@example.com",
    "eventTimestamp": "2021-03-01T22:07:42.456241+00:00",
    "properties": {
      "entity": "/subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
      "eventCategory": "Administrative",
      "hierarchy": "{tenantId}/{subscriptionId}",
      "message": "Microsoft.Authorization/roleAssignments/write",
      "serviceRequestId": "{serviceRequestId}",
      "statusCode": "Created"
    }
  },
  {
    "authorization": {
      "action": "Microsoft.Authorization/roleAssignments/write",
      "role": null,
      "scope": "/subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}"
    },
    "caller": "admin@example.com",
    "eventTimestamp": "2021-03-01T22:07:41.126243+00:00",
    "properties": {
      "entity": "/subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
      "eventCategory": "Administrative",
      "hierarchy": "{tenantId}/{subscriptionId}",
      "message": "Microsoft.Authorization/roleAssignments/write",
      "requestbody": "{\"Id\":\"{roleAssignmentId}\",\"Properties\":{\"PrincipalId\":\"{principalId}\",\"PrincipalType\":\"User\",\"RoleDefinitionId\":\"/providers/Microsoft.Authorization/roleDefinitions/fa23ad8b-c56e-40d8-ac0c-ce449e1d2c64\",\"Scope\":\"/subscriptions/{subscriptionId}/resourceGroups/example-group\"}}"
    }
  }
]

Azure Monitor 로그

Azure Monitor 로그는 모든 Azure 리소스의 Azure RBAC 변경 사항을 수집하고 분석하는 데 사용할 수 있는 또 다른 도구입니다. Azure Monitor 로그에는 다음과 같은 이점이 있습니다.

  • 복잡한 쿼리 및 로직 작성
  • 경고, Power BI 및 기타 도구와 통합
  • 장기 보존 기간 동안 데이터 저장
  • 보안, 가상 머신, 사용자 지정과 같은 다른 로그와 상호 참조

기본적인 시작 단계는 다음과 같습니다.

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

  2. 작업 영역에 대해 활동을 구성합니다.

  3. 활동 로그 인사이트를 봅니다. 활동 로그 개요 페이지로 빠르게 이동하는 방법은 로그 옵션을 클릭하는 것입니다.

    Azure Monitor logs option in portal

  4. 필요에 따라 Azure Monitor Log Analytics를 사용하여 로그를 쿼리하고 봅니다. 자세한 내용은 Azure Monitor에서 로그 쿼리 시작을 참조하세요.

다음은 대상 리소스 공급자가 구성한 새 역할 할당을 반환하는 쿼리입니다.

AzureActivity
| where TimeGenerated > ago(60d) and Authorization contains "Microsoft.Authorization/roleAssignments/write" and ActivityStatus == "Succeeded"
| parse ResourceId with * "/providers/" TargetResourceAuthProvider "/" *
| summarize count(), makeset(Caller) by TargetResourceAuthProvider

다음은 차트에 표시되는 역할 할당 변경 내용을 반환하는 쿼리입니다.

AzureActivity
| where TimeGenerated > ago(60d) and Authorization contains "Microsoft.Authorization/roleAssignments"
| summarize count() by bin(TimeGenerated, 1d), OperationName
| render timechart

Activity logs using the Advanced Analytics portal - screenshot

다음 단계