本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
授权您的设备在数据平面上安全地使用 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:Connect
、iot:Publish
iot:Subscribe
、和之类的策略操作iot:Receieve
来处理作业主题。这些策略允许您连接到消息代理、订阅作业MQTT主题以及在设备和云端之间发送和接收MQTT消息。有关这些操作的更多信息,请参阅AWS IoT Core 政策行动。
有关 AWS IoT 作业主题的信息,请参阅任务主题。
下面的示例显示如何使用 iot:Publish
和 iot: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
策略操作向用户授予使用权限DescribeJobExecution
API。
注意
数据层面策略操作必须使用 iotjobsdata:
前缀。在控制面板上,操作必须使用 iot:
前缀。有关同时使用控制平面和数据平面策略操作时的策略示例IAM,请参阅IAM控制平面和数据平面的策略示例。
下表显示了授权设备使用这些操作的 AWS IoT Core 策略API操作和权限列表。有关可在数据平面中执行的API操作的列表,请参见任务设备 HTTP API。
注意
这些任务执行策略操作仅适用于HTTPTLS终端节点。如果您使用MQTT终端节点,则必须使用先前定义的MQTT策略操作。
策略操作 | API操作 | 资源类型 | 描述 |
---|---|---|---|
iotjobsdata:DescribeJobExecution |
DescribeJobExecution |
|
表示检索任务执行的权限。每次请求检索任务执行时,都会检查 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 策略,例如以下示例 DescribeJobExecution
API:
GET /things/thingName/jobs/jobId?executionNumber=executionNumber&includeJobDocument=includeJobDocument&namespaceId=namespaceId HTTP/1.1