每個欄位如下所示。基本的 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" } } } ] }