JSON構成は、Amazon SNSトピックへのイベント転送を有効にした場合に使用されるものを編集できます。これは、イベントがトピックに公開されるために満たすべき条件を定義します。構成言語はAmazonのSNSポリシー言語に基づいています。
各フィールドの詳細を以下に示します。基本的なSNS設定は次のような構文で記述されます。
{
  "Version": "2014-09-24",
  "Statement": [statement1, statement2, ...]
}
例については、例のSNS構成を参照してください。

バージョン

[バージョン]エレメントは、設定言語のバージョンを指定します。
現在有効な"Version"の値は、文字列"2014-09-24"のみです。
"Version": "2014-09-24",

Statement

[Statement]エレメントは、複数の文の配列です。それぞれの文は、所定の条件を満たした場合にイベントを送信するSNSトピックを示すJSONオブジェクトを指定します。
"Statement": [{...}, {...}, ...]
それぞれのステートメントの形式は次のとおりです。
{
  "Topic": "destination topic",
  "Condition": {conditions event must meet to be published to the destination topic}
}

Topic

[Topic]エレメントには、発行先のSNSトピックのAmazon Resource Nameを指定する必要があります。
"Topic": "arn:aws:sns:us-east-1:012345678901:myTopic"

Condition

[Condition]エレメントは最も複雑な部分で、イベントをトピックに公開する条件を指定します。
各条件には、トピックに含めるためにイベントが一致する (または一致しない、条件の種類による) 1つ以上のキーと値のペアを持つことができます。キーは有効なイベントプロパティです。(イベントプロパティについては、JSON形式のイベントを参照してください)。有効な値はキーによって異なります。一部のキーは複数の値をサポートしています。
"Condition": {
  "ConditionName": {
    "key1": [value1, value2],
    "key2": value3
  },
  "ConditionName2": {
    "key3": [value4]
  },
  ...
}
有効な条件の名前と構文を以下に示します。

Bool

[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

[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"]
        }
      }
    }
  ]
}

NotIpAddress

[NotIpAddress]条件は、イベントのプロパティの値が指定したいずれの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

[NumericEquals]条件は、イベントのプロパティの数値が指定した1つ以上の値と等しいかどうかをテストします。該当するプロパティがあるものの、その値が数値でない場合は、次のようにしてプロパティがテストされます。
  • 文字列は数値に変換されます。数値に変換できない文字列は照合されません。
  • それ以外の値を持つイベントのプロパティについては、値を数値に変換できず、照合されません。
複数値の使用: ○
次の設定例では、イベントのプロパティ"Protocol"の値が6または17である場合にイベントが公開されます。
{    
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "NumericEquals": {
          "Protocol": [6, 17]
        }
      }
    }
  ]
}

NumericNotEquals

[NumericNotEquals]条件は、イベントのプロパティの数値が指定したいずれの値とも等しくないかどうかをテストします。
複数値の使用: ○
次の設定例では、イベントのプロパティ"Protocol"の値が6以外で、かつプロパティ"Risk"の値が2または3以外である場合にイベントが公開されます。
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "NumericNotEquals": {
          "Protocol": 6,
          "Risk" : [2, 3]
        }
      }
    }
  ]
}

NumericGreaterThan

[NumericGreaterThan]条件は、イベントのプロパティの数値が指定した値よりも大きいかどうかをテストします。該当するプロパティがあるものの、その値が数値でない場合は、前述のNumericEqualsと同じように数値に変換されます。
複数値の使用: ×
次の設定例では、イベントのプロパティ"Protocol"の値が6よりも大きい場合にイベントが公開されます。
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "NumericGreaterThan": {
          "Protocol": 6
        }
      }
    }
  ]
}

NumericGreaterThanEquals

[NumericGreaterThanEquals]条件は、イベントのプロパティの数値が指定した値以上であるかをテストします。該当するプロパティがあるものの、その値が数値でない場合は、前述のNumericEqualsと同じように数値に変換されます。
複数値の使用: ×
次の設定例では、イベントのプロパティ"Number"の値が600以上の場合にイベントが公開されます。
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "NumericGreaterThanEquals": {
          "Number": 600
        }
      }
    }
  ]
}

NumericLessThan

[NumericLessThan]条件は、イベントのプロパティの数値が指定した値よりも小さいかどうかをテストします。該当するプロパティがあるものの、その値が数値でない場合は、前述のNumericEqualsと同じように数値に変換されます。
複数値の使用: ×
次の設定例では、イベントのプロパティ"Number"の値が1000よりも大きい場合にイベントが公開されます。
{    
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "NumericLessThan": {
          "Number": 1000
        }
      }
    }
  ]
}

NumericLessThanEquals

[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] 条件は、イベントのプロパティの文字列値が目的の値以上であるかどうかをテストします。任意の数の文字に一致するワイルドカード '*' または1つの文字に一致する '?' が目的の値に含まれる場合があります。文字列の比較では大文字と小文字が区別されます。
複数値の使用: ○
次の設定例では、イベントのプロパティ"Title"の値に"User"または"Role"という文字列が含まれる場合にイベントが公開されます。
{   
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "arn:aws:sns:us-east-1:012345678901:myTopic",
      "Condition": {
        "StringLike": {
          "Title": ["\*User\*", "\*Role\*"]
        }
      }
    }
  ]
}

StringNotLike

[StringNotLike] 条件は、イベントのプロパティの文字列値が、任意の値の任意の値と等しくないことをテストします。値には、任意の数の文字に一致するワイルドカード '*' または1つの文字に一致する '?' が含まれます。文字列の比較では大文字と小文字が区別されます。
複数値の使用: ○
次の設定例では、"システム設定の保存" イベントを除くすべてのイベントが公開されます。
{    
  "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トピックに対して複数のステートメントを作成した場合、それらのステートメントは「または」で結合されたかのように評価されます。ステートメントに複数の条件が含まれている場合、それらの条件は「および」で結合されたかのように評価されます。

複数の文

これはやってはいけない例です。最初の文は、"System Settings Saved"以外のすべてのイベントを転送するように指示しています。2番目の文は、すべての"System Settings Saved"イベントを転送するように指示しています。結果として、すべてのイベントが転送されます。なぜなら、どのイベントも最初の文の条件または2番目の文の条件に一致するからです。
{   
  "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"
        }
      }
    }
  ]
}

複数の条件

これは、何をしてはいけないかの別の例です。最初の条件は、"System Settings Saved"以外のすべてのイベントを転送することを示しています。2番目の条件は、すべての"System Settings Saved"イベントを転送することを示しています。その結果、最初の文の条件2番目の文の条件の両方に一致するイベントがないため、イベントは転送されません。
{   
  "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設定の例

これらの構成は、特定のシナリオに一致するイベントを送信します。フィルタリングに使用できるその他のイベントプロパティ名と値については、JSON形式のイベントを参照してください。

重大なすべての侵入防御イベントをSNSトピックに送信する

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

イベントごとに異なるSNSトピックに送信する

この例では、すべてのシステムイベントを1つのトピックに送信し、すべての変更監視イベントを別のトピックに送信します。
{   
  "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"
        }
      }
    }
  ]
}