檢視次數:
您可以編輯用於已啟動事件轉發到 Amazon SNS 主題時的JSON配置。它定義了事件必須符合哪些條件才能發布到主題。配置語言是仿照Amazon 的 SNS 政策語言
每個欄位如下所示。基本的 SNS 配置如下:
{
  "Version": "2014-09-24",
  "Statement": [statement1, statement2, ...]
}
如需範例,請參閱 範例 SNS 配置

版本

版本 元素指定了配置語言的版本。
注意
注意
"Version" 的唯一當前有效值是字串 "2014-09-24"。
"Version": "2014-09-24",

聲明

Statement 元素是一個由個別陳述組成的陣列。每個個別陳述都是一個獨立的 JSON 物件,提供在事件符合給定條件時要發送的 SNS 主題。
"Statement": [{...}, {...}, ...]
單獨的聲明形式如下:
{
  "Topic": "destination topic",
  "Condition": {conditions event must meet to be published to the destination topic}
}

主題

Topic 元素必須是要發佈到的 SNS 主題的 Amazon 資源名稱。
"Topic": "arn:aws:sns:us-east-1:012345678901:myTopic"

條件

Condition 元素是配置中最複雜的部分。它包含一個或多個條件,事件必須符合這些條件才能發佈到主題。
每個條件可以有一個或多個鍵值對,事件必須符合(或不符合,取決於條件的類型)才能包含在主題中。鍵是任何有效的事件屬性。(有關事件屬性,請參見 JSON 格式的事件)。有效值因鍵而異。有些鍵支持多個值。
"Condition": {
  "ConditionName": {
    "key1": [value1, value2],
    "key2": value3
  },
  "ConditionName2": {
    "key3": [value4]
  },
  ...
}
有效的條件名稱及其語法如下所述。

布林

Bool 條件執行布林匹配。要匹配,事件必須具有所需布林值的屬性。如果事件中的屬性存在但本身不是布林值,則屬性將按以下方式進行測試:
  • 等於 0 的數字評估為 false。不等於 0 的數字評估為 true。
  • 空字串和特殊字串 "false" 和 "0" 會被評估為 false。其他字串會被評估為 true。
  • 事件中的任何其他屬性值都無法轉換為布林值,並且不會匹配。
允許多個值?否
以下範例顯示了一個配置,該配置會發布具有 "DetectOnly" 屬性且值為 false 的事件:
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "Bool": {
          "DetectOnly": false
        }
      }
    }
  ]
}

存在

Exists 條件測試事件中屬性的存在或不存在。屬性的值不予考慮。
允許多個值?否
以下範例顯示了一個配置,當事件具有屬性 "Severity" 但不具有屬性 "Title" 時發布事件:
{    
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "Exists": {
          "Severity": true,
          "Title": false
        }
      }
    }
  ]
}

IpAddress

IpAddress 條件測試事件屬性的值是否為 CIDR 格式範圍內的 IP 位址,或完全等於單一 IP 位址。
允許多個值?是
以下範例顯示了一個配置,當事件具有屬性 "DestinationIP" 且 IP 位址在 10.0.1.0/24 範圍內或為 10.0.0.5 時,會發布事件:
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "IpAddress": {
          "DestinationIP": ["10.0.1.0/24", "10.0.0.5"]
        }
      }
    }
  ]
}

不是IP地址

NotIpAddress 條件測試事件屬性的值不是任何指定 IP 位址範圍內的 IP 位址。
允許多個值?是
以下範例顯示了一個配置,當事件具有屬性 "DestinationIP" 且 IP 位址不在 10.0.0.0/8 範圍內時,會發布事件:
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "NotIpAddress": {
          "DestinationIP": "10.0.0.0/8"
        }
      }
    }
  ]
}

數值等於

NumericEquals 條件測試事件屬性的數值是否等於一個或多個期望值。如果事件中的屬性存在但本身不是數值,則屬性將按以下方式進行測試:
  • 字串會被轉換成數字。無法轉換成數字的字串將不會匹配。
  • 事件中的任何其他屬性值都無法轉換為數字,並且不會匹配。
允許多個值?是
以下範例顯示了一個配置,當事件具有屬性 "通訊協定" 且值為 6 或 17 時,會發布事件:
{    
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "NumericEquals": {
          "Protocol": [6, 17]
        }
      }
    }
  ]
}

數值不等於

NumericNotEquals 條件測試事件屬性的數值不等於任何一個不期望的值集合。
允許多個值?是
以下範例顯示了一個配置,當事件的屬性「通訊協定」不等於 6,且屬性「風險」不等於 2 或 3 時,會發布事件:
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "NumericNotEquals": {
          "Protocol": 6,
          "Risk" : [2, 3]
        }
      }
    }
  ]
}

數值大於

NumericGreaterThan 條件測試事件屬性的數值是否嚴格大於期望值。如果事件中的屬性存在但本身不是數值,則會按照 NumericEquals 的描述將其轉換為數字。
允許多個值?否
以下範例顯示了一個配置,當事件具有屬性 "通訊協定" 且值大於 6 時,會發布事件:
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "NumericGreaterThan": {
          "Protocol": 6
        }
      }
    }
  ]
}

數值大於等於

NumericGreaterThanEquals 條件測試事件屬性的數值是否大於或等於期望值。如果事件中的屬性存在但本身不是數值,則會按照 NumericEquals 的描述將其轉換為數字。
允許多個值?否
以下範例顯示了一個配置,當事件具有屬性 "Number" 且值大於或等於 600 時,會發布事件:
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "NumericGreaterThanEquals": {
          "Number": 600
        }
      }
    }
  ]
}

