Azure Monitor의 역할, 권한 및 보안

이 문서에서는 Azure의 사용자에게 기본 제공 모니터링 역할을 신속하게 적용하거나 제한된 모니터링 권한이 필요한 사용자에 대해 자체 사용자 지정 역할을 구성하는 방법을 보여 줍니다. 그런 다음 Azure Monitor 관련 리소스에 대한 보안 고려 사항과, 해당 리소스의 데이터에 대한 액세스를 제한하는 방법에 대해 논의합니다.

기본 제공 모니터링 역할

Azure Monitor의 기본 제공 역할은 구독의 리소스에 대한 액세스를 제한하는 동시에 인프라를 모니터링하는 직원이 필요한 데이터를 가져오고 구성할 수 있도록 지원합니다. Azure Monitor는 모니터링 읽기 권한자와 모니터링 참가자 등, 바로 사용할 수 있는 두 가지 역할을 제공합니다. 또한 Azure Monitor 로그는 Log Analytics 작업 영역에 대한 액세스 관리에 설명된 대로 Log Analytics 작업 영역의 데이터에 대한 액세스를 관리하기 위한 기본 제공 역할을 제공합니다.

Monitoring Reader

모니터링 읽기 권한자 역할이 할당된 사용자는 구독에서 모든 모니터링 데이터를 볼 수 있지만 리소스를 수정하거나 모니터링 리소스와 관련한 설정은 편집할 수 없습니다. 이 역할은 다음을 수행해야 하는 지원 또는 운영 엔지니어와 같은 조직의 사용자에게 적합합니다.

  • Azure Portal에서 모니터링 대시보드를 봅니다.
  • Azure 경고에 정의된 경고 규칙을 봅니다.
  • Azure Monitor REST API, PowerShell cmdlet 또는 플랫폼 간 CLI를 사용하여 Azure Monitor 메트릭을 쿼리합니다.
  • 포털, Azure Monitor REST API, PowerShell cmdlet 또는 플랫폼 간 CLI를 사용하여 작업 로그를 쿼리합니다.
  • 리소스에 대한 진단 설정을 봅니다.
  • 구독에 대한 로그 프로필을 봅니다.
  • 자동 크기 조정 설정을 봅니다.
  • 경고 활동 및 설정을 봅니다.
  • 작업 영역에 대한 사용량 데이터를 포함하여 Log Analytics 작업 영역 데이터를 검색합니다.
  • Log Analytics 작업 영역에서 테이블 스키마를 검색합니다.
  • Log Analytics 작업 영역에서 로그 쿼리를 검색하고 실행합니다.
  • Application Insights 데이터에 액세스합니다.

참고 항목

이 역할은 이벤트 허브에 스트리밍되었거나 스토리지 계정에 저장된 로그 데이터에 대한 읽기 액세스를 부여하지 않습니다. 이러한 리소스에 대한 액세스를 구성하는 방법에 대한 자세한 내용은 이 문서의 뒷부분에 있는 모니터링 데이터에 대한 보안 고려 사항 섹션을 참조하세요.

Monitoring Contributor

모니터링 참가자 역할이 할당된 사용자는 구독의 모든 모니터링 데이터를 볼 수 있습니다. 모니터링 설정은 만들거나 수정할 수도 있지만 다른 리소스는 수정할 수 없습니다.

이 역할은 모니터링 읽기 권한자 역할의 상위 집합입니다. 앞서 설명한 권한 외에도 다음을 수행할 수 있어야 하는 조직의 모니터링 팀 또는 관리 서비스 공급자의 구성원에게 적합합니다.

  • 포털에서 모니터링 대시보드를 보고 자체 프라이빗 모니터링 대시보드를 만듭니다.
  • 리소스에 대한 진단 설정을 만들고 편집합니다. 1
  • Azure 경고를 사용하여 경고 규칙 활동 및 설정을 설정합니다.
  • Log Analytics 작업 영역에 대한 공유 키를 나열합니다.
  • Log Analytics 작업 영역에서 저장된 검색을 만들고 삭제하고 실행합니다.
  • Log Analytics의 작업 영역 스토리지 구성을 만들고 삭제합니다.
  • Application Insights에 대한 웹 테스트 및 구성 요소를 만듭니다. Application Insights에서 리소스, 역할 및 액세스 제어를 참조 하세요.

