

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

# 디바이스가 데이터 영역에서 AWS IoT 작업을 안전하게 사용하도록 권한 부여
<a name="iot-data-plane-jobs"></a>

디바이스가 데이터 영역에서 AWS IoT 작업과 안전하게 상호 작용할 수 있도록 권한을 부여하려면 AWS IoT Core policy. AWS IoT Core policies for job은 정책 문이 포함된 JSON 문서입니다. 이러한 정책은 *Effect*, *Action*, *Resource* 요소도 사용하며 IAM 정책과 유사한 규칙을 따릅니다. 요소에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM JSON 정책 요소 참조](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_elements.html)를 참조하세요.

정책은 MQTT 및 HTTPS 프로토콜 모두에서 사용할 수 있으며 TCP 또는 TLS 상호 인증을 사용하여 디바이스를 인증해야 합니다. 다음은 서로 다른 통신 프로토콜에서 이러한 정책을 사용하는 방법을 보여줍니다.

**주의**  
`"Action": ["iot:*"]` IAM 정책 또는 AWS IoT Core 정책과 같은 와일드카드 권한을 사용하지 않는 것이 좋습니다. 와일드카드 권한을 사용하는 것은 권장되는 보안 모범 사례가 아닙니다. 자세한 내용은 [AWS IoT policies overly permissive](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-iot-policy-permissive.html)를 참조하세요.

## AWS IoT Core MQTT 프로토콜에 대한 정책
<a name="iot-jobs-data-mqtt"></a>

AWS IoT Core MQTT 프로토콜에 대한 정책은 작업 디바이스 MQTT API 작업을 사용할 수 있는 권한을 부여합니다. MQTT API 작업은 작업 명령에 예약된 MQTT 주제로 작업하는 데 사용됩니다. 이러한 API 작업에 대한 자세한 내용은 [작업 디바이스 MQTT API 작업](jobs-mqtt-api.md) 섹션을 참조하세요.

MQTT 정책은 `iot:Connect`, `iot:Publish`, `iot:Subscribe`, `iot:Receieve` 등의 정책 작업을 사용하여 작업 주제와 함께 작동합니다. 이러한 정책을 사용하면 메시지 브로커에 연결하고, 작업 MQTT 주제를 구독하고, 디바이스와 클라우드 간에 MQTT 메시지를 송수신할 수 있습니다. 이러한 작업에 대한 자세한 내용은 [AWS IoT Core 정책 작업](iot-policy-actions.md) 섹션을 참조하세요.

 AWS IoT 작업 주제에 대한 자세한 내용은 섹션을 참조하세요[작업 주제](reserved-topics.md#reserved-topics-job).

### 기본 MQTT 정책 예시
<a name="iot-jobs-mqtt-example"></a>

다음 예시에서는 `iot:Publish` 및 `iot:Subscribe`을(를) 사용하여 작업과 작업 실행을 게시하고 구독하는 방법을 보여줍니다.

이 예에서 다음과 같이 대체합니다.
+ *region* with your AWS 리전, 예: `us-east-1`.
+ *account-id*와 같은 사용자 AWS 계정 번호`57EXAMPLE833`.
+ *thing-name*을 작업의 대상인 IoT 사물의 이름으로 대체합니다. 예: `MyIoTThing`.

****  

```
{
    "Version":"2012-10-17",		 	 	 

    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish",
                "iot:Subscribe"
            ],
            "Resource": [
            "arn:aws:iot:us-east-1:123456789012:topic/$aws/events/job/*",
    "arn:aws:iot:us-east-1:123456789012:topic/$aws/events/jobExecution/*",
    "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thing-123/jobs/*"
            ]
        }
    ]
}
```

## AWS IoT Core HTTPS 프로토콜에 대한 정책
<a name="iot-jobs-data-http"></a>

AWS IoT Core 데이터 영역의 정책은 TLS 인증 메커니즘과 함께 HTTPS 프로토콜을 사용하여 디바이스를 승인할 수도 있습니다. 데이터 영역에서 정책은 `iotjobsdata:` 접두사를 사용하여 디바이스가 수행할 수 있는 작업 API 작업에 권한을 부여합니다. 예를 들어, `iotjobsdata:DescribeJobExecution` 정책 작업은 사용자에게 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) API를 사용할 권한을 부여합니다.