數值小於

NumericLessThan 條件測試事件屬性的數值是否嚴格小於期望值。如果事件中的屬性存在但本身不是數值,則會按照 NumericEquals 的描述將其轉換為數字。
允許多個值?否
以下範例顯示了一個配置,當事件具有屬性 "Number" 且值大於 1000 時會發布事件:
{    
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "NumericLessThan": {
          "Number": 1000
        }
      }
    }
  ]
}

數值小於等於

NumericLessThanEquals 條件測試事件屬性的數值是否小於或等於期望值。如果事件中的屬性存在但本身不是數值,則會按照 NumericEquals 的描述將其轉換為數字。
允許多個值?否
以下範例顯示了一個配置,當事件具有屬性 "Number" 且值小於或等於 500 時,會發布事件:
{    
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "NumericLessThanEquals": {
          "Number": 500
        }
      }
    }
  ]
}

StringEquals

StringEquals 條件測試事件屬性的字串值是否嚴格等於或更多期望的值。
允許多個值?是
以下範例顯示了一個配置,當事件的屬性 "EventType" 等於 "SystemEvent" 且屬性 "TargetType" 等於 "User" 或 "Role" 時,會發布事件:
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "StringEquals": {
          "EventType": ["SystemEvent"],
          "TargetType" : ["User", "Role"]
        }
      }
    }
  ]
}

StringNotEquals

StringNotEquals 條件測試事件屬性的字串值不等於任何不希望的值集合。
允許多個值?是
以下範例顯示了一個配置,當事件的屬性 "EventType" 不等於 "PacketLog" 或 "IntegrityEvent" 時,會發布事件:
{
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "StringNotEquals": {
          "EventType": ["PacketLog", "IntegrityEvent"]
        }
      }
    }
  ]
}

StringEqualsIgnoreCase

StringEqualsIgnoreCase 條件與 StringEquals 條件相同,只是字串比對是以不區分大小寫的方式進行。

StringNotEqualsIgnoreCase

StringNotEqualsIgnoreCase 條件與 StringNotEquals 條件相同,只是字串比對是以不區分大小寫的方式進行。

StringLike

StringLike 條件測試事件屬性的字串值是否等於或更多期望值,其中期望值可能包括萬用字元 '*' 以匹配任意數量的字符或 '?' 以匹配單個字符。字串比較區分大小寫。
允許多個值?是
以下範例顯示了一個配置,當事件具有包含字串 "User" 或 "Role" 的 "Title" 屬性時,會發布事件:
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "StringLike": {
          "Title": ["\*User\*", "\*Role\*"]
        }
      }
    }
  ]
}

StringNotLike

StringNotLike 條件測試事件屬性的字串值不等於任何不希望的值集合,其中值可能包括萬用字元 '*' 以匹配任意數量的字符或 '?' 以匹配單個字符。字串比較區分大小寫。
允許多個值?是
以下範例顯示了一個配置,該配置會發布所有事件,除了「系統設定已儲存」事件:
{    
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "StringNotLike": {
          "Title":"System Settings Saved"
        }
      }
    }
  ]
}
下一個範例顯示了一個配置,當事件的屬性 "Title" 不以 "User" 開頭且不以 "Created" 結尾時,會發布事件:
{    
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "StringNotLike": {
          "Title": ["User\*", "\*Created"]
        }
      }
    }
  ]
}

多個陳述與多個條件

如果您為相同的SNS主題創建多個語句,這些語句將被視為由“或”連接。如果一個語句包含多個條件,這些條件將被視為由“和”連接。

多個語句

這是一個不應該這樣做的例子。第一個聲明說要轉發除「系統設定已儲存」之外的所有事件。第二個聲明說要轉發所有「系統設定已儲存」事件。結果是所有事件都會被轉發,因為任何事件都會符合第一個聲明中的條件or第二個聲明中的條件:
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "StringNotLike" : {
          "Title" : "System Settings Saved"
        }
      }
    },
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "StringLike" : {
          "Title" : "System Settings Saved"
        }
      }
    }
  ]
}

多重條件

這是另一個不該做的例子。第一個條件是轉發除「系統設定已儲存」以外的所有事件。第二個條件是轉發所有「系統設定已儲存」事件。結果是沒有事件會被轉發,因為沒有事件會同時符合第一個條件 and 和第二個條件
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "StringNotLike" : {
          "Title" : "System Settings Saved"
    	 },
        "StringLike" : {
          "Title" : "System Settings Saved"
        }
      }
    }
  ]
}

範例 SNS 設定

這些配置會針對某些特定情境發送匹配的事件。欲了解更多可用來篩選SNS主題的事件屬性名稱和值,請參閱JSON格式的事件

將所有重要的入侵防護事件發送到 SNS 主題

{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "NumericEquals": {
          "Severity": 4
        },
        "StringEquals" : {
          "EventType" : "PayloadLog"
        }
      }
    }
  ]
}

將不同的事件發送到不同的SNS主題

此範例顯示將所有系統事件發送到一個主題,並將所有完整性監控事件發送到另一個主題。
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:systemEventsTopic",
      "Condition": {
        "StringEquals" : {
          "EventType" : "SystemEvent"
        }
      }
    },
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:integrityTopic",
      "Condition": {
        "StringEquals" : {
          "EventType" : "IntegrityEvent"
        }
      }
    }
  ]
}