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