1 진단 설정을 만들거나 편집하려면 대상 리소스(스토리지 계정 또는 이벤트 허브 네임스페이스)에 대한 ListKeys 권한도 별도로 부여해야 합니다.

참고 항목

이 역할은 이벤트 허브에 스트리밍되었거나 스토리지 계정에 저장된 로그 데이터에 대한 읽기 액세스를 부여하지 않습니다. 이러한 리소스에 대한 액세스를 구성하는 방법에 대한 자세한 내용은 이 문서의 뒷부분에 있는 모니터링 데이터에 대한 보안 고려 사항 섹션을 참조하세요.

권한 및 Azure 사용자 지정 역할 모니터링

앞서 설명한 기본 제공 역할이 팀의 정확한 요구에 부합하지 않을 경우 더 세밀하게 지정한 권한을 갖는 Azure 사용자 지정 역할을 만들 수 있습니다. Azure Monitor에 대한 일반적인 Azure RBAC(역할 기반 액세스 제어) 작업이 여기에 나열됩니다.

연산 설명
Microsoft.Insights/ActionGroups/[읽기, 쓰기, 삭제] 작업 그룹을 읽거나 쓰거나 삭제합니다.
Microsoft.Insights/ActivityLogAlerts/[읽기, 쓰기, 삭제] 활동 로그 경고를 읽거나 쓰거나 삭제합니다.
Microsoft.Insights/AlertRules/[읽기, 쓰기, 삭제] 클래식 경고에서 경고 규칙을 읽거나 쓰거나 삭제합니다.
Microsoft.Insights/AlertRules/Incidents/Read 경고 규칙에 대한 인시던트(트리거되는 경고 규칙의 기록)를 나열합니다. 포털에만 적용됩니다.
Microsoft.Insights/자동 크기 조정설정/[읽기, 쓰기, 삭제] 자동 크기 조정 설정을 읽거나 쓰거나 삭제합니다.
Microsoft.Insights/Diagnostic설정/[읽기, 쓰기, 삭제] 진단 설정을 읽거나 쓰거나 삭제합니다.
Microsoft.Insights/EventCategories/읽기 활동 로그의 가능한 모든 범주를 열거합니다. Azure Portal에서 사용됩니다.
Microsoft.Insights/eventtypes/digestevents/Read 이 사용 권한은 포털을 통해 활동 로그에 액세스해야 하는 사용자에게 필요합니다.
Microsoft.Insights/eventtypes/values/Read 구독에서 활동 로그 이벤트(관리 이벤트)를 나열합니다. 이 권한은 활동 로그에 대한 프로그래밍 방식 및 포털 액세스 모두에 적용됩니다.
Microsoft.Insights/ExtendedDiagnostic설정/[읽기, 쓰기, 삭제] 네트워크 흐름 로그에 대한 진단 설정을 읽거나 쓰거나 삭제합니다.
Microsoft.Insights/LogDefinitions/Read 이 사용 권한은 포털을 통해 활동 로그에 액세스해야 하는 사용자에게 필요합니다.
Microsoft.Insights/LogProfiles/[Read, Write, Delete] 로그 프로필을 읽거나 쓰거나 삭제합니다(활동 로그를 이벤트 허브 또는 스토리지 계정으로 스트리밍).
Microsoft.Insights/MetricAlerts/[읽기, 쓰기, 삭제] 메트릭 경고 규칙을 읽거나 쓰거나 삭제합니다.
Microsoft.Insights/MetricDefinitions/읽기 메트릭 정의(리소스에 사용할 수 있는 메트릭 형식 목록)를 읽습니다.
Microsoft.Insights/Metrics/Read 리소스에 대한 메트릭을 읽습니다.
Microsoft.Insights/Register/Action Azure Monitor 리소스 공급자를 등록합니다.
Microsoft.Insights/ScheduledQueryRules/[읽기, 쓰기, 삭제] Azure Monitor에서 로그 검색 경고를 읽거나 쓰거나 삭제합니다.

