

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon SNS 구독 필터 정책
<a name="sns-subscription-filter-policies"></a>

구독 필터 정책을 사용하면 속성 이름을 지정하고 각 속성 이름에 값 목록을 지정할 수 있습니다. 자세한 내용은 [Amazon SNS 메시지 필터링](sns-message-filtering.md) 단원을 참조하십시오.

Amazon SNS는 구독 필터 정책을 기준으로 메시지 속성 또는 메시지 본문 속성을 평가할 때 정책에 지정되지 않은 메시지 속성이나 메시지 본문 속성을 무시합니다.

**중요**  
AWS IAM 및 Amazon SNS와 같은 서비스는 최종 일관성이라는 분산 컴퓨팅 모델을 사용합니다. 구독 필터 정책의 추가 또는 변경 사항이 완전히 적용되려면 최대 15분이 소요됩니다.

구독은 다음 조건에서 메시지를 수락합니다.
+ 필터 정책 범위를 `MessageAttributes`로 설정하면 필터 정책의 각 속성 이름을 메시지 속성 이름과 일치시킵니다. 필터 정책에서 일치하는 각 속성 이름에 대해 하나 이상의 속성 값을 메시지 속성 값과 일치시킵니다.
+ 필터 정책 범위를 `MessageBody`로 설정하면 필터 정책의 각 속성 이름을 메시지 본문 속성 이름과 일치시킵니다. 필터 정책에서 일치하는 각 속성 이름에 대해 하나 이상의 속성 값을 메시지 본문 속성 값과 일치시킵니다.

