创建自定义告警规则

您可以通过创建自定义告警规则,配置需要监控的事件,从而更加灵活地进行企业安全监控。操作审计会根据您添加的查询统计、定义的检查频率、触发条件等配置产生告警,并根据您所选择的告警策略和行动策略进行告警降噪和通知。本文为您介绍如何创建自定义告警规则、不同场景的自定义告警语句和自定义告警示例。

背景信息

自定义告警规则使用SQL(Structured Query Language)语法筛选事件。关于SQL语法的更多信息,请参见查询概述分析概述

操作步骤

  1. 登录操作审计控制台

  2. 在左侧导航栏,单击事件告警

  3. 告警中心页面的告警规则页签,单击新建告警

  4. 新建告警面板,添加查询统计。

    1. 单击查询统计右侧的添加

    2. 查询统计对话框的高级配置页签,选择类型日志库授权方式默认

      说明

      区域项目将自动填入,与启用事件告警的跟踪相同,无需手动设置。

    3. 选择跟踪投递的日志库(日志库名称格式为actiontrail_<跟踪名称>

    4. 选择是否开启独享SQL。

      说明
      • 自动:默认不使用独享SQL。当遇到查询并发限制或者查询结果不精确时,自动尝试使用独享SQL再次查询。

      • 启用:始终使用独享SQL进行查询和分析。

      • 关闭:关闭独享SQL。

      关于开启独享SQL的更多信息,请参见开启SQL独享版

    5. 设置查询区间,并在查询右侧的文本框,输入自定义告警语句,然后单击预览

      关于自定义告警语句的更多信息,请参见自定义告警语句

    6. 单击确认

  5. 告警监控规则面板,设置规则名称检查频率分组评估触发条件添加标签添加标注恢复通知高级配置输出目标等参数。

    关于参数的更多信息,请参见告警监控规则参数

  6. 单击确定

    创建自定义告警规则成功后,告警规则列表中显示新创建的告警规则,您可以根据需求管理告警规则。具体操作,请参见管理告警规则

自定义告警语句

场景

说明

自定义告警语句

筛选云服务和事件

通过指定云服务名称(serviceName)和事件名称(eventName),对特定云服务和事件进行告警。

  • 指定单个服务的单个事件。例如:指定云服务器ECS的创建实例事件。

    serviceName: Ecs and eventName: RunInstances

  • 指定单个服务的多个事件。例如:指定云数据库RDS的释放实例事件。

    event.serviceName: RDS and (event.eventName: DeleteDBInstance or event.eventName: Release or event.eventName: DestroyDBInstance)

  • 指定多个服务的多个事件。例如:指定资源管理(Resource Management)和访问控制RAM的权限变更事件。

    (event.serviceName: ResourceManager and (event.eventName: AttachPolicy or event.eventName: DetachPolicy )) or (event.serviceName: Ram and (event.eventName: AttachPolicyToUser or event.eventName: AttachPolicyToGroup or event.eventName: AttachPolicyToRole or event.eventName: DetachPolicyFromUser or event.eventName: DetachPolicyFromGroup or event.eventName: DetachPolicyFromRole))

获取和指定参数

事件参数以JSON格式存储在event.requestParameterJson参数中,操作审计可以针对事件参数的具体取值进行告警。

  • 获取云服务器ECS修改实例属性中实例释放保护属性为false的事件。

    event.serviceName: Ecs and event.eventName: ModifyInstanceAttribute | SELECT * FROM (SELECT cast(json_extract("event.requestParameterJson", '$.DeletionProtection') as varchar) as deletion_protection FROM log) WHERE deletion_protection = 'false'

  • 获取云数据库RDS将白名单设置为0.0.0.0的事件。

    event.serviceName: Rds and event.eventName: ModifySecurityIps | SELECT * FROM (SELECT cast(json_extract("event.requestParameterJson", '$.SecurityIps') as varchar) as security_ips FROM log) WHERE security_ips like '%0.0.0.0%'

获取资源

通过指定事件的相关资源名称(resourceName)和事件的相关资源类型(resourceType),获取事件的资源。

关于参数的更多信息,请参见管控事件结构定义

获取单个资源。例如:获取云服务器ECS释放实例事件中操作的实例ID。

event.serviceName: Ecs and (event.eventName: DeleteInstances or event.eventName: DeleteInstance or event.eventName: Release) | SELECT resourceArray[num] as instance_id FROM (SELECT split("event.resourceName", ';') as resourceArray, array_position(split("event.resourceType", ';'), 'ACS::ECS::Instance') as num FROM log) where num > 0

获取身份

您可以获取事件中的身份信息,对指定身份进行告警。

身份信息(userIdentity)包含身份类型(type)、身份名称(userName)、身份ID(principalId)、阿里云账号ID(accountId)等多个参数。关于参数的更多信息,请参见管控事件结构定义

  • 获取身份类型。

    * | SELECT "event.userIdentity.type" as user_type

  • 获取身份名称。

    * | SELECT "event.userIdentity.userName" as user_name

  • 获取身份ID。

    * | SELECT "event.userIdentity.principalId" as principal_id

  • 获取阿里云账号ID。

    * | SELECT "event.userIdentity.accountId" as account_id

统计数量

您可以统计事件发生次数,超过指定次数时进行告警。

  • ECS实例重启次数过多告警。例如:ECS实例重启次数超过2次进行告警。

    event.serviceName: Ecs and (event.eventName: RebootInstances or event.eventName: RebootInstance) | SELECT account_id, resourceArray[num] as instance_id, count(*) as cnt FROM ( SELECT "event.userIdentity.accountId" as account_id, split("event.resourceName", ';') as resourceArray, array_position(split("event.resourceType", ';'), 'ACS::ECS::Instance') as num FROM log) where num > 0 group by account_id, instance_id

  • 账号登录错误次数过多告警。例如:登录错误次数超过2次进行告警。

    event.eventName: ConsoleSignin and event.userIdentity.type: ram-user and not event.errorMessage: success | select "event.userIdentity.principalId" as user_id, "event.userIdentity.userName" as user_name, count(1) as cnt group by user_id, user_name

自定义告警示例

arbitrary函数用于返回x中任意一个非空的值,语法为:arbitrary(x)。关于arbitrary函数的更多信息,请参见arbitrary函数。以下为您介绍两个使用arbitrary函数的自定义告警示例:

  • 示例一:RDS实例释放告警

    event.serviceName: RDS and (event.eventName: DeleteDBInstance or event.eventName: Release or event.eventName: DestroyDBInstance) | SELECT account_id, resourceArray[num] as instance_id, ram_user_id, user_type, user_name FROM (SELECT "event.userIdentity.accountId" as account_id, "event.userIdentity.principalId" as ram_user_id, split("event.resourceName", ';') as resourceArray, array_position(split("event.resourceType", ';'), 'ACS::RDS::DBInstance') as num, "event.userIdentity.type" as user_type, "event.userIdentity.userName" as user_name FROM log ) where num > 0

  • 示例二:安全组配置变更告警

    event.eventName: CreateSecurityGroup OR event.eventName: AuthorizeSecurityGroup OR event.eventName: AuthorizeSecurityGroupEgress OR event.eventName: RevokeSecurityGroup OR event.eventName: RevokeSecurityGroupEgress OR event.eventName: JoinSecurityGroup OR event.eventName: LeaveSecurityGroup OR event.eventName: DeleteSecurityGroup OR event.eventName: ModifySecurityGroupPolicy) | select "event.userIdentity.accountId" as account_id, "event.userIdentity.principalId" as ram_user_id, "event.eventName" as event_name, arbitrary("event.userIdentity.type") as user_type, arbitrary("event.userIdentity.userName") as user_name group by account_id, ram_user_id, event_name

相关文档