참고 항목

리소스에 대한 알림, 진단 설정 및 메트릭에 액세스하려면 해당 사용자에게 리소스 형식과 리소스 범위에 대한 읽기 액세스 권한이 있어야 합니다. 스토리지 계정 또는 스트림을 이벤트 허브로 보내는 진단 설정을 만들려면 사용자에게 대상 리소스에 대한 ListKeys 권한도 있어야 합니다.

예를 들어 위의 표를 사용하여 다음과 같이 활동 로그 판독기용 Azure 사용자 지정 역할을 만들 수 있습니다.

$role = Get-AzRoleDefinition "Reader"
$role.Id = $null
$role.Name = "Activity Log Reader"
$role.Description = "Can view activity logs."
$role.Actions.Clear()
$role.Actions.Add("Microsoft.Insights/eventtypes/*")
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/mySubscription")
New-AzRoleDefinition -Role $role 

모니터링 데이터에 대한 보안 고려 사항

Azure Monitor 의 데이터는 스토리지 계정으로 보내거나 이벤트 허브로 스트리밍할 수 있으며, 둘 다 범용 Azure 리소스입니다. 이러한 리소스는 범용 리소스이므로 만들기, 삭제 및 액세스는 관리자를 위해 예약된 권한 있는 작업입니다. 이 데이터에는 IP 주소 또는 사용자 이름과 같은 중요한 정보가 포함될 수 있으므로 다음 방법을 사용하여 관련 리소스를 모니터링하여 오용을 방지합니다.

  • 단일 전용 스토리지 계정을 사용하여 데이터를 모니터링합니다. 모니터링 데이터를 여러 스토리지 계정으로 구분해야 할 경우, 모니터링 데이터와 비 모니터링 데이터 간에 스토리지 계정의 사용량을 공유하지 않습니다. 이러한 방식으로 사용량을 공유하면 모니터링 데이터에만 액세스해야 하는 조직에 비 모니터링 데이터에 대한 액세스 권한을 실수로 부여할 수 있습니다. 예를 들어 보안 정보 및 이벤트 관리를 위한 타사 조직은 모니터링 데이터에만 액세스해야 합니다.
  • 이전에 설명한 것과 같은 이유로 모든 진단 설정에서 단일 전용 Service Bus 또는 이벤트 허브 네임스페이스를 사용합니다.
  • 별도의 리소스 그룹을 유지하여 모니터링 관련 스토리지 계정이나 이벤트 허브에 대한 액세스를 제한합니다. 모니터링 역할의 범위를 사용하여 해당 리소스 그룹에 대한 액세스만 제한합니다.
  • 사용자가 모니터링 데이터 액세스만 필요할 경우 구독에서 이벤트 허브나 스토리지 계정에 ListKeys 권한을 부여해서는 안 됩니다. 그 대신 리소스나 리소스 그룹 범위(전용 모니터링 리소스 그룹이 있는 경우)에서 사용자에게 해당 건한을 부여합니다.

사용자나 애플리케이션이 스토리지 계정의 모니터링 데이터에 대한 액세스를 필요로 할 경우, Blob 스토리지에 대한 서비스 수준 읽기 전용 액세스 권한을 통해 모니터링 데이터를 포함하는 스토리지 계정에서 SAS(공유 액세스 서명)를 생성합니다. PowerShell에서 계정 SAS는 다음 코드와 같을 수 있습니다.

