关于特权 Azure 角色分配的警报

特权 Azure 角色(例如参与者、所有者或用户访问管理员)是强大的角色,可能会给系统带来风险。 在分配这些或其他角色时,你可能希望通过电子邮件或短信收到通知。 本文介绍如何通过使用 Azure Monitor 创建警报规则,在订阅范围内收到特权角色分配的通知。

先决条件

若要创建警报规则,必须具备:

  • 对 Azure 订阅的访问权限
  • 在订阅中创建资源组和资源的权限
  • Log Analytics 已配置 ,使其有权访问 AzureActivity 表

使用 Azure Monitor 之前请估算成本

与使用 Azure Monitor 和警报规则相关的成本。 该成本基于执行查询和所选通知的频率。 有关详细信息,请参阅 Azure Monitor 定价

创建警报规则

若要获得特权角色分配的通知,请在 Azure Monitor 中创建警报规则。

  1. 登录 Azure 门户

  2. 转到“监视器”。

  3. 在左侧导航栏中,单击“警报”。

  4. 单击“ 创建”>“警报规则”。 “创建警报规则”页打开。

  5. 在“范围 ”选项卡上,选择你的订阅。

  6. 在“条件 ”选项卡上,选择“自定义日志搜索”信号名称。

  7. 在“日志查询”框中,添加以下 Kusto 查询,该查询将在订阅的日志上运行并触发警报。

    此查询对在所选订阅范围内分配参与者所有者用户访问管理员角色的尝试进行筛选。

    AzureActivity
    | where CategoryValue =~ "Administrative" and
        OperationNameValue =~ "Microsoft.Authorization/roleAssignments/write" and
        (ActivityStatusValue =~ "Start" or ActivityStatus =~ "Started")
    | extend Properties_d = todynamic(Properties)
    | extend RoleDefinition = extractjson("$.Properties.RoleDefinitionId",tostring(Properties_d.requestbody),typeof(string))
    | extend PrincipalId = extractjson("$.Properties.PrincipalId",tostring(Properties_d.requestbody),typeof(string))
    | extend PrincipalType = extractjson("$.Properties.PrincipalType",tostring(Properties_d.requestbody),typeof(string))
    | extend Scope = extractjson("$.Properties.Scope",tostring(Properties_d.requestbody),typeof(string))
    | where Scope !contains "resourcegroups"
    | extend RoleId = split(RoleDefinition,'/')[-1]
    | extend RoleDisplayName = case(
        RoleId =~ 'b24988ac-6180-42a0-ab88-20f7382dd24c', "Contributor",
        RoleId =~ '8e3af657-a8ff-443c-a75c-2fe8c4bcb635', "Owner",
        RoleId =~ '18d7d88d-d35e-4fb5-a5c3-7773c20a72d9', "User Access Administrator",
        "Irrelevant")
    | where RoleDisplayName != "Irrelevant"
    | project TimeGenerated,Scope, PrincipalId,PrincipalType,RoleDisplayName
    

    Screenshot of Create an alert rule condition tab in Azure Monitor.

  8. 在“度量”部分中,设置以下值:

    • 度量:表行
    • 聚合类型:Count
    • 聚合粒度:5 分钟

    对于“聚合粒度”,可以将默认值更改为所需的频率。

  9. 在“按维度拆分”部分中,将“资源 ID 列”设置为“不拆分”。

  10. 在“警报逻辑”部分中,设置以下值:

    • 运算符:大于
    • 阈值:0
    • 评估频率:5 分钟

    对于“评估频率”,可以将默认值更改为所需的频率。

  11. 在“操作”选项卡上,创建操作组或选择现有操作组。

    操作组定义触发警报时执行的操作和通知。

    创建操作组时,必须指定资源组以将操作组放入其中。 然后选择触发警报规则时调用的通知(Email/短信/推送/语音操作)。 可以跳过“操作”和“标记”选项卡。 有关详细信息,请参阅在 Azure 门户中创建和管理操作组

  12. 在“详细信息”选项卡上,选择资源组以保存警报规则。

  13. 在“警报规则详细信息”中选择“严重性”,并指定“警报规则名称”。

  14. 对于“区域”,可以选择任何区域,因为 Azure 活动日志是全局的。

  15. 跳过“标记”选项卡。

  16. 在“查看 + 创建”选项卡上,单击“创建”以创建警报规则。

测试警报规则

创建警报规则后,可以测试它是否触发。

  1. 在订阅范围内分配参与者、所有者或用户访问管理员角色。 有关详细信息,请参阅使用 Azure 门户分配 Azure 角色

  2. 等待几分钟,即可根据聚合粒度和日志查询评估频率接收警报。

  3. 在“警报”页上,监视在操作组中指定的警报。

    Screenshot of the Alerts page showing that role assignment alert fired.

    下图显示电子邮件警报的示例。

    Screenshot of an email alert for a role assignment.

删除警报规则

按照以下步骤删除角色分配警报规则并停止额外的成本。

  1. 在“监视器”中,导航到“警报”。

  2. 在导航栏中,单击“警报规则”。

  3. 在要删除的警报规则旁边添加一个复选标记。

  4. 单击“删除”以删除警报。

后续步骤