Amazon SNS에서는 현재 다음과 같은 필터 연산자를 지원합니다.
+ [AND 로직](and-or-logic.md#and-logic)
+ [OR 로직](and-or-logic.md#or-logic)
+ [OR 연산자](and-or-logic.md#or-operator)
+ [키 일치](attribute-key-matching.md)
+ [숫자 값 정확한 일치](numeric-value-matching.md#numeric-exact-matching)
+ [숫자 값 anything-but 일치](numeric-value-matching.md#numeric-anything-but-matching)
+ [숫자 값 범위 일치](numeric-value-matching.md#numeric-value-range-matching)
+ [문자열 값 정확한 일치](string-value-matching.md#string-exact-matching)
+ [문자열 값 anything-but 일치](string-value-matching.md#string-anything-but-matching)
+ [접두사와 anything-but 연산자를 사용한 문자열 일치](string-value-matching.md#string-anything-but-matching)
+ [문자열 값 equals-ignore case](string-value-matching.md#string-equals-ignore)
+ [문자열 값 IP 주소 일치](string-value-matching.md#string-address-matching)
+ [문자열 값 접두사 일치](string-value-matching.md#string-prefix-matching)
+ [문자열 값 접미사 일치](string-value-matching.md#string-suffix-matching)

# Amazon SNS 예제 필터 정책
<a name="example-filter-policies"></a>

다음 예제에서는 고객 트랜잭션을 처리하는 Amazon SNS 주제에서 전송된 메시지 페이로드를 보여 줍니다.

첫 번째 예에서 `MessageAttributes` 필드에는 트랜잭션을 설명하는 속성이 포함됩니다.
+ 고객의 관심사
+ 스토어 이름
+ 이벤트 상태
+ 구매 가격(USD)

이 메시지에는 `MessageAttributes` 필드가 포함되어 있으므로, 구독의 `FilterPolicyScope`가 `MessageAttributes`로 설정되어 있는 한 `FilterPolicy`가 설정된 주제 구독은 메시지를 선택적으로 수락 또는 거부할 수 있습니다. 메시지에 속성을 적용하는 방법에 대한 자세한 내용은 [Amazon SNS 메시지 속성](sns-message-attributes.md)에서 확인하세요.

```
{
   "Type": "Notification",
   "MessageId": "a1b2c34d-567e-8f90-g1h2-i345j67klmn8",
   "TopicArn": "arn:aws:sns:us-east-2:123456789012:MyTopic",
   "Message": "message-body-with-transaction-details",
   "Timestamp": "2019-11-03T23:28:01.631Z",
   "SignatureVersion": "4",
   "Signature": "signature",
   "UnsubscribeURL": "unsubscribe-url",
   "MessageAttributes": {
      "customer_interests": {
         "Type": "String.Array",
         "Value": "[\"soccer\", \"rugby\", \"hockey\"]"
      },
      "store": {
         "Type": "String",
         "Value":"example_corp"
      },
      "event": {
         "Type": "String",
         "Value": "order_placed"
      },
      "price_usd": {
         "Type": "Number", 
         "Value": "210.75"
      }
   }
}
```

다음 예에서는 `Message` 필드(메시지 페이로드** 또는 메시지 본문**이라고도 함)에 포함된 동일한 속성을 보여줍니다. `FilterPolicy`를 포함하는 모든 주제 구독은 구독의 `FilterPolicyScope`가 `MessageBody`로 설정되어 있는 한 메시지를 선택적으로 수락하거나 거부할 수 있습니다.

```
{
"Type": "Notification",
   "MessageId": "a1b2c34d-567e-8f90-g1h2-i345j67klmn8",
   "TopicArn": "arn:aws:sns:us-east-2:123456789012:MyTopic",
   "Message": "{
      \"customer_interests\": [\"soccer\", \"rugby\", \"hockey\"],
      \"store\": \"example_corp\",
      \"event\":\"order_placed\",
      \"price_usd\":210.75
   }",
   "Timestamp": "2019-11-03T23:28:01.631Z",
   "SignatureVersion": "4",
   "Signature": "signature",
   "UnsubscribeURL": "unsubscribe-url"
}
```

다음 필터 정책은 속성 이름과 값을 기준으로 메시지를 수락하거나 거부합니다.

## 예제 메시지를 수락하는 정책
<a name="policy-accepts-messages"></a>

다음 구독 필터 정책의 속성이 예제 메시지에 지정된 속성과 일치합니다. 참고로 `MessageAttributes` 또는 `MessageBody`로 설정되었는지와 관계없이 `FilterPolicyScope`에 대해 동일한 필터 정책이 적용됩니다. 각 구독자는 주제에서 받는 메시지의 구성에 따라 필터링 범위를 선택합니다.

이 정책의 속성 중 하나가 메시지에 지정된 속성과 일치하지 않으면 정책은 해당 메시지를 거부합니다.

```
{
   "store": ["example_corp"],
   "event": [{"anything-but": "order_cancelled"}],
   "customer_interests": [
      "rugby",
      "football",
      "baseball"
   ],
   "price_usd": [{"numeric": [">=", 100]}]
}
```

## 예제 메시지를 거부하는 정책
<a name="policy-rejects-messages"></a>

다음 구독 필터 정책의 속성과 예제 메시지에 지정된 속성이 서로 여러 가지가 불일치합니다. 예를 들어 `encrypted` 속성 이름이 메시지 속성에 없으므로 이 정책 속성은 할당된 값과 관계없이 메시지를 거부합니다.

불일치가 하나라도 있을 경우 정책은 해당 메시지를 거부합니다.

```
{
   "store": ["example_corp"],
   "event": ["order_cancelled"],
   "encrypted": [false],
   "customer_interests": [
      "basketball",
      "baseball"
   ]
}
```

# Amazon SNS에서 필터 정책 제약 조건
<a name="subscription-filter-policy-constraints"></a>

Amazon SNS에서 필터 정책을 설정할 때 유의해야 할 몇 가지 중요한 규칙이 있습니다. 이러한 규칙은 시스템 성능과 호환성을 유지하면서 필터 정책을 효과적으로 적용하는 데 도움이 됩니다.

## 필터 정책 제약 조건
<a name="subscription-filter-policy-common-constraints"></a>

Amazon SNS에서 필터 정책을 구성할 때 다음과 같은 중요한 규칙을 따라 시스템 성능과 호환성을 유지하면서 효과적으로 작동하는지 확인합니다.
+ **문자열 일치** - 필터 정책의 문자열 일치에서 비교는 대/소문자를 구분합니다.
+ **숫자 일치** - 숫자 일치에서 값의 범위는 -109\$1109(-10억\$110억)이며 소수점 이하 정확도는 5자리입니다.
+ **필터 정책 복잡도** - 필터 정책 복잡도에서 전체 값 조합이 **150**을 초과해서는 안 됩니다. 전체 조합을 계산하려면 필터 정책에 있는 각 어레이의 값의 개수를 곱합니다.
+ **키 수 제한** - 필터 정책에는 최대 **5**개의 키가 있을 수 있습니다.

****추가 고려 사항****
+ 필터 정책의 JSON에는 다음이 포함될 수 있습니다.
  + 인용 부호로 묶인 문자열
  + 숫자
  + 인용 부호 없는 키워드 `true`, `false` 및 `null`
+ Amazon SNS API를 사용하는 경우 필터 정책의 JSON을 유효한 **UTF-8** 문자열로 전달해야 합니다.
+ 필터 정책의 최대 크기는 **256KB**입니다.
+ 기본적으로 주제당 최대 **200**개의 필터 정책과 AWS 계정당 **10,000**개의 필터 정책을 가질 수 있습니다.

  이 정책 제한으로 인해 [https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html) API를 사용한 Amazon SQS 대기열 구독 생성이 중단되지는 않습니다. 하지만 `Subscribe` API 직접 호출(또는 [https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html](https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html) API 직접 호출)에 필터 정책을 연결하면 실패합니다.

  할당량 증가를 요청하려면 [AWS Service Quotas](https://docs.aws.amazon.com/servicequotas/latest/userguide/intro.html)를 사용합니다.

## 속성 기반 필터링에 대한 정책 제약 조건
<a name="subscription-filter-policy-attribute-constraints"></a>

속성 기반 필터링은 기본 옵션으로, 구독에서 [https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html#API_SetSubscriptionAttributes_RequestParameters](https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html#API_SetSubscriptionAttributes_RequestParameters)는 `MessageAttributes`로 설정되어 있습니다.
+ Amazon SNS는 속성 기반 필터링을 위한 중첩된 필터 정책을 허용하지 않습니다.
+ Amazon SNS는 다음 데이터 형식을 갖는 메시지 속성만 정책 속성과 비교합니다.
  + `String`
  + `String.Array`
**중요**  
Amazon SNS에서 속성 기반 필터링을 사용하는 경우 특정 특수 문자, 특히 다음을 이중 이스케이프해야 합니다.  
큰따옴표(")
백슬래시()
이러한 문자를 두 번 이스케이프하지 않으면 필터 정책이 게시된 메시지의 속성과 일치하지 않고 알림이 전달되지 않습니다.

**추가 고려 사항**
+ 배열의 객체를 전달하면 속성 기반 필터링에서 지원되지 않는 중첩으로 인해 예상치 못한 결과가 발생할 수 있으므로 배열의 객체를 전달하는 것은 권장되지 않습니다. 중첩된 정책에 페이로드 기반 필터링을 사용합니다.
+ `Number`는 숫자 속성 값에 대해 지원됩니다.
+ Amazon SNS는 데이터 유형이 Binary인 메시지 속성을 무시합니다.

**복잡성에 대한 정책 예제:**

다음 정책 예제에서 첫 번째 키에는 **3개의** 일치 연산자가 있고, 두 번째 키에는 **1개의** 일치 연산자가 있으며, 세 번째 키에는 **2개의** 일치 연산자가 있습니다.

```
{
   "key_a": ["value_one", "value_two", "value_three"],
   "key_b": ["value_one"],
   "key_c": ["value_one", "value_two"]
}
```

총 조합은 필터 정책의 각 키에 대한 일치 연산자 수의 곱으로 계산됩니다.

```
3(match operators of key_a) 
x 1(match operators of key_b) 
x 2(match operators of key_c) 
= 6
```

## 페이로드 기반 필터링에 대한 정책 제약 조건
<a name="subscription-filter-policy-payload-constraints"></a>

속성 기반(기본값)에서 페이로드 기반 필터링으로 전환하려면 구독에서 [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeprovisionIpamPoolCidr.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeprovisionIpamPoolCidr.html)를 `MessageBody`로 설정해야 합니다.
+ Amazon SNS는 페이로드 기반 필터링을 위한 중첩된 필터 정책을 허용합니다.
+ 중첩된 정책의 경우 **리프 키**만 **5개의** 키 제한에 포함됩니다.

**키 제한에 대한 정책 예제:**

다음은 정책의 예제입니다.
+ 리프 키에는 `key_c` 및 `key_e` 등 두 가지가 있습니다.
+ `key_c`에는 중첩 수준이 **3**인 **4**개의 일치 연산자가 있고, `key_e`에는 중첩 수준이 **2**인 **3**개의 일치 연산자가 있습니다.

```
{
"key_a": {
    "key_b": {
        "key_c": ["value_one", "value_two", "value_three", "value_four"]
        }
    },
"key_d": {
    "key_e": ["value_one", "value_two", "value_three"]
    }
}
```

총 조합은 필터 정책의 각 키에 대한 중첩 수준과 일치 연산자 수의 곱으로 계산됩니다.

```
4(match operators of key_c) 
x 3(nested level of key_c) 
x 3(match operators of key_e) 
x 2(nested level of key_e) 
= 72
```

## 와일드카드 패턴 사용 지침
<a name="filter-policy-constraints-wildcard"></a>

 Amazon SQS는 와일드카드가 포함된 필터 정책을 등록할 때에 대한 보호를 구현하여 필터 정책이 너무 복잡하게 생성되지 않도록 합니다. 애플리케이션 성능에 영향을 미칠 수 있기 때문입니다.

**패턴 구조**

필드에는 하나 이상의 패턴이 포함됩니다. 다음 예제에서는 두 가지 패턴을 사용하는 필드를 보여줍니다.

```
{
    "greeting": [
      {"anything-but": {"prefix": "Hello"}},
      {"wildcard": "H*"}
    ] // 2 patterns
  }
```

**복잡성 규칙**
+  모든 필드의 총 와일드카드 복잡성은 100점을 초과해서는 안 됩니다.
+  패턴당 최대 3개의 와일드카드 

**복잡성 계산**
+  필드 복잡성 = `(Sum of pattern points)`× `(Number of patterns)` 
+ 패턴 포인트:

   단일 와일드카드: 1점 

   다중 와일드카드: 각각 3점 

   Anything-but: 1점 

  다음은 복잡성 계산의 예제입니다.

  ```
  {
    "filename": [
      {"wildcard": "*.txt"},     // 1 point
      {"wildcard": "log*"}      // 1 point
    ]                           // Total: (1 + 1) × 2 = 4 points
  }
  ```

# AND/OR 로직
<a name="and-or-logic"></a>

필터 정책에서 AND/OR 로직을 사용하여 Amazon SNS의 메시지 속성 또는 본문 속성을 일치시킵니다. 이를 통해 보다 정확하고 유연한 메시지 필터링이 가능합니다.

## AND 로직
<a name="and-logic"></a>

여러 속성 이름을 사용하여 AND 로직을 적용할 수 있습니다.

다음 정책을 살펴보겠습니다.

```
{
  "customer_interests": ["rugby"],
  "price_usd": [{"numeric": [">", 100]}]
}
```

이 속성은 `rugby`로 설정된 `customer_interests` 값 *그리고* 100을 초과하는 값으로 설정된 `price_usd` 값을 갖는 모든 메시지 속성 또는 메시지 본문 속성과 일치합니다.

**참고**  
동일한 속성의 값에는 AND 로직을 적용할 수 없습니다.

## OR 로직
<a name="or-logic"></a>

속성 이름에 여러 값을 할당하여 OR 로직을 적용할 수 있습니다.

다음 정책을 살펴보겠습니다.

```
{
   "customer_interests": ["rugby", "football", "baseball"]
}
```

이 속성은 `customer_interests` 값이 `rugby`, `football` *또는* `baseball`로 설정된 모든 메시지 속성 또는 메시지 본문 속성과 일치합니다.

## OR 연산자
<a name="or-operator"></a>

`"$or"` 연산자를 사용해 필터 정책을 명시적으로 정의하여 정책에 있는 여러 속성 간의 OR 관계를 표현할 수 있습니다.

Amazon SNS는 정책이 다음 조건을 모두 충족하는 경우에만 `"$or"` 관계를 인식합니다. 이러한 조건이 모두 충족되지 않으면 `"$or"`은 정책의 다른 문자열과 마찬가지로 일반 속성 이름으로 처리됩니다.
+ 규칙에 `"$or"` 필드 속성이 있고 그 뒤에 배열이 있습니다(예: `“$or” : []`).
+ `"$or"` 배열에 최소 두 개의 객체가 있습니다. `"$or": [{}, {}]` 
+ `"$or"` 배열의 모든 객체에 예약된 키워드인 필드 이름이 없습니다.

그렇지 않으면 `"$or"`는 정책의 다른 문자열과 마찬가지로 일반 속성 이름으로 처리됩니다.

숫자와 접두사는 예약된 키워드이므로 다음 정책은 OR 관계로 구문 분석되지 않습니다.

```
{ 
   "$or": [ {"numeric" : 123}, {"prefix": "abc"} ] 
}
```

**`OR` 연산자 예제**

표준 `OR`:

```
{
  "source": [ "aws.cloudwatch" ], 
  "$or": [
    { "metricName": [ "CPUUtilization" ] },
    { "namespace": [ "AWS/EC2" ] }
  ] 
}
```

이 정책의 필터 로직은 다음과 같습니다.

```
"source" && ("metricName" || "namespace")
```

이는 다음 메시지 속성 중 하나와 일치합니다.

```
"source": {"Type": "String", "Value": "aws.cloudwatch"},
"metricName": {"Type": "String", "Value": "CPUUtilization"}
```

또는

```
"source": {"Type": "String", "Value": "aws.cloudwatch"},
"namespace": {"Type": "String", "Value": "AWS/EC2"}
```

이 속성은 다음 메시지 본문 중 하나와도 일치합니다.

```
{
    "source": "aws.cloudwatch",
    "metricName": "CPUUtilization"
}
```

또는

```
{
    "source": "aws.cloudwatch",
    "namespace": "AWS/EC2"
}
```

### `OR` 관계를 포함하는 정책 제약 조건
<a name="or-operator-constraints"></a>

다음 정책을 살펴보겠습니다.

```
{
    "source": [ "aws.cloudwatch" ],
    "$or": [
      { "metricName": [ "CPUUtilization", "ReadLatency" ] },
      {
        "metricType": [ "MetricType" ] ,
        "$or" : [
          { "metricId": [ 1234, 4321 ] },
          { "spaceId": [ 1000, 2000, 3000 ] }
        ]
      }
    ]
  }
```

이 정책의 로직을 다음과 같이 단순화할 수도 있습니다.

```
("source" AND "metricName") 
OR 
("source" AND "metricType" AND "metricId") 
OR 
("source" AND "metricType" AND "spaceId")
```

OR 관계가 있는 정책의 복잡성 계산은 각 OR 문에 대한 조합 복잡성의 합으로 단순화할 수 있습니다.

따라서 전체 조합은 다음과 같습니다.

```
(source * metricName) + (source * metricType * metricId) + (source * metricType * spaceId)
= (1 * 2) + (1 * 1 * 2) + (1 * 1 * 3) 
= 7
```

`source`에는 값이 하나, `metricName`에는 값이 두 개, `metricType`에는 값이 하나, `metricId`에는 값이 두 개, `spaceId`에는 값이 세 개 있습니다.

다음과 같은 중첩 필터 정책을 고려해 봅니다.

```
{
    "$or": [
      { "metricName": [ "CPUUtilization", "ReadLatency" ] },
      { "namespace": [ "AWS/EC2", "AWS/ES" ] }
    ],
    "detail" : {
      "scope" : [ "Service" ],
      "$or": [
        { "source": [ "aws.cloudwatch" ] },
        { "type": [ "CloudWatch Alarm State Change"] }
      ]
    }
  }
```

이 정책의 로직을 다음과 같이 단순화할 수 있습니다.

```
("metricName" AND ("detail"."scope" AND "detail"."source")
OR
("metricName" AND ("detail"."scope" AND "detail"."type")
OR
("namespace" AND ("detail"."scope" AND "detail"."source")
OR
("namespace" AND ("detail"."scope" AND "detail"."type")
```

총 조합 계산은 키의 중첩 수준을 고려해야 한다는 점을 제외하고 중첩되지 않은 정책과 동일합니다.

따라서 전체 조합은 다음과 같습니다.

```
(2 * 2 * 2) + (2 * 2 * 2) + (2 * 2 * 2) + (2 * 2 * 2) = 32
```

`metricName`에는 두 개의 값이 있고, `namespace`에는 두 개의 값이 있고, `scope`는 하나의 값이 있는 2수준 중첩 키이고, `source`는 하나의 값이 있는 2수준 중첩 키이며, `type`은 하나의 값이 있는 2수준 중첩 키입니다.

# 키 일치
<a name="attribute-key-matching"></a>

필터 정책의 `exists` 연산자를 사용하여 특정 속성이 있는지 여부에 따라 수신 메시지를 일치시킵니다.
+ `exists`는 리프 노드(구조의 최종 속성)에서만 작동합니다.
+ 중첩된 JSON 구조 내의 중간 노드에는 적용되지 않습니다.
+ `"exists": true`를 사용하여 지정된 속성을 포함하는 수신 메시지를 일치시킬 수 있습니다. 키는 null이 아니고 비어 있지 않은 값을 가져야 합니다.

  예를 들어, 다음 정책 속성은 `true` 값을 지닌 `exists` 연산자를 사용합니다.

  ```
  "store": [{"exists": true}]
  ```

  이 속성은 다음과 같이 `store` 속성 키가 있는 모든 메시지 속성 목록과 일치합니다.

  ```
  "store": {"Type": "String", "Value": "fans"}
  "customer_interests": {"Type": "String.Array", "Value": "[\"baseball\", \"basketball\"]"}
  ```

  이 속성은 다음 메시지 본문 중 하나와 일치합니다.

  ```
  {
      "store": "fans"
      "customer_interests": ["baseball", "basketball"]
  }
  ```

  그러나 다음과 같이 `store` 속성 키가 *없는* 메시지 속성 목록과는 일치하지 않습니다.

  ```
  "customer_interests": {"Type": "String.Array", "Value": "[\"baseball\", \"basketball\"]"}
  ```

  다음 메시지 본문과도 일치하지 않습니다.

  ```
  {
      "customer_interests": ["baseball", "basketball"]
  }
  ```
+ `"exists": false`를 사용하여 지정된 속성을 포함하지 *않는* 수신 메시지를 일치시킬 수 있습니다.
**참고**  
`"exists": false`는 하나 이상의 속성이 있는 경우에만 일치합니다. 속성 세트가 비어 있으면 필터가 일치하지 않습니다.

  예를 들어, 다음 정책 속성은 `false` 값을 지닌 `exists` 연산자를 사용합니다.

  ```
  "store": [{"exists": false}]
  ```

  이 속성은 다음과 같이 `store` 속성 키가 있는 모든 메시지 속성 목록과 일치하지 *않습니다*.

  ```
  "store": {"Type": "String", "Value": "fans"}
  "customer_interests": {"Type": "String.Array", "Value": "[\"baseball\", \"basketball\"]"}
  ```

  또한 다음 메시지 본문과도 일치하지 않습니다.

  ```
  {
      "store": "fans"
      "customer_interests": ["baseball", "basketball"]
  }
  ```

  그러나 다음과 같이 `store` 속성 키가 *없는* 모든 메시지 속성 목록과 일치합니다.

  ```
  "customer_interests": {"Type": "String.Array", "Value": "[\"baseball\", \"basketball\"]"}
  ```

  이 속성은 다음 메시지 본문과도 일치합니다.

  ```
  {
      "customer_interests": ["baseball", "basketball"]
  }
  ```

# 숫자 값 일치
<a name="numeric-value-matching"></a>

숫자 값을 메시지 속성 값이나 메시지 본문 속성 값과 일치시켜 메시지를 필터링합니다. 숫자 값은 JSON 정책에서 큰따옴표로 묶지 않습니다. 필터링에 다음과 같은 숫자 작업을 사용할 수 있습니다.

**참고**  
접두사는 *문자열* 일치에 대해서만 지원됩니다.

## 정확한 일치
<a name="numeric-exact-matching"></a>

정책 속성 값이 키워드 `numeric`과 연산자 `=`를 포함하는 경우, 동일한 이름과 동일한 숫자 값을 가지고 있는 모든 메시지 속성 또는 메시지 본문 속성값과 일치합니다.

다음 정책 속성을 살펴보겠습니다.

```
"price_usd": [{"numeric": ["=",301.5]}]
```

이 속성은 다음 메시지 속성 중 하나와 일치합니다.

```
"price_usd": {"Type": "Number", "Value": 301.5}
```

```
"price_usd": {"Type": "Number", "Value": 3.015e2}
```

이 속성은 다음 메시지 본문 중 하나와도 일치합니다.

```
{
   "price_usd": 301.5
}
```

```
{
   "price_usd": 3.015e2
}
```

## Anything-but 일치
<a name="numeric-anything-but-matching"></a>

정책 속성 값에 키워드 `anything-but`가 포함되어 있으면 정책 속성 값을 포함하지 *않는* 모든 메시지 속성 또는 메시지 본문 속성값과 일치합니다.

다음 정책 속성을 살펴보겠습니다.

```
"price": [{"anything-but": [100, 500]}]
```

이 속성은 다음 메시지 속성 중 하나와 일치합니다.

```
"price": {"Type": "Number", "Value": 101}
```

```
"price": {"Type": "Number", "Value": 100.1}
```

이 속성은 다음 메시지 본문 중 하나와도 일치합니다.

```
{
   "price": 101
}
```

```
{
   "price": 100.1
}
```

또한 다음 메시지 속성과 일치합니다(`100` 또는 `500`이 *아닌* 값이 포함되어 있기 때문).

```
"price": {"Type": "Number.Array", "Value": "[100, 50]"}
```

또한 다음 메시지 본문과도 일치합니다(`100` 또는 `500`이 *아닌* 값이 포함되어 있기 때문).

```
{
   "price": [100, 50]
}
```

그러나 다음 메시지 속성과는 일치하지 않습니다.

```
"price": {"Type": "Number", "Value": 100}
```

다음 메시지 본문과도 일치하지 않습니다.

```
{
   "price": 100
}
```

## 값 범위 일치
<a name="numeric-value-range-matching"></a>

연산자 `=` 외에도, 숫자 정책 속성은 다음 연산자를 포함할 수 있습니다. `<`, `<=`, `>` 및 `>=`.

다음 정책 속성을 살펴보겠습니다.

```
"price_usd": [{"numeric": ["<", 0]}]
```

이 속성은 음수 값을 갖는 모든 메시지 속성 또는 메시지 본문 속성과 일치합니다.

다른 메시지 속성을 살펴보겠습니다.

```
"price_usd": [{"numeric": [">", 0, "<=", 150]}]
```

이 속성은 최대 150까지의 양수를 갖는 모든 메시지 속성 또는 메시지 본문 속성과 일치합니다.

# 문자열 값 일치
<a name="string-value-matching"></a>

문자열 값을 메시지 속성 값이나 메시지 본문 속성 값과 일치시켜 메시지를 필터링합니다. 문자열 값은 JSON 정책에서 큰따옴표로 묶습니다. 다음 문자열 작업을 사용하여 메시지 속성 또는 메시지 본문 속성을 일치시킬 수 있습니다.

## 정확한 일치
<a name="string-exact-matching"></a>

정책 속성 값이 하나 이상의 메시지 속성 값과 일치하는 경우 정확한 일치가 발생합니다. `String.Array` 유형 속성의 경우 배열의 각 요소는 일치를 위해 별도의 문자열로 처리됩니다.

다음 정책 속성을 살펴보겠습니다.

```
"customer_interests": ["rugby", "tennis"]
```

이 속성은 다음 메시지 속성과 일치합니다.

```
"customer_interests": {"Type": "String", "Value": "rugby"}
```

```
"customer_interests": {"Type": "String", "Value": "tennis"}
```

```
"customer_interests": {"Type": "String.Array", "Value": "[\"rugby\", \"tennis\"]"}
```

또한 다음 메시지 본문과도 일치합니다.

```
{
   "customer_interests": "rugby"
}
```

```
{
   "customer_interests": "tennis"
}
```

그러나 다음 메시지 속성과는 일치하지 않습니다.

```
"customer_interests": {"Type": "String", "Value": "baseball"}
```

```
"customer_interests": {"Type": "String.Array", "Value": "[\"baseball\"]"}
```

다음 메시지 본문과도 일치하지 않습니다.

```
{
   "customer_interests": "baseball"
}
```

## Anything-but 일치
<a name="string-anything-but-matching"></a>

정책 속성 값에 키워드 `anything-but`가 포함되어 있으면 정책 속성 값을 포함하지 *않는* 모든 메시지 속성 또는 메시지 본문 값과 일치합니다. `anything-but`는 `"exists": false`와 함께 사용할 수 있습니다. `String.Array` 유형 속성의 경우 정책 속성에 나열된 배열 요소가 없는 경우 일치합니다.

다음 정책 속성을 살펴보겠습니다.

```
"customer_interests": [{"anything-but": ["rugby", "tennis"]}]
```

이 속성은 다음 메시지 속성 중 하나와 일치합니다.

```
"customer_interests": {"Type": "String", "Value": "baseball"}
```

```
"customer_interests": {"Type": "String", "Value": "football"}
```

```
"customer_interests": {"Type": "String.Array", "Value": "[\"rugby\", \"baseball\"]"}
```

이 속성은 다음 메시지 본문 중 하나와도 일치합니다.

```
{
   "customer_interests": "baseball"
}
```

```
{
   "customer_interests": "football"
}
```

또한 다음 메시지 속성과 일치합니다(`rugby` 또는 `tennis`이 *아닌* 값이 포함되어 있기 때문).

```
"customer_interests": {"Type": "String.Array", "Value": "[\"rugby\", \"baseball\"]"}
```

또한 다음 메시지 본문과도 일치합니다(`rugby` 또는 `tennis`가 아닌 값이 포함되어 있기 때문).

```
{
   "customer_interests": ["rugby", "baseball"]
}
```

그러나 다음 메시지 속성과는 일치하지 않습니다.

```
"customer_interests": {"Type": "String", "Value": "rugby"}
```

```
"customer_interests": {"Type": "String.Array", "Value": "[\"rugby\"]"}
```

다음 메시지 본문과도 일치하지 않습니다.

```
{
   "customer_interests": ["rugby"]
}
```

**접두사 `anything-but` 사용**

문자열 일치의 경우 `anything-but` 연산자와 함께 접두사를 사용할 수도 있습니다. 예를 들어 다음 정책 속성은 `order-` 접두사를 거부합니다.

```
"event":[{"anything-but": {"prefix": "order-"}}]
```

이 속성은 다음 속성 중 하나와 일치합니다.

```
"event": {"Type": "String", "Value": "data-entry"}
```

```
"event": {"Type": "String", "Value": "order_number"}
```

이 속성은 다음 메시지 본문 중 하나와도 일치합니다.

```
{
   "event": "data-entry"
}
```

```
{
   "event": "order_number"
}
```

그러나 다음 메시지 속성과는 일치하지 않습니다.

```
"event": {"Type": "String", "Value": "order-cancelled"}
```

다음 메시지 본문과도 일치하지 않습니다.

```
{
   "event": "order-cancelled"
}
```

**anything-but 와일드카드**

다음 정책 속성은 `*ball` 와일드카드를 거부합니다.

```
"customer_interests" : [{ "anything-but": { "wildcard": "*ball" }}]
```

이 속성은 다음 속성과 일치합니다.

```
{"customer_interests": ["hockey", "rugby", "soccer] }
```

그러나 다음 메시지 속성과는 일치하지 않습니다.

```
{"customer_interests": ["baseball", "basketball"] }
```

**anything-but 접미사** 

다음 정책 속성은 `-ball`

 접미사를 거부합니다.

```
"customer_interests": [ { "anything-but": { "suffix": "ball" } } ]
```

이 속성은 다음 속성과 일치합니다.

```
{"customer_interests": ["hockey", "rugby", "soccer] }
```

그러나 다음 메시지 속성과는 일치하지 않습니다.

```
 {"customer_interests": ["baseball", "basketball"] }
```

## Equals-ignore-case 일치
<a name="string-equals-ignore"></a>

정책 속성이 키워드 `equals-ignore-case`를 포함하고 있는 경우, 모든 메시지 속성 또는 본문 속성 값에 대해 대소문자를 구분하지 않는 일치 연산을 수행합니다.

다음 정책 속성을 살펴보겠습니다.

```
"customer_interests": [{"equals-ignore-case": "tennis"}]
```

이 속성은 다음 메시지 속성 중 하나와 일치합니다.

```
"customer_interests": {"Type": "String", "Value": "TENNIS"}
```

```
"customer_interests": {"Type": "String", "Value": "Tennis"}
```

이 속성은 다음 메시지 본문 중 하나와도 일치합니다.

```
{
    "customer_interests": "TENNIS"
}
```

```
{
    "customer_interests": "teNnis"
{
```

## IP 주소 일치
<a name="string-address-matching"></a>

`cidr` 연산자를 사용하여 수신 메시지가 특정 IP 주소 또는 서브넷에서 발생하는지 확인할 수 있습니다.

다음 정책 속성을 살펴보겠습니다.

```
"source_ip":[{"cidr": "10.0.0.0/24"}]
```

이 속성은 다음 메시지 속성 중 하나와 일치합니다.

```
"source_ip": {"Type": "String", "Value": "10.0.0.0"}
```

```
"source_ip": {"Type": "String", "Value": "10.0.0.255"}
```

이 속성은 다음 메시지 본문 중 하나와도 일치합니다.

```
{
   "source_ip": "10.0.0.0"
}
```

```
{
   "source_ip": "10.0.0.255"
}
```

그러나 다음 메시지 속성과는 일치하지 않습니다.

```
"source_ip": {"Type": "String", "Value": "10.1.1.0"}
```

다음 메시지 본문과도 일치하지 않습니다.

```
{
   "source_ip": "10.1.1.0"
}
```

## 접두사 일치
<a name="string-prefix-matching"></a>

정책 속성이 키워드 `prefix`를 포함하고 있는 경우, 이 값은 메시지 속성 또는 지정된 문자로 시작하는 모든 메시지 속성 값과 일치합니다.

다음 정책 속성을 살펴보겠습니다.

```
"customer_interests": [{"prefix": "bas"}]
```

이 속성은 다음 메시지 속성 중 하나와 일치합니다.

```
"customer_interests": {"Type": "String", "Value": "baseball"}
```

```
"customer_interests": {"Type": "String", "Value": "basketball"}
```

이 속성은 다음 메시지 본문 중 하나와도 일치합니다.

```
{
   "customer_interests": "baseball"
}
```

```
{
   "customer_interests": "basketball"
}
```

그러나 다음 메시지 속성과는 일치하지 않습니다.

```
"customer_interests": {"Type": "String", "Value": "rugby"}
```

다음 메시지 본문과도 일치하지 않습니다.

```
{
   "customer_interests": "rugby"
}
```

## 접미사 일치
<a name="string-suffix-matching"></a>

정책 속성이 키워드 `suffix`를 포함하고 있는 경우, 이 값은 메시지 속성 또는 지정된 문자로 끝나는 모든 메시지 속성 값과 일치합니다.

다음 정책 속성을 살펴보겠습니다.

```
"customer_interests": [{"suffix": "ball"}]
```

이 속성은 다음 메시지 속성 중 하나와 일치합니다.

```
"customer_interests": {"Type": "String", "Value": "baseball"}
```

```
"customer_interests": {"Type": "String", "Value": "basketball"}
```

이 속성은 다음 메시지 본문 중 하나와도 일치합니다.

```
{
    "customer_interests": "baseball"
}
```

```
{
    "customer_interests": "basketball"
}
```

그러나 다음 메시지 속성과는 일치하지 않습니다.

```
"customer_interests": {"Type": "String", "Value": "rugby"}
```

다음 메시지 본문과도 일치하지 않습니다.

```
{
    "customer_interests": "rugby"
}
```

## 와일드카드
<a name="string-value-wildcard"></a>

 와일드카드 문자(\$1)를 사용하여 이벤트 패턴의 문자열 값을 매칭할 수 있습니다.

다음 정책은 와일드카드(\$1) 문자를 사용합니다.

```
"customer_interests": [ { "wildcard": "*ball" } ]
```

이 속성은 다음 속성과 일치합니다.

```
{"customer_interests": ["baseball", "basketball"] }
```