本文为您介绍如何通过事件总线EventBridge的投递功能,将配置审计投递至轻量消息队列(原 MNS)的投递事件发送至钉钉。
前提条件
请确保您已开通事件总线EventBridge。具体操作,请参见开通事件总线EventBridge并授权。
请确保您已开通轻量消息队列(原 MNS)。具体操作,请参见开通轻量消息队列(原 MNS)并授权。
重要当您使用轻量消息队列(原 MNS)的主题和队列时,会产生相关费用。更多信息,请参见轻量消息队列(原 MNS)计费说明。
背景信息
配置审计支持的投递渠道包括:日志服务SLS、对象存储OSS和轻量消息队列(原 MNS)。如果您需要将审计事件(例如:资源配置变更历史或资源不合规事件)按照指定内容格式投递至更多渠道(例如:钉钉、消息队列、函数计算、短信服务、邮箱服务等),可以基于事件总线EventBridge提供的事件处理及投递功能来实现。本文以资源不合规事件投递为例,使用事件总线EventBridge的事件流,将检测不合规的资源进行事件转化,并按照指定的事件格式发送至钉钉。
步骤一:创建轻量消息队列(原 MNS)的主题和队列
创建轻量消息队列(原 MNS)的主题。
具体操作,请参见创建主题。
创建轻量消息队列(原 MNS)的队列。
具体操作,请参见创建队列。
为轻量消息队列(原 MNS)的主题创建订阅,将发送到该主题的消息都推送到订阅该主题的队列中。
具体操作,请参见创建订阅。
如果您已在轻量消息队列(原 MNS)中创建相应的主题和队列,则跳过当前步骤。
步骤二:设置配置审计投递事件至轻量消息队列(原 MNS)
创建配置审计的规则。
设置投递事件至轻量消息队列(原 MNS)。
具体操作,请参见设置投递数据到轻量消息队列(原 MNS)。
如果您已在配置审计中创建规则,且设置了数据投递至轻量消息队列(原 MNS),则跳过当前步骤。
步骤三:创建事件总线EventBridge并设置事件投递
在左侧导航栏,单击事件总线。
在控制台顶部,选择目标事件总线的地域。
在自定义事件总线区域,单击快速创建。
在创建自定义事件总线面板,配置相关参数。
在总线页面,填写自定义事件总线名称及描述,单击下一步。
在事件源页面,先配置如下参数,然后单击下一步。
填写事件源名称,例如:
noncompliant.event
。在事件提供方下拉列表中选择轻量消息队列(原 MNS)。
选择MNS消息队列的队列名称。
选中开启Base64解码单选框。
在规则页面,先配置如下参数,然后单击下一步。
填写规则名称,例如:
noncompliant-resource-rule
。配置事件总线的模式内容,用于过滤无关事件。
以下配置表示仅向事件目标投递名称为noncompliant.event的事件。具体操作,请参见事件模式。
{ "source": [ "noncompliant.event" ] }
在目标页面,先配置如下参数,然后单击创建。
在服务类型下拉列表中选择钉钉acs.dingtalk。
配置钉钉群的WebHook地址和加签密钥。
获取WebHook地址的方法,请参见自定义机器人接入。
配置推送内容。
将事件按照指定的内容模板进行转换,然后推送至事件目标。以下配置表示从不合规事件中解析出资源ARN及规则名称推送至钉钉。具体操作,请参见事件内容转换。
/** 变量配置 **/ { "resourceArn": "$.data.messageBody.evaluationResultIdentifier.evaluationResultQualifier.resourceArn", "configRuleName": "$.data.messageBody.evaluationResultIdentifier.evaluationResultQualifier.configRuleName" }
/** 模板配置 **/ { "msgtype": "text", "text": { "content": "资源不合规通知: 资源${resourceArn}, 规则名称${configRuleName}" } }
步骤四:校验执行结果
登录配置审计控制台。
在左侧导航栏,选择
。在规则页面,先单击目标规则对应操作列的图标,再单击重新审计。
进入步骤三配置的钉钉群,查询钉钉群机器人通知。
如果钉钉群存在资源不合规通知,则表示配置完成。
常见问题
在配置审计控制台创建轻量消息队列(原 MNS)投递时使用的主题可以作为事件总线EventBridge的事件源吗?
不可以,因为事件总线EventBridge对于轻量消息队列(原 MNS)的事件源仅支持队列。您可以为轻量消息队列(原 MNS)的主题添加队列类型的订阅,并将此队列作为轻量消息队列(原 MNS)事件源。
配置了事件总线EventBridge的事件流,且已在配置审计控制台执行手动审计,为什么钉钉群未收到通知?
在配置审计控制台排查,确保存在不合规资源。
登录配置审计控制台。
在左侧导航栏,选择合规审计 > 规则。
查看规则的审计结果,确保存在不合规资源。
在事件总线EventBridge控制台排查,确保事件投递成功。
在左侧导航栏,单击事件总线。
在事件总线页面,单击目标事件总线对应操作列的事件追踪。
按时间范围查询事件,确保事件源存在数据。
单击目标事件对应操作列事件轨迹。
在事件轨迹对话框,确保事件投递成功。
如何处理事件总线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消息以摘要的形式发送到钉钉群。具体操作,请参见自定义机器人接入。