Azure Monitor의 역할, 권한 및 보안
이 문서에서는 RBAC(역할 기반 액세스 제어) 모니터링 역할을 적용하여 액세스 권한을 부여하거나 제한하는 방법을 보여 주고 Azure Monitor 관련 리소스에 대한 보안 고려 사항을 토론합니다.
기본 제공 모니터링 역할
Azure RBAC(Azure 역할 기반 액세스 제어)는 사용자, 그룹, 서비스 주체 및 관리 ID에 할당할 수 있는 모니터링용 기본 제공 역할을 제공합니다. 가장 일반적인 역할은 각각 읽기 및 쓰기 권한에 대한 모니터링 읽기 권한자 및 모니터링 기여자입니다.
모니터링 역할에 대한 자세한 내용은 RBAC 모니터링 역할을 참조하세요.
Monitoring Reader
모니터링 읽기 권한자 역할이 할당된 사용자는 구독에서 모든 모니터링 데이터를 볼 수 있지만 리소스를 수정하거나 모니터링 리소스와 관련한 설정은 편집할 수 없습니다. 이 역할은 다음을 수행해야 하는 지원 또는 운영 엔지니어와 같은 조직의 사용자에게 적합합니다.
- Azure Portal에서 모니터링 대시보드를 봅니다.
- Azure 경고에 정의된 경고 규칙을 봅니다.
- Azure Monitor REST API, PowerShell cmdlets 또는 플랫폼 간 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에 대한 웹 테스트 및 구성 요소를 만듭니다.
1 사용자가 진단 설정을 만들거나 편집하려면 대상 리소스(스토리지 계정 또는 이벤트 허브 네임스페이스)에 대한 ListKeys 권한도 별도로 받아야 합니다.
참고 항목
이 역할은 이벤트 허브에 스트리밍되었거나 스토리지 계정에 저장된 로그 데이터에 대한 읽기 액세스를 부여하지 않습니다. 이러한 리소스에 대한 액세스를 구성하는 방법에 대한 자세한 내용은 이 문서의 뒷부분에 있는 모니터링 데이터에 대한 보안 고려 사항 섹션을 참조하세요.
권한 및 Azure 사용자 지정 역할 모니터링
기본 제공 역할이 팀의 요구 사항을 충족하지 못하는 경우 세부적인 권한을 사용하여 Azure 사용자 지정 역할을 만들 수 있습니다.
예를 들어, 세분화된 권한을 사용하여 다음 PowerShell 스크립트를 사용하여 활동 로그 읽기 권한자에 대한 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
참고 항목
리소스에 대한 알림, 진단 설정 및 메트릭에 액세스하려면 해당 사용자에게 리소스 형식과 리소스 범위에 대한 읽기 액세스 권한이 있어야 합니다. 스토리지 계정으로 데이터를 전송하거나 이벤트 허브에 스트리밍하는 진단 설정을 만들려면 해당 사용자에게 대상 리소스에 대한 ListKeys 권한도 있어야 합니다.
역할 할당
참고 항목
Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.
역할을 할당하려면 Azure PowerShell을 사용하여 Azure 역할 할당을 참조하세요.
예를 들어, 다음 PowerShell 스크립트는 할당된 사용자에게 역할을 할당합니다.
<RoleId>
를 할당하려는 RBAC 모니터링 역할 ID로 바꿉니다.
<SubscriptionID>
, <ResourceGroupName>
, <UserPrincipalName>
을 사용자 환경에 적합한 값으로 바꿉니다.
# Define variables
$SubscriptionId = "<SubscriptionID>"
$ResourceGroupName = "<ResourceGroupName>"
$UserPrincipalName = "<UserPrincipalName>" # The UPN of the user to whom you want to assign the role
$RoleId = "<RoleId>" # The ID of the role
# Get the user object
$User = Get-AzADUser -UserPrincipalName $UserPrincipalName
# Define the scope (e.g., subscription or resource group level)
$Scope = "/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName"
# Assign the role
New-AzRoleAssignment -ObjectId $User.Id -RoleDefinitionId $RoleId -Scope $Scope
Azure Portal을 사용하여 Azure 역할을 할당할 수도 있습니다.
Important
- 할당된 범위에서 역할을 할당하는 데 필요한 권한이 있는지 확인합니다. 구독 또는 리소스 그룹에 대한 소유자 권한이 있어야 합니다.
- 리소스 자체가 아닌 리소스가 속한 리소스 그룹 또는 구독에서 액세스 권한을 할당합니다.
역할 멤버 자격을 확인하기 위한 PowerShell 쿼리
특정 역할에 속하는 사용자 목록을 생성하는 것이 도움이 될 수 있습니다. 이러한 형식의 목록을 생성하는 데 도움이 되도록 다음 샘플 쿼리를 특정 요구 사항에 맞게 조정할 수 있습니다.
관리자 역할 + 기여자 역할을 위한 전체 구독 쿼리
(Get-AzRoleAssignment -IncludeClassicAdministrators | Where-Object {$_.RoleDefinitionName -in @('ServiceAdministrator', 'CoAdministrator', 'Owner', 'Contributor') } | Select -ExpandProperty SignInName | Sort-Object -Unique) -Join ", "
소유자 및 기여자에 대한 특정 Application Insights 리소스의 컨텍스트 내에서 쿼리
$resourceGroup = "ResourceGroupName"
$resourceName = "AppInsightsName"
$resourceType = "microsoft.insights/components"
(Get-AzRoleAssignment -ResourceGroup $resourceGroup -ResourceType $resourceType -ResourceName $resourceName | Where-Object {$_.RoleDefinitionName -in @('Owner', 'Contributor') } | Select -ExpandProperty SignInName | Sort-Object -Unique) -Join ", "
소유자 및 기여자에 대한 특정 리소스 그룹의 컨텍스트 내에서 쿼리
$resourceGroup = "ResourceGroupName"
(Get-AzRoleAssignment -ResourceGroup $resourceGroup | Where-Object {$_.RoleDefinitionName -in @('Owner', 'Contributor') } | Select -ExpandProperty SignInName | Sort-Object -Unique) -Join ", "
모니터링 데이터에 대한 보안 고려 사항
Azure Monitor의 데이터는 모두 스토리지 계정으로 전송되거나 이벤트 허브에 스트리밍되며, 모두 범용 Azure 리소스입니다. 범용 리소스이기 때문에 이를 만들기, 삭제 및 액세스하는 것은 관리자에게 예약된 권한 있는 작업입니다. 이 데이터에는 IP 주소 또는 사용자 이름과 같은 중요한 정보가 포함될 수 있으므로 모니터링 관련 리소스에 대해 다음 사례를 사용하여 오용을 방지합니다.
- 모니터링 데이터에는 단일 전용 스토리지 계정을 사용합니다. 모니터링 데이터를 여러 스토리지 계정으로 분리해야 하는 경우 모니터링 데이터 및 기타 형식의 데이터에 항상 다른 스토리지 계정을 사용합니다. 모니터링 및 기타 형식의 데이터를 위해 스토리지 계정을 공유하는 경우 모니터링 데이터에만 액세스해야 하는 조직에 실수로 다른 데이터에 대한 액세스 권한을 부여할 수 있습니다. 예를 들어, 보안 정보 및 이벤트 관리를 위한 Microsoft 이외의 조직에서는 모니터링 데이터에만 액세스하면 됩니다.
- 이전에 설명한 것과 같은 이유로 모든 진단 설정에서 단일 전용 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를 사용하는 것이 좋습니다.
모니터링 관련 이벤트 허브에 대한 액세스 제한
이벤트 허브와 비슷한 패턴을 따를 수 있지만 먼저 수신에 대한 전용 권한 부여 규칙을 만들어야 합니다. 모니터링 관련 이벤트 허브를 수신 대기 하도록 하는 애플리케이션에 대한 액세스 권한을 부여하려면 다음 단계를 수행합니다.
포털에서 수신 클레임만으로 모니터링 데이터를 스트리밍하기 위해 생성된 이벤트 허브에서 공유 액세스 정책을 만듭니다. 예를 들어 "monitoringReadOnly"라고 할 수 있습니다. 가능하면 해당 키를 소비자에게 직접 제공하고 다음 단계를 건너뜁니다.
소비자가 요청 시 키를 가져와야 하는 경우 사용자에게 해당 이벤트 허브에 대한 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