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

バージョン

Version要素は構成言語のバージョンを指定します。
現在有効な"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リソースネームでなければなりません。
"Topic": "arn:aws:sns:us-east-1:012345678901:myTopic"

Condition

Condition要素は、構成の中で最も複雑な部分です。イベントがトピックに公開されるためには、1つ以上の条件を満たす必要があります。
各条件には、イベントがトピックに含まれるために一致する (または一致しない、条件の種類による) 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アドレス範囲のいずれにも含まれない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条件は、イベントのプロパティの文字列値が、ワイルドカード*を使用して任意の文字数に一致させたり、?を使用して単一の文字に一致させたりすることができる、より望ましい値と等しいかどうかをテストします。文字列の比較は大文字と小文字を区別します。
複数値の使用: ○
次の設定例では、イベントのプロパティ"Title"の値に"User"または"Role"という文字列が含まれる場合にイベントが公開されます。
{   
  "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で結合されているかのように評価されます。ステートメントに複数の条件が含まれている場合、それらの条件はandで結合されているかのように評価されます。

複数の文

これはやってはいけない例です。最初の文は、"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"
        }
      }
    }
  ]
}