$context = New-AzStorageContext -ConnectionString "[connection string for your monitoring Storage Account]"
$token = New-AzStorageAccountSASToken -ResourceType Service -Service Blob -Permission "rl" -Context $context

그런 다음 해당 스토리지 계정에서의 읽기가 필요한 엔터티에 토큰을 부여할 수 있습니다. 엔터티는 해당 스토리지 계정의 모든 Blob을 나열하고 읽을 수 있습니다.

또는 Azure RBAC로 이 권한을 제어해야 하는 경우 해당 특정 스토리지 계정에 대한 Microsoft.Storage/storageAccounts/listkeys/action 권한을 해당 엔터티에 부여할 수 있습니다. 이 권한은 스토리지 계정으로 데이터를 보내도록 진단 설정을 설정해야 하는 사용자에게 필요합니다. 예를 들어, 한 스토리지 계정에서 읽기만 필요한 사용자 또는 애플리케이션에 대해 다음 Azure 사용자 지정 역할을 만들 수 있습니다.

$role = Get-AzRoleDefinition "Reader"
$role.Id = $null
$role.Name = "Monitoring Storage Account Reader"
$role.Description = "Can get the storage account keys for a monitoring storage account."
$role.Actions.Clear()
$role.Actions.Add("Microsoft.Storage/storageAccounts/listkeys/action")
$role.Actions.Add("Microsoft.Storage/storageAccounts/Read")
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/mySubscription/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/myMonitoringStorageAccount")
New-AzRoleDefinition -Role $role 

Warning

ListKeys 권한이 있는 사용자는 기본 및 보조 스토리지 계정 키를 나열할 수 있습니다. 이러한 키는 사용자에게 해당 스토리지 계정의 모든 서명된 서비스(Blob, 큐, 테이블, 파일) 전체에서 모든 서명된 권한(예: 읽기, 쓰기, Blob 만들기, Blob 삭제)을 부여합니다. 가능한 경우 계정 SAS를 사용하는 것이 좋습니다.

이벤트 허브와 비슷한 패턴을 따를 수 있지만 먼저 수신에 대한 전용 권한 부여 규칙을 만들어야 합니다. 모니터링 관련 이벤트 허브를 수신 대기 하도록 하는 애플리케이션에 대한 액세스 권한을 부여하려면 다음 단계를 수행합니다.

  1. 포털에서 수신 클레임만으로 모니터링 데이터를 스트리밍하기 위해 생성된 이벤트 허브에서 공유 액세스 정책을 만듭니다. 예를 들어 "monitoringReadOnly"라고 할 수 있습니다. 가능하면 해당 키를 소비자에게 직접 제공하고 다음 단계를 건너뜁니다.

  2. 소비자가 임시로 키를 가져와야 하는 경우 해당 이벤트 허브에 대한 ListKeys 작업을 사용자에게 부여합니다. 이 단계는 이벤트 허브에 스트리밍하기 위해 진단 설정이나 로그 프로필을 설정해야 하는 사용자에게도 필요합니다. 예를 들어 Azure RBAC 규칙을 만들 수 있습니다.

    $role = Get-AzRoleDefinition "Reader"
    $role.Id = $null
    $role.Name = "Monitoring Event Hub Listener"
    $role.Description = "Can get the key to listen to an event hub streaming monitoring data."
    $role.Actions.Clear()
    $role.Actions.Add("Microsoft.EventHub/namespaces/authorizationrules/listkeys/action")
    $role.Actions.Add("Microsoft.EventHub/namespaces/Read")
    $role.AssignableScopes.Clear()
    $role.AssignableScopes.Add("/subscriptions/mySubscription/resourceGroups/myResourceGroup/providers/Microsoft.ServiceBus/namespaces/mySBNameSpace")
    New-AzRoleDefinition -Role $role 
    

다음 단계