JSON構成は、Amazon SNSトピックへのイベント転送を有効にした場合に使用されるものを編集できます。イベントがトピックに公開されるために満たすべき条件を定義します。構成言語はAmazonのSNSポリシー言語に基づいています。
各フィールドは以下の通りです。基本的なSNS構成は次のようになります:
{
"Version": "2014-09-24",
"Statement": [statement1, statement2, ...]
}
例については、例のSNS構成を参照してください。
バージョン
[バージョン]エレメントは、設定言語のバージョンを指定します。
注意「バージョン」の現在有効な値は、文字列「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つ以上の条件に一致する必要があります。
各条件には、トピックに含めるためにイベントが一致する必要がある (または条件の種類によっては一致しない必要がある) 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"]
}
}
}
]
}{ "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トピックに対して複数のステートメントを作成した場合、それらのステートメントは「または」で結合されているかのように評価されます。ステートメントに複数の条件が含まれている場合、それらの条件は「かつ」で結合されているかのように評価されます。
複数の文
これはやってはいけない例です。最初のステートメントは「システム設定保存」以外のすべてのイベントを転送するように指示しています。2番目のステートメントはすべての「システム設定保存」イベントを転送するように指示しています。結果として、すべてのイベントが転送されます。なぜなら、どのイベントも最初のステートメントの条件[または]または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"
}
}
}
]
}
複数の条件
これはやってはいけないことのもう一つの例です。最初の条件は「システム設定が保存されました」以外のすべてのイベントを転送することを示しています。2番目の条件は、すべての「システム設定が保存されました」イベントを転送することを示しています。結果として、最初のステートメントの条件[and]と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:myTopic",
"Condition": {
"StringEquals": {
[
"EventType" : "SystemEvent"
}
}
},
{
"Topic": "arn:aws:sns:us-east-1:012345678901:integrityTopic",
"Condition": {
"StringEquals": {
[
"EventType" : "IntegrityEvent"
}
}
}
]
}
