通过EventBridge将轻量消息队列(原 MNS)投递事件发送至钉钉

本文为您介绍如何通过事件总线EventBridge的投递功能,将配置审计投递至轻量消息队列(原 MNS)的投递事件发送至钉钉。

前提条件

背景信息

配置审计支持的投递渠道包括:日志服务SLS、对象存储OSS和轻量消息队列(原 MNS)。如果您需要将审计事件(例如:资源配置变更历史或资源不合规事件)按照指定内容格式投递至更多渠道(例如:钉钉、消息队列、函数计算、短信服务、邮箱服务等),可以基于事件总线EventBridge提供的事件处理及投递功能来实现。本文以资源不合规事件投递为例,使用事件总线EventBridge的事件流,将检测不合规的资源进行事件转化,并按照指定的事件格式发送至钉钉。

步骤一:创建轻量消息队列(原 MNS)的主题和队列

  1. 创建轻量消息队列(原 MNS)的主题。

    具体操作,请参见创建主题

  2. 创建轻量消息队列(原 MNS)的队列。

    具体操作,请参见创建队列

  3. 为轻量消息队列(原 MNS)的主题创建订阅,将发送到该主题的消息都推送到订阅该主题的队列中。

    具体操作,请参见创建订阅

说明

如果您已在轻量消息队列(原 MNS)中创建相应的主题和队列,则跳过当前步骤。

步骤二:设置配置审计投递事件至轻量消息队列(原 MNS)

  1. 创建配置审计的规则。

    具体操作,请参见从模板创建规则自定义创建规则

  2. 设置投递事件至轻量消息队列(原 MNS)。

    具体操作,请参见设置投递数据到轻量消息队列(原 MNS)

说明

如果您已在配置审计中创建规则,且设置了数据投递至轻量消息队列(原 MNS),则跳过当前步骤。

步骤三:创建事件总线EventBridge并设置事件投递

  1. 登录事件总线EventBridge控制台

  2. 在左侧导航栏,单击事件总线

  3. 在控制台顶部,选择目标事件总线的地域。

  4. 自定义事件总线区域,单击快速创建

  5. 创建自定义事件总线面板,配置相关参数。

    1. 总线页面,填写自定义事件总线名称及描述,单击下一步

    2. 事件源页面,先配置如下参数,然后单击下一步

      1. 填写事件源名称,例如:noncompliant.event

      2. 事件提供方下拉列表中选择消息服务MNS

      3. 选择MNS消息队列的队列名称

      4. 选中开启Base64解码单选框。

    3. 规则页面,先配置如下参数,然后单击下一步

      1. 填写规则名称,例如:noncompliant-resource-rule

      2. 配置事件总线的模式内容,用于过滤无关事件。

        以下配置表示仅向事件目标投递名称为noncompliant.event的事件。具体操作,请参见事件模式

        {
            "source": [
                "noncompliant.event"
            ]
        }
    4. 目标页面,先配置如下参数,然后单击创建

      1. 服务类型下拉列表中选择钉钉acs.dingtalk

      2. 配置钉钉群的WebHook地址和加签密钥

        获取WebHook地址的方法,请参见自定义机器人接入

      3. 配置推送内容

        将事件按照指定的内容模板进行转换,然后推送至事件目标。以下配置表示从不合规事件中解析出资源ARN及规则名称推送至钉钉。具体操作,请参见事件内容转换

      /** 变量配置 **/
      {
        "resourceArn": "$.data.messageBody.evaluationResultIdentifier.evaluationResultQualifier.resourceArn",
        "configRuleName": "$.data.messageBody.evaluationResultIdentifier.evaluationResultQualifier.configRuleName"
      }
      /** 模板配置 **/
      {
        "msgtype": "text", 
        "text": {
            "content": "资源不合规通知: 资源${resourceArn}, 规则名称${configRuleName}"
        }
      }

步骤四:校验执行结果

  1. 登录配置审计控制台

  2. 在左侧导航栏,选择合规审计 > 规则

  3. 规则页面,先单击目标规则对应操作列的image..png图标,再单击重新审计

  4. 进入步骤三配置的钉钉群,查询钉钉群机器人通知。

    如果钉钉群存在资源不合规通知,则表示配置完成。

    image..png

常见问题

在配置审计控制台创建轻量消息队列(原 MNS)投递时使用的主题可以作为事件总线EventBridge的事件源吗?

不可以,因为事件总线EventBridge对于轻量消息队列(原 MNS)的事件源仅支持队列。您可以为轻量消息队列(原 MNS)的主题添加队列类型的订阅,并将此队列作为轻量消息队列(原 MNS)事件源。

配置了事件总线EventBridge的事件流,且已在配置审计控制台执行手动审计,为什么钉钉群未收到通知?

  1. 在配置审计控制台排查,确保存在不合规资源。

    1. 登录配置审计控制台

    2. 在左侧导航栏,选择合规审计 > 规则

      查看规则的审计结果,确保存在不合规资源。

  2. 在事件总线EventBridge控制台排查,确保事件投递成功。

    1. 登录事件总线EventBridge控制台

    2. 在左侧导航栏,单击事件总线

    3. 事件总线页面,单击目标事件总线对应操作列的事件追踪

      按时间范围查询事件,确保事件源存在数据。

    4. 单击目标事件对应操作事件轨迹

      事件轨迹对话框,确保事件投递成功。

如何处理事件总线EventBridge的事件投递失败问题?

  • 当提示[500]java.lang.RuntimeExceptionjava.lang.RuntimeExceptionjava.lang.RuntimeException缺少参数JSON时,解决方法如下:

    请您确保事件内容的对象$.data的KV对中不存在引号,否则当变量替换后,原始的JSON就会被变量中的双引号截断,不再是合法的JSON格式。您可以使用系统提供的转义工具jsonEscape对规则模板的配置进行修改,以下示例的变量配置中变量configRuleName对应值存在引号,在模板中使用jsonEscape进行转义。

    /** 变量配置 **/
    {
      "resourceArn": "$.data.messageBody.evaluationResultIdentifier.evaluationResultQualifier.resourceArn",
      "configRuleName": "$.data.messageBody.evaluationResultIdentifier.evaluationResultQualifier.configRuleName"
    }
    /** 模板配置 **/
    {
      "msgtype": "text", 
      "text": {
          "content": "资源不合规通知: 资源${resourceArn}, 规则名称${jsonEscape(configRuleName)}"
      }
    }
  • 当提示[500]java.lang.RuntimeExceptionjava.lang.RuntimeExceptionjava.lang.RuntimeExceptionsendtoofast,exceed20timesperminute时,解决方法如下:

    钉钉开放平台限制了自定义机器人发送消息的频率,每个机器人每分钟最多发送20条消息到钉钉群。如果钉钉消息超出20条,则会限流10分钟。如果有大量发送消息的场景(例如:系统监控报警),您可以将这些消息进行整合,通过Markdown消息以摘要的形式发送到钉钉群。具体操作,请参见自定义机器人接入