

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

# 다이렉트 메시징 정책 예제
<a name="direct-messaging-policy-examples"></a>

다이렉트 메시징을 사용하려면 특정 정책이 필요합니다. 다이렉트 메시징은 SendDirectMessage HTTP API를 사용하여 발신자로부터 MQTT 클라이언트 ID로 식별되는 단일 수신자로 메시지를 전송합니다. 이 섹션에서는 일반적인 다이렉트 메시징 사용을 허용하는 정책의 예를 제공합니다.

**Topics**
+ [특정 주제에 대해 특정 클라이언트에 직접 메시지를 보내는 정책](#dm-policy-send-specific)
+ [다이렉트 메시지 수신 정책](#dm-policy-receive)
+ [특정 주제에 대한 클라이언트에게 직접 메시지를 보내는 정책](#dm-policy-send-any-client)
+ [모든 주제의 모든 클라이언트에 직접 메시지를 보내는 정책](#dm-policy-send-any-client-any-topic)

## 특정 주제에 대해 특정 클라이언트에 직접 메시지를 보내는 정책
<a name="dm-policy-send-specific"></a>

발신자가 직접 메시지를 보내려면 대상 클라이언트 ID가 리소스인 `iot:SendDirectMessage` 권한이 발신자에게 있어야 합니다. `iot:Topic` 조건 키(선택 사항)는 발신자가 메시지를 보낼 수 있는 주제를 제한합니다.
+ SigV4-authenticated 백엔드 서버의 경우 IAM 정책에 추가합니다.
+ X.509 인증 IoT 디바이스의 AWS IoT Core 경우 정책에 추가합니다.
+ 사용자 지정 권한 부여자 인증 클라이언트의 경우 Lambda 함수는 `iot:Topic` 조건 키를 사용하여 대상 클라이언트 리소스`iot:SendDirectMessage`에 부여하는 정책 문서를 반환해야 합니다.

다음 정책은 클라이언트`device1`가 주제 `commands/reboot` 및 `myDevice`에 대해 클라이언트에 직접 메시지를 보내도록 허용합니다`commands/update`.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:SendDirectMessage",
            "Resource": "arn:aws:iot:us-west-2:123456789012:client/myDevice",
            "Condition": {
                "StringEquals": {
                    "iot:Topic": ["commands/reboot", "commands/update"]
                }
            }
        }
    ]
}
```

## 다이렉트 메시지 수신 정책
<a name="dm-policy-receive"></a>

수신자의 정책은 주제에 `iot:Receive`를 부여해야 합니다. 수신자는 `iot:Subscribe` 권한이 필요하지 않습니다.는 주제 구독 없이 직접 메시지를 AWS IoT Core 전송합니다. 수신기는 X.509 클라이언트 인증서(AWS IoT Core 정책) 또는 SigV4(IAM 정책)를 사용하여 인증할 수 있습니다. 두 경우 모두 수신 주제에 대한 `iot:Receive` 권한이 필요합니다.

다음 정책은 수신자 클라이언트가 주제 `commands/reboot` 및에 대한 직접 메시지를 수신`myDevice`하도록 허용합니다`commands/update`.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-west-2:123456789012:topic/commands/reboot"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-west-2:123456789012:topic/commands/update"
        }
    ]
}
```

다음 정책은 와일드카드를 사용하여 수신자가 `commands/` 접두사 아래의 모든 주제에 대한 다이렉트 메시지를 수신하도록 허용합니다.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-west-2:123456789012:topic/commands/*"
        }
    ]
}
```

**참고**  
수신자는 직접 메시지를 수신하기 전에에 대한 AWS IoT Core MQTT 연결을 설정해야 합니다. 직접 메시지는 오프라인 디바이스에 대해 대기열에 추가되지 않습니다.

## 특정 주제에 대한 클라이언트에게 직접 메시지를 보내는 정책
<a name="dm-policy-send-any-client"></a>

다음 정책은 발신자가 `commands/*` 접두사와 일치하는 주제에 대해서만 클라이언트에 직접 메시지를 보내도록 허용합니다. 이는 특정 명령 주제에 대해서만 디바이스에 연결해야 하는 플릿 관리 서비스에 유용합니다.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:SendDirectMessage",
            "Resource": "arn:aws:iot:us-west-2:123456789012:client/*",
            "Condition": {
                "StringLike": {
                    "iot:Topic": "commands/*"
                }
            }
        }
    ]
}
```

**참고**  
`iot:Topic` 조건 키는 `StringLike` 조건 연산자와 와일드카드 일치를 지원합니다.

## 모든 주제의 모든 클라이언트에 직접 메시지를 보내는 정책
<a name="dm-policy-send-any-client-any-topic"></a>

다음 정책은 발신자가 모든 주제의 모든 클라이언트에 직접 메시지를 보낼 수 있도록 허용합니다. 이는 백엔드 서비스에 무제한 액세스가 필요한 관리 또는 플릿 관리 사용 사례에 적합합니다.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:SendDirectMessage",
            "Resource": "arn:aws:iot:us-west-2:123456789012:client/*",
            "Condition": {
                "StringLike": {
                    "iot:Topic": "*"
                }
            }
        }
    ]
}
```