

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 授权您的设备在数据平面上安全地使用 AWS IoT 作业
<a name="iot-data-plane-jobs"></a>

要授权您的设备在数据层面上安全地与 AWS IoT 任务交互，您必须使用 AWS IoT Core 策略。 AWS IoT Core 作业策略是包含政策声明的 JSON 文档。这些策略还使用*效果*、*操作* 和*资源* 元素，并遵循与 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 策略过于宽容](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*和你的 AWS 区域，比如`us-east-1`。
+ *account-id*用你的 AWS 账户 电话号码，比如`57EXAMPLE833`。
+ *thing-name*写上你瞄准工作的物联网事物的名称，例如`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/zh_cn/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>

以下是一个策略示例，该 AWS IoT Core 策略授予对任何资源在数据平面 API 操作上执行操作的权限。您可以将策略范围限定为特定资源，例如物联网事物。在您的示例中：
+ *region*和你的，比 AWS 区域 如`us-east-1`。
+ *account-id*用你的 AWS 账户 电话号码，比如`57EXAMPLE833`。
+ *thing-name*用物联网的名字命名，比如`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
```