授权您的设备在数据平面上安全地使用 Amazon IoT 作业 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

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

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

警告

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

Amazon IoT Core MQTT 协议的策略

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

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

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

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

在此示例中:

  • 与您所在@@ 的地区 Amazon Web Services 区域,例如us-east-1

  • 带有您的 Amazon Web Services 账户 号码的@@ 账户 ID,例如。57EXAMPLE833

  • thing-name 替换为目标任务所属 IoT 事物的名称,例如 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" }

Amazon IoT Core HTTPS 协议的策略

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

注意

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

下表显示了授权设备使用 API 操作的 Amazon IoT Core 策略操作和权限列表。有关可以在数据层面执行的 API 操作的列表,请参阅任务设备 HTTP API

注意

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

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

  • thing

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

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

  • 你所在@@ 的地区, Amazon Web Services 区域 比如us-east-1

  • 带有您的 Amazon Web Services 账户 号码的@@ 账户 ID,例如。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:region:account-id:thing/thing-name" } ] }

必须使用这些策略的一个示例情形是:IoT 设备使用 Amazon IoT Core 策略来访问其中一个 API 操作,例如下面的 DescribeJobExecution API 示例:

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