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

授权设备在数据层面上安全地使用 Amazon IoT Jobs

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

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

警告

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

MQTT 协议的 Amazon IoT Core 策略

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

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

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

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

在此示例中:

  • region 替换为您的 Amazon Web Services 区域,例如 us-east-1

  • account-id 替换为您的 Amazon Web Services 账户编号,例如 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" }

HTTPS 协议的 Amazon IoT Core 策略

数据层面上的 Amazon IoT Core 策略还可以将 HTTPS 协议与 TLS 身份验证机制结合使用来向您的设备授权。在数据层面上,策略使用 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 事物。在您的示例中:

  • region 替换为您的 Amazon Web Services 区域,例如 us-east-1

  • account-id 替换为您的 Amazon Web Services 账户编号,例如 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