授权您的设备在数据平面上安全地使用 AWS IoT 作业 - AWS IoT Core

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

授权您的设备在数据平面上安全地使用 AWS IoT 作业

要授权您的设备在数据层面上安全地与 AWS IoT 任务交互,您必须使用 AWS IoT Core 策略。 AWS IoT Core 职位政策是包含政策声明的JSON文档。这些策略还使用效果操作资源元素,并遵循与IAM策略类似的惯例。有关元素的更多信息,请参阅IAM用户指南中的IAMJSON策略元素参考

这些策略可以与MQTT和HTTPS协议一起使用,并且必须使用TCP或TLS相互身份验证才能对设备进行身份验证。下面展示了如何在不同的通信协议中使用这些策略。

警告

我们建议您不要在IAM策略或 AWS IoT Core 策略"Action": ["iot:*"]中使用通配符权限。使用通配符权限不是推荐的安全最佳实践。有关更多信息,请参阅AWS IoT 政策过于宽松

AWS IoT Core MQTT协议策略

AWS IoT Core MQTT协议策略授予您使用作业设备MQTTAPI操作的权限。这些MQTTAPI操作用于处理为作业命令保留MQTT的主题。有关这些API操作的更多信息,请参阅任务设备 MQTT API 操作

MQTT策略使用诸如iot:Connectiot:Publishiot:Subscribe、和之类的策略操作iot:Receieve来处理作业主题。这些策略允许您连接到消息代理、订阅作业MQTT主题以及在设备和云端之间发送和接收MQTT消息。有关这些操作的更多信息,请参阅AWS IoT Core 政策行动

有关 AWS IoT 作业主题的信息,请参阅任务主题

下面的示例显示如何使用 iot:Publishiot:Subscribe 发布和订阅任务和任务执行。

在此示例中:

  • region 和你的 AWS 区域,比如us-east-1

  • account-id 用你的 AWS 账户 电话号码,比如57EXAMPLE833

  • thing-name 用你瞄准工作的物联网事物的名字,例如MyIoTThing

{ "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/events/job/*", "arn:aws:iot:region:account-id:topic/$aws/events/jobExecution/*", "arn:aws:iot:region:account-id:topic/$aws/things/thing-name/jobs/*" ] } ], "Version": "2012-10-17" }

AWS IoT Core HTTPS协议策略

AWS IoT Core 数据层面的策略也可以使用带有TLS身份验证机制的HTTPS协议来授权您的设备。在数据层面,策略使用iotjobsdata:前缀来授权您的设备可以执行的任务API操作。例如,iotjobsdata:DescribeJobExecution策略操作向用户授予使用权限DescribeJobExecutionAPI。

注意

数据层面策略操作必须使用 iotjobsdata: 前缀。在控制面板上,操作必须使用 iot: 前缀。有关同时使用控制平面和数据平面策略操作时的策略示例IAM,请参阅IAM控制平面和数据平面的策略示例

下表显示了授权设备使用这些操作的 AWS IoT Core 策略API操作和权限列表。有关可在数据平面中执行的API操作的列表,请参见任务设备 HTTP API

注意

这些任务执行策略操作仅适用于HTTPTLS终端节点。如果您使用MQTT终端节点,则必须使用先前定义的MQTT策略操作。

AWS IoT Core 数据层面的策略操作
策略操作 API操作 资源类型 描述
iotjobsdata:DescribeJobExecution DescribeJobExecution
  • 作业

  • thing

表示检索任务执行的权限。每次请求检索任务执行时,都会检查 iotjobsdata:DescribeJobExecution 权限。
iotjobsdata:GetPendingJobExecutions GetPendingJobExecutions thing 表示一个权限,用于为事物检索未处于最终状态的任务的列表。每次请求检索该列表时,都会检查 iotjobsdata:GetPendingJobExecutions 权限。
iotjobsdata:StartNextPendingJobExecution StartNextPendingJobExecution thing 表示一个权限,用于为事物获取和启动下一个待处理任务执行。也即,将状态为 QUEUED 的任务执行更新为状态 IN_PROGRESS。每次请求启动下一个待处理任务执行,都会检查 iotjobsdata:StartNextPendingJobExecution 权限。
iotjobsdata:UpdateJobExecution UpdateJobExecution thing 表示更新任务执行的权限。每次请求更新任务执行的状态时,都会检查 iotjobsdata:UpdateJobExecution 权限。

以下是一个策略示例,该 AWS IoT Core 策略授予对任何资源在数据平面上执行API操作的权限。您可以将策略范围限定为特定资源,例如 IoT 事物。在您的示例中:

  • 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:region:account-id:thing/thing-name" } ] }

当您的物联网设备使用策略访问其中一项API操作时,可以举例说明何时必须使用这些 AWS IoT Core 策略,例如以下示例 DescribeJobExecutionAPI:

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