

# 잘못 구성되었을 가능성이 있는 AWS IoT 정책
<a name="audit-chk-iot-misconfigured-policies"></a>

AWS IoT 정책이 잘못 구성되었을 가능성이 있는 것으로 확인되었습니다. 지나치게 허용적인 정책을 비롯하여 정책이 잘못 구성되면 의도하지 않은 리소스에 대한 디바이스 액세스를 허용하는 등의 보안 인시던트가 발생할 수 있습니다.

**잘못 구성되었을 가능성이 있는 AWS IoT 정책** 점검은 정책을 업데이트하기 전에 의도한 작업만 허용되는지 확인하라는 경고입니다.

이 점검은 CLI 및 API에서 `IOT_POLICY_POTENTIAL_MISCONFIGURATION_CHECK`와 같이 나타납니다.

**심각도:** 중간

## 세부 사항
<a name="audit-chk-iot-misconfigured-policies-details"></a>

이 점검에서 잘못 구성되었을 가능성이 있는 AWS IoT 정책이 발견되면 AWS IoT에서 다음 사유 코드가 반환됩니다.
+ POLICY\_CONTAINS\_MQTT\_WILDCARDS\_IN\_DENY\_STATEMENT
+ TOPIC\_FILTERS\_INTENDED\_TO\_DENY\_ALLOWED\_USING\_WILDCARDS

## 이것이 중요한 이유
<a name="audit-chk-iot-misconfigured-policies-why-it-matters"></a>

정책을 잘못 구성하면 디바이스에 필요한 것보다 더 많은 권한을 제공하여 의도하지 않은 결과를 초래할 수 있습니다. 리소스에 대한 액세스를 제한하고 보안 위협을 방지하기 위해 정책을 신중하게 고려하는 것이 좋습니다.

### 정책의 거부 명령문에 MQTT 와일드카드가 포함된 예제
<a name="example-section-id"></a>

**잘못 구성되었을 가능성이 있는 AWS IoT 정책** 점검은 거부 명령문에 MQTT 와일드카드 문자(`+` 또는 `#`)가 있는지 검사합니다. 와일드카드는 AWS IoT 정책에서 리터럴 문자열로 취급되므로 정책을 지나치게 허용적으로 만들 수 있습니다.

다음 예시는 정책에서 MQTT 와일드카드 `#`를 사용하여 `building/control_room` 관련 주제에 대한 구독을 거부하도록 작성되었습니다. 그러나 MQTT 와일드카드는 AWS IoT 정책에서 와일드카드의 의미가 없으며 디바이스가 `building/control_room/data1`을 구독할 수 있습니다.

**잘못 구성되었을 가능성이 있는 AWS IoT 정책** 점검을 수행하면 이 정책에 사유 코드 `POLICY_CONTAINS_MQTT_WILDCARDS_IN_DENY_STATEMENT`로 플래그가 지정됩니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/*"
        },
        {
            "Effect": "Deny",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/control_room/#"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/*"
        }
    ]
}
```

------

다음은 적절하게 구성된 정책의 예시입니다. 디바이스에는 `building/control_room/`의 하위 주제를 구독할 수 있는 권한이 없으며 `building/control_room/`의 하위 주제에서 메시지를 수신할 수 있는 권한이 없습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Subscribe",
      "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/*"
    },
    {
      "Effect": "Deny",
      "Action": "iot:Subscribe",
      "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/control_room/*"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Receive",
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/*"
    },
    {
      "Effect": "Deny",
      "Action": "iot:Receive",
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/control_room/*"
    }
  ]
}
```

------

### 와일드카드를 사용하여 허용을 거부하려고 하는 주제 필터 예시
<a name="example-section-id2"></a>

다음 예시 정책은 `building/control_room/*` 리소스를 거부하여 `building/control_room` 관련 주제에 대한 구독을 거부하도록 작성되었습니다. 그러나 디바이스는 `building/#`에 대한 구독 요청을 보내고 `building/control_room/data1`을 포함하여 `building`과 관련된 모든 주제에서 메시지를 받을 수 있습니다.

**잘못 구성되었을 가능성이 있는 AWS IoT 정책** 점검을 수행하면 이 정책에 사유 코드 `TOPIC_FILTERS_INTENDED_TO_DENY_ALLOWED_USING_WILDCARDS`로 플래그가 지정됩니다.

다음 예시 정책에는 `building/control_room topics` 주제에 대한 메시지를 수신할 수 있는 권한이 있습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/*"
        },
        {
            "Effect": "Deny",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/control_room/*"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/*"
        }
    ]
}
```

------

다음은 적절하게 구성된 정책의 예시입니다. 디바이스에는 `building/control_room/`의 하위 주제를 구독할 수 있는 권한이 없으며 `building/control_room/`의 하위 주제에서 메시지를 수신할 수 있는 권한이 없습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/*"
        },
        {
            "Effect": "Deny",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/control_room/*"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/*"
        },
        {
            "Effect": "Deny",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/control_room/*"
        }
    ]
}
```

------

**참고**  
이 점검에서는 오탐지(false positive)가 보고될 수 있습니다. 플래그가 지정된 정책을 평가하고 감사 억제를 사용하여 오탐지 리소스를 표시하는 것이 좋습니다.

## 수정 방법
<a name="audit-chk-iot-misconfigured-policies-how-to-fix"></a>

이 점점은 잘못 구성되었을 가능성이 있는 정책에 플래그를 지정하므로 오탐지가 발생할 수 있습니다. 나중에 플래그가 지정되지 않도록 [감사 억제](audit-finding-suppressions.md)를 사용하여 오탐지를 표시합니다.

또한 다음 단계에 따라 사물, 사물 그룹 또는 기타 개체에 연결된 규정 미준수 정책을 수정할 수 있습니다.

1. [CreatePolicyVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePolicyVersion.html)을 사용하여 새 규정 준수 정책 버전을 생성합니다. `setAsDefault` 플래그를 true로 설정합니다. (이로 인해 정책을 사용하는 모든 개체에 이 새 버전이 적용됩니다.)

   일반적인 사용 사례에 대한 AWS IoT 정책 생성 예시는 *AWS IoT Core 개발자 안내서*의 [게시 및 구독 정책 예제](https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html)를 참조하세요.

1. 연결된 모든 디바이스가 AWS IoT에 연결될 수 있는지 확인합니다. 디바이스를 연결할 수 없는 경우 [ SetPolicyVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_SetPolicyVersion.html)을 사용하여 기본 정책을 이전 버전으로 롤백하고 정책을 수정한 다음 다시 시도하세요.

완화 조치를 사용하면 다음을 수행할 수 있습니다.
+ 이 변경사항을 실행하려면 감사 결과에서 `REPLACE_DEFAULT_POLICY_VERSION` 완화 작업을 적용합니다.
+ Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

자세한 내용은 [완화 작업](dd-mitigation-actions.md) 섹션을 참조하세요.

**AWS IoT Core 개발자 안내서의 [IoT Core 정책 변수](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-variables.html)를 사용하여 정책에서 AWS IoT 리소스를 동적으로 참조합니다.