全部產品
Search
文件中心

Cloud Config:通過EventBridge將輕量訊息佇列(原 MNS)投遞事件發送至DingTalk

更新時間:Dec 06, 2024

本文為您介紹如何通過事件匯流排EventBridge的投遞功能,將配置審計投遞至輕量訊息佇列(原 MNS)的投遞事件發送至DingTalk。

前提條件

背景資訊

配置審計支援的投遞渠道包括:Log ServiceSLS、Object Storage Service和輕量訊息佇列(原 MNS)。如果您需要將審計事件(例如:資源配置變更歷史或資源不合規事件)按照指定內容格式投遞至更多渠道(例如:DingTalk、訊息佇列、Function Compute、簡訊服務、郵箱服務等),可以基於事件匯流排EventBridge提供的事件處理及投遞功能來實現。本文以資源不合規事件投遞為例,使用事件匯流排EventBridge的事件流,將檢測不合規的資源進行事件轉化,並按照指定的事件格式發送至DingTalk。

步驟一:建立輕量訊息佇列(原 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. 服務類型下拉式清單中選擇DingTalkacs.dingtalk

      2. 配置DingTalk群的WebHook地址和加簽密鑰

      3. 配置推送內容

        將事件按照指定的內容範本進行轉換,然後推送至事件目標。以下配置表示從不合規事件中解析出資源ARN及規則名稱推送至DingTalk。具體操作,請參見事件內容轉換

      /** 變數配置 **/
      {
        "resourceArn": "$.data.messageBody.evaluationResultIdentifier.evaluationResultQualifier.resourceArn",
        "configRuleName": "$.data.messageBody.evaluationResultIdentifier.evaluationResultQualifier.configRuleName"
      }
      /** 模板配置 **/
      {
        "msgtype": "text", 
        "text": {
            "content": "資源不合規通知: 資源${resourceArn}, 規則名稱${configRuleName}"
        }
      }

步驟四:校正執行結果

  1. 登入配置審計控制台

  2. 在左側導覽列,選擇合規審計 > 規則

  3. 規則頁面,先單擊目標規則對應操作列的image..png表徵圖,再單擊重新審計

  4. 進入步驟三配置的DingTalk群,查詢DingTalk群機器人通知。

    如果DingTalk群存在資源不合規通知,則表示配置完成。

常見問題

在配置審計控制台建立輕量訊息佇列(原 MNS)投遞時使用的主題可以作為事件匯流排EventBridge的事件來源嗎?

不可以,因為事件匯流排EventBridge對於輕量訊息佇列(原 MNS)的事件來源僅支援隊列。您可以為輕量訊息佇列(原 MNS)的主題添加隊列類型的訂閱,並將此隊列作為輕量訊息佇列(原 MNS)事件來源。

配置了事件匯流排EventBridge的事件流,且已在配置審計控制台執行手動審計,為什麼DingTalk群未收到通知?

  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時,解決方案如下:

    DingTalk開放平台限制了自訂機器人發送訊息的頻率,每個機器人每分鐘最多發送20條訊息到DingTalk群。如果DingTalk訊息超出20條,則會限流10分鐘。如果有大量發送訊息的情境(例如:系統監控警示),您可以將這些訊息進行整合,通過Markdown訊息以摘要的形式發送到DingTalk群。