**참고**  
데이터 영역 정책 작업은 `iotjobsdata:` 접두사를 사용해야 합니다. 제어 영역에서 작업은 `iot:` 접두사를 사용해야 합니다. 제어 영역과 데이터 영역 정책 작업이 모두 사용되는 경우 IAM 정책 예시는 [제어 영역과 데이터 영역 모두에 대한 IAM 정책 예시](iam-policy-users-jobs.md#iam-data-plane-example2) 섹션을 참조하세요.

### 정책 작업
<a name="iot-data-plane-actions"></a>

다음 표에는 디바이스가 API 작업을 사용하도록 권한을 부여하기 위한 AWS IoT Core 정책 작업 및 권한 목록이 나와 있습니다. 데이터 영역에서 수행할 수 있는 API 작업 목록은 [작업 디바이스 HTTP API](jobs-http-device-api.md) 섹션을 참조하세요.

**참고**  
이 작업 실행 정책 작업은 HTTP TLS 엔드포인트에만 적용됩니다. MQTT 엔드포인트를 사용할 경우 앞서 정의한 MQTT 정책 작업을 사용해야 합니다.


**AWS IoT Core 데이터 영역의 정책 작업**  

| 정책 작업 | API 작업 | 조건 키 | 설명 | 
| --- | --- | --- | --- | 
| iotjobsdata:DescribeJobExecution | [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/iot-data-plane-jobs.html)  | 작업 실행을 검색할 수 있는 권한을 나타냅니다. 작업 실행 검색을 요청할 때마다 iotjobsdata:DescribeJobExecution 권한이 확인됩니다. | 
| iotjobsdata:GetPendingJobExecutions | [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html) | thing | 사물에 대해 단말 상태가 아닌 작업의 목록을 검색할 수 있는 권한을 나타냅니다. 목록 검색이 요청될 때마다 iotjobsdata:GetPendingJobExecutions 권한이 확인됩니다. | 
| iotjobsdata:StartNextPendingJobExecution | [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html) | thing | 사물에 대해 대기 중인 다음 작업 실행을 가져오고 시작할 수 있는 권한을 나타냅니다. (즉, QUEUED에서 IN\$1PROGRESS 상태로 작업 실행을 업데이트함) 대기 중인 다음 작업의 실행 시작이 요청될 때마다 iotjobsdata:StartNextPendingJobExecution 권한이 확인됩니다. | 
| iotjobsdata:UpdateJobExecution | [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html) | thing | 작업 실행을 업데이트할 수 있는 권한을 나타냅니다. 작업 실행 상태 업데이트가 요청될 때마다 iotjobsdata:UpdateJobExecution 권한이 확인됩니다. | 

### 기본 정책 예시
<a name="iot-data-plane-example"></a>

다음은 모든 리소스에 대한 데이터 영역 API 작업에서 작업을 수행할 수 있는 권한을 부여하는 AWS IoT Core 정책의 예입니다. IoT 사물과 같은 특정 리소스로 정책 범위를 지정할 수 있습니다. 이 예에서 다음과 같이 대체합니다.
+  AWS 리전 와 같은가 있는 *리전*`us-east-1`.
+ *account-id*와 같은 사용자 AWS 계정 번호`57EXAMPLE833`.
+ *thing-name*을 IoT 사물의 이름으로 대체합니다. 예: `MyIoTthing`.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "iotjobsdata:GetPendingJobExecutions",
                "iotjobsdata:StartNextPendingJobExecution",
                "iotjobsdata:DescribeJobExecution",
                "iotjobsdata:UpdateJobExecution"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:iot:us-east-1:123456789012:thing/thing-123"
        }
    ]
}
```

이러한 정책을 사용해야 하는 경우는 IoT 디바이스가 AWS IoT Core 정책을 사용하여 이 API 작업 중 하나에 액세스하는 경우입니다. 예를 들면 `DescribeJobExecution` API의 다음 예와 같습니다.

```
GET /things/thingName/jobs/jobId?executionNumber=executionNumber&includeJobDocument=includeJobDocument&namespaceId=namespaceId HTTP/1.1
```