JSON形式でのSNS設定

Amazon SNSトピックへのイベントの転送を有効にした場合に使用されるJSON設定を編集できます。この設定では、イベントをトピックに公開するために満たさなければならない条件を定義します。設定言語は、AmazonのSNS向けポリシー言語に倣っています。

各フィールドの詳細を以下に示します。基本的なSNS設定は次のような構文で記述されます。

{
  "Version": "2014-09-24",
  "Statement": [statement1, statement2, ...]
}

例については、「SNS設定の例」を参照してください。

Version

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 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トピックに対して作成した複数の文は、「or」で結合されたものとして評価されます。1つの文に複数の条件が含まれている場合、それらの条件は「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"
        }
      }
    }
  ]
}

複数の条件

間違った設定例をもう1つ示します。最初の条件で「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設定の例

以下は、一部の特定シナリオに合ったイベントを送信する設定です。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"
        }
      }
    }
  ]
}