本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
授权您的设备在数据平面上安全地使用 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:Connect
、iot:Publish
、iot:Subscribe
和 iot:Receieve
)来处理任务主题。这些策略允许您连接到消息代理,订阅任务 MQTT 主题,以及在设备和云之间发送和接收 MQTT 消息。有关这些操作的更多信息,请参阅Amazon IoT Core 政策行动。
有关 Amazon IoT 作业主题的信息,请参阅任务主题。
下面的示例显示如何使用 iot:Publish
和 iot: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 |
|
表示检索任务执行的权限。每次请求检索任务执行时,都会检查 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