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