Azure Monitor 中的角色、权限和安全性

本文介绍如何快速地将内置监视角色应用到 Azure 中的用户,或者为需要有限的监视权限的用户构建自己的自定义角色。 然后,本文讨论 Azure Monitor 相关资源的安全注意事项,以及如何限制对这些资源所含数据的访问。

内置监视角色

Azure Monitor 中的内置角色可帮助限制对订阅中资源的访问,同时仍然使监视基础结构的员工能够获取并配置他们需要的数据。 Azure Monitor 提供了两个现成的角色:监视查阅者和监视参与者。 Azure Monitor 日志还提供内置角色用于管理对 Log Analytics 工作区中数据的访问,如管理对 Log Analytics 工作区的访问中所述。

监视查阅者

分配了监视查阅者角色的人员可以查看订阅中的所有监视数据,但不能修改任何资源或编辑与监视资源相关的任何设置。 此角色适用于组织中的用户,如支持人员或操作工程师,他们需要执行以下操作:

  • 查看 Azure 门户中的监视仪表板。
  • 查看 Azure 警报中定义的警报规则。
  • 使用 Azure Monitor REST APIPowerShell cmdlet跨平台 CLI 查询 Azure Monitor 指标。
  • 使用门户、Azure Monitor REST API、PowerShell cmdlet 或跨平台 CLI 查询活动日志。
  • 查看资源的诊断设置
  • 查看订阅的日志配置文件
  • 查看自动调整规模设置。
  • 查看警报活动和设置。
  • 搜索 Log Analytics 工作区数据(包括工作区的使用情况数据)。
  • 在 Log Analytics 工作区中检索表架构。
  • 在 Log Analytics 工作区中检索和执行日志查询。
  • 访问 Application Insights 数据。

注意

此角色不授予已流式传输到事件中心或存储在存储帐户的日志数据的读取访问权限。 有关如何配置对这些资源的访问权限的信息,请参阅本文后面的监视数据的安全注意事项部分。

监视参与者

分配了监视参与者角色的人员可以查看订阅中的所有监视数据。 还可以创建或修改监视设置,但不能修改任何其他资源。

此角色是监视查阅者角色的一个超集。 它适用于组织的监视团队成员或托管服务提供商,除了上述权限外,他们还需要执行以下操作:

  • 在门户中查看监视仪表板和创建自己专用的监视仪表板。
  • 创建和编辑资源的诊断设置1
  • 使用 Azure 警报设置警报规则活动和设置。
  • 列出 Log Analytics 工作区的共享密钥。
  • 在 Log Analytics 工作区中创建、删除和执行已保存的搜索。
  • 创建和删除 Log Analytics 工作区存储配置。
  • 创建 Application Insights Web 测试和组件。 请参阅 Application Insights 中的资源、角色和访问控制

1 若要创建或编辑诊断设置,用户还必须分别拥有目标资源(存储帐户或事件中心命名空间)的 ListKeys 权限。

注意

此角色不授予已流式传输到事件中心或存储在存储帐户的日志数据的读取访问权限。 有关如何配置对这些资源的访问权限的信息,请参阅本文后面的监视数据的安全注意事项部分。

监视权限和 Azure 自定义角色

如果上述的内置角色不能满足团队的确切需求,则可以创建具有更加细化的权限的 Azure 自定义角色。 下面列出了 Azure Monitor 的常见 Azure 基于角色的访问控制 (RBAC) 操作。

操作 说明
Microsoft.Insights/ActionGroups/[Read, Write, Delete] 读取、写入或删除操作组。
Microsoft.Insights/ActivityLogAlerts/[Read, Write, Delete] 读取、写入或删除活动日志警报。
Microsoft.Insights/AlertRules/[Read, Write, Delete] (从经典警报)读取、写入或删除警报规则。
Microsoft.Insights/AlertRules/Incidents/Read 列出警报规则的事件(触发警报规则的历史记录)。 这仅适用于门户。
Microsoft.Insights/AutoscaleSettings/[Read, Write, Delete] 读取、写入或删除自动调整规模设置。
Microsoft.Insights/DiagnosticSettings/[Read, Write, Delete] 读取、写入或删除诊断设置。
Microsoft.Insights/EventCategories/Read 枚举活动日志中所有可能的类别。 由 Azure 门户使用。
Microsoft.Insights/eventtypes/digestevents/Read 此权限对于需要通过门户访问活动日志的用户是必需的。
Microsoft.Insights/eventtypes/values/Read 列出订阅中的活动日志事件(管理事件)。 此权限适用于以编程方式和通过门户访问活动日志。
Microsoft.Insights/ExtendedDiagnosticSettings/[Read, Write, Delete] 读取、写入或删除网络流日志的诊断设置。
Microsoft.Insights/LogDefinitions/Read 此权限对于需要通过门户访问活动日志的用户是必需的。
Microsoft.Insights/LogProfiles/[Read, Write, Delete] 读取、写入或删除日志配置文件(将活动日志流式传输到事件中心或存储帐户)。
Microsoft.Insights/MetricAlerts/[Read, Write, Delete] 读取、写入或删除指标警报规则。
Microsoft.Insights/MetricDefinitions/Read 读取指标定义(资源的可用指标类型的列表)。
Microsoft.Insights/Metrics/Read 读取资源的指标。
Microsoft.Insights/Register/Action 注册 Azure Monitor 资源提供程序。
Microsoft.Insights/ScheduledQueryRules/[Read, Write, Delete] 在 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 地址或用户名),因此请对与监视相关的资源采用以下做法来防止滥用:

  • 使用单个、专用存储帐户来监视数据。 如果需要将监视数据划分到多个存储帐户,那么请勿在监视数据和非监视数据之间共享存储帐户的使用。 通过这种方式共享使用可能会无意中对仅需要访问监视数据的组织授予访问非监视数据的权限。 例如,安全信息和事件管理的第三方组织应仅需访问监视数据。
  • 与上述原因相同,请对所有诊断设置使用单个、专用的服务总线或事件中心命名空间。
  • 通过将与监视相关的存储帐户或事件中心保存在单独的资源组中来限制对它们的访问。 对监视角色使用作用域以限制仅访问该资源组。
  • 当用户只需访问监视数据时,请勿授予订阅作用域内的存储帐户或事件中心的 ListKeys 权限。 取而代之的是授予用户资源或资源组作用域(如果有专用的监视资源组)的权限。

当用户或应用程序需要访问存储帐户中的监视数据时,请在包含监视数据且对 blob 存储具有服务级只读访问权限的存储帐户中生成共享访问签名 (SAS)。 在 PowerShell 中,帐户 SAS 可能类似于以下代码:

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

然后可以将令牌提供给需要读取存储帐户的实体。 该实体可以列出并读取存储帐户中的所有 blob。

或者,如果需要控制此 Azure RBA 的权限,可以授予该实体特定存储帐户的 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 

警告

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 
    

后续步骤