本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
向用户和云服务授权以使用 Amazon IoT Jobs
要向用户和云服务授权,您必须同时在控制面板和数据层面上使用 IAM 策略。这些策略必须与 HTTPS 协议一起使用,并且必须使用 Amazon 签名版本 4 身份验证(端口 443)对用户进行身份验证。
注意
Amazon IoT Core 不得在控制平面上使用策略。只有 IAM 策略用于向用户或云服务授权。有关使用所需策略类型的更多信息,请参阅 Amazon IoT 任务必需的策略类型。
IAM 策略是包含策略声明的 JSON 文档。策略语句使用效果、操作 和资源 元素以指定资源、允许或拒绝的操作以及允许或拒绝操作的条件。有关更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素参考。
警告
我们建议您不要使用通配符权限,例如"Action":
                    ["iot:*"]在 IAM 策略或 Amazon IoT Core 策略中使用通配符权限。使用通配符权限不是推荐的安全最佳实践。有关更多信息,请参阅 Amazon IoT
策略过于宽容。
控制面板上的 IAM 策略
在控制面板上,IAM 策略对操作使用 iot: 前缀,以便授权执行相应的任务 API 操作。例如,iot:CreateJob 策略操作授予用户使用 CreateJob API 的权限。
下表显示了 IAM 策略操作和使用 API 操作的权限的列表。有关资源类型的信息,请参阅由定义的资源类型 Amazon IoT。有关 Amazon IoT 操作的更多信息,请参阅由定义的操作 Amazon IoT。
| 策略操作 | API 操作 | 资源类型 | 说明 | 
|---|---|---|---|
| iot:AssociateTargetsWithJob | AssociateTargetsWithJob | 
 | 表示将组与连续任务关联的权限。每次请求关联目标时,都会检查 iot:AssociateTargetsWithJob权限。 | 
| iot:CancelJob | CancelJob | 作业 | 表示取消任务的权限。每次请求取消任务时,都会检查 iot:CancelJob权限。 | 
| iot:CancelJobExecution | CancelJobExecution | 
 | 表示取消任务执行的权限。每次请求取消任务执行时,都会检查 iot: CancelJobExecution权限。 | 
| iot:CreateJob | CreateJob | 
 | 表示创建任务的权限。每次请求创建任务时,都会检查 iot:
                                        CreateJob权限。 | 
| iot:CreateJobTemplate | CreateJobTemplate | 
 | 表示创建任务模板的权限。每次请求创建任务模板时,都会检查 iot: CreateJobTemplate权限。 | 
| iot:DeleteJob | DeleteJob | 作业 | 表示删除任务的权限。每次请求删除任务时,都会检查 iot:
                                        DeleteJob权限。 | 
| iot:DeleteJobTemplate | DeleteJobTemplate | jobtemplate | 表示删除任务模板的权限。每次请求删除任务模板时,都会检查 iot: CreateJobTemplate权限。 | 
| iot:DeleteJobExecution | DeleteJobTemplate | 
 | 表示删除任务执行的权限。每次请求删除任务执行时,都会检查 iot: DeleteJobExecution权限。 | 
| iot:DescribeJob | DescribeJob | 作业 | 表示描述任务的权限。每次请求描述任务时,都会检查 iot:
                                            DescribeJob权限。 | 
| iot:DescribeJobExecution | DescribeJobExecution | 
 | 表示描述任务执行的权限。每次请求描述任务执行时,都会检查 iot: DescribeJobExecution权限。 | 
| iot:DescribeJobTemplate | DescribeJobTemplate | jobtemplate | 表示描述任务模板的权限。每次请求描述任务模板时,都会检查 iot: DescribeJobTemplate权限。 | 
| iot:DescribeManagedJobTemplate | DescribeManagedJobTemplate | jobtemplate | 表示描述托管式任务模板的权限。每次请求描述托管式任务模板时,都会检查 iot: DescribeManagedJobTemplate权限。 | 
| iot:GetJobDocument | GetJobDocument | 作业 | 表示获取任务的任务文档的权限。每次请求获取任务文档时,都会检查 iot:GetJobDocument权限。 | 
| iot:ListJobExecutionsForJob | ListJobExecutionsForJob | 作业 | 表示列出任务的任务执行的权限。每次请求列出任务的任务执行时,都会检查 iot:ListJobExecutionsForJob权限。 | 
| iot:ListJobExecutionsForThing | ListJobExecutionsForThing | thing | 表示列出任务的任务执行的权限。每次请求列出事物的任务执行时,都会检查 iot:ListJobExecutionsForThing权限。 | 
| iot:ListJobs | ListJobs | none | 表示列出任务的权限。每次请求列出任务时,都会检查 iot:ListJobs权限。 | 
| iot:ListJobTemplates | ListJobTemplates | none | 表示列出任务模板的权限。每次请求列出任务模板时,都会检查 iot:ListJobTemplates权限。 | 
| iot:ListManagedJobTemplates | ListManagedJobTemplates | none | 表示列出托管式任务模板的权限。每次请求列出托管式任务模板时,都会检查 iot:ListManagedJobTemplates权限。 | 
| iot:UpdateJob | UpdateJob | 作业 | 表示更新任务的权限。每次请求更新任务时,都会检查 iot:UpdateJob权限。 | 
| iot:TagResource | TagResource | 
 | 授予标记特定资源的权限。 | 
| iot:UntagResource | UntagResource | 
 | 授予取消标记特定资源的权限。 | 
下面的示例显示了 IAM policy,该策略授予用户对 IoT 事物和事物组执行以下操作的权限。
在此示例中:
- 
                        region和你的 Amazon Web Services 区域,比如us-east-1。
- 
                        account-id用你的 Amazon Web Services 账户 电话号码,比如57EXAMPLE833。
- 
                            thing-group-name上面写上你要定位工作的物联网事物组的名称,例如FirmwareUpdateGroup。
- 
                        thing-name用你瞄准工作的物联网事物的名字,例如MyIoTThing。
您可以限制主体 从特定 IP 地址对控制面板端点进行 API 调用。要指定可以允许的 IP 地址,请在 IAM policy 的条件元素中使用 aws:SourceIp 全局条件键。
使用此条件密钥还可以拒绝其他 Amazon Web Services 服务人代表您进行这些 API 调用的访问权限,例如 Amazon CloudFormation。要允许访问这些服务,请使用带有 aws: 密钥的aws:ViaAWSService全局条件SourceIp 密钥。这可以确保源 IP 地址访问限制仅适用于由主体直接发出的请求。有关更多信息,请参阅 Amazon: Amazon 根据源 IP 拒绝访问。
以下示例说明如何仅允许能够对控制面板端点进行 API 调用的特定 IP 地址。aws:ViaAWSService 键设置为 true,这允许其它服务代表您进行 API 调用。
数据层面上的 IAM 策略
数据层面上的 IAM 策略使用 iotjobsdata: 前缀以授权用户可以执行的任务 API 操作。在数据层面上,可以通过使用 iotjobsdata:DescribeJobExecution 策略操作授予用户使用 DescribeJobExecution API 的权限。
警告
当设备的目标指向 Amazon IoT Jobs 时,不建议在数据层面上使用 IAM 策略。我们建议您在控制面板上使用 IAM 策略,供用户创建和管理任务。在数据层面上,要授权设备检索任务执行和更新执行状态,请使用 Amazon IoT Core HTTPS 协议的策略。
必须授权的 API 操作通常由您键入 CLI 命令来执行。下面显示了用户执行 DescribeJobExecution 操作的示例。
在此示例中:
- 
                            region和你的 Amazon Web Services 区域,比如us-east-1。
- 
                            account-id用你的 Amazon Web Services 账户 电话号码,比如57EXAMPLE833。
- 
                            thing-name用你瞄准工作的物联网事物的名字,例如myRegisteredThing。
- 
                            job-id
aws iot-jobs-data describe-job-execution \ --endpoint-url "https://account-id.jobs.iot.region.amazonaws.com" \ --job-idjobID--thing-namething-name
下面显示了授权执行此操作的示例 IAM 策略:
您可以限制主体 从特定 IP 地址对数据面板端点进行 API 调用。要指定可以允许的 IP 地址,请在 IAM policy 的条件元素中使用 aws:SourceIp 全局条件键。
使用此条件密钥还可以拒绝其他 Amazon Web Services 服务人代表您进行这些 API 调用的访问权限,例如 Amazon CloudFormation。要允许访问这些服务,请将 aws:ViaAWSService 全局条件键与 aws:SourceIp 条件键一起使用。这可确保 IP 地址访问限制仅适用于主体直接发出的请求。有关更多信息,请参阅 Amazon: Amazon 根据源 IP 拒绝访问。
以下示例说明如何仅允许能够对数据面板端点进行 API 调用的特定 IP 地址。
以下示例说明如何限制特定 IP 地址或地址范围,使其无法对数据面板端点进行 API 调用。
如果您同时在控制面板和数据面板上执行 API 操作,则控制面板策略操作必须使用 iot: 前缀,而数据面板策略操作必须使用 iotjobsdata: 前缀。
例如,DescribeJobExecution API 可以同时用于控制面板和数据层面中。在控制平面上,DescribeJobExecutionAPI 用于描述任务执行。在数据层面上, DescribeJobExecutionAPI 用于获取任务执行的详细信息。
以下 IAM 策略授予用户同时在控制面板和数据层面上使用 DescribeJobExecution API 的权限。
在此示例中:
- 
                            region和你的 Amazon Web Services 区域,比如us-east-1。
- 
                            account-id用你的 Amazon Web Services 账户 电话号码,比如57EXAMPLE833。
- 
                            thing-name用你瞄准工作的物联网事物的名字,例如MyIoTThing。
授权对 IoT 资源进行标记
为了更好地控制您可以创建、修改或使用的任务和任务模板,可以将标签附加到任务或任务模板。还可以通过将标签放在账单组中并向其附加标签,帮助您辨别所有权并分配和分摊成本。
当用户想要标记他们使用或创建的任务或任务模板时 Amazon CLI,您的 IAM 策略必须向该用户授予对其进行标记的权限。 Amazon Web Services Management Console 要授予权限,IAM 策略必须使用 iot:TagResource 操作。
注意
如果您的 IAM 策略不包含 iot:TagResource 操作,则任何带有标签的 CreateJob 或 CreateJobTemplate 都将返回 AccessDeniedException 错误。
当您想要为使用或创建的任务或任务模板添加标签时,您的 IAM 策略必须授予对它们进行标记的权限。 Amazon Web Services Management Console  Amazon CLI要授予权限,IAM 策略必须使用 iot:TagResource 操作。
有关标记实例的一般信息,请参阅为资源添加 Amazon IoT 标签。
请参阅以下授予标记权限的 IAM 策略示例:
示例 1
某位用户运行以下命令来创建任务并将其标记到特定环境。
在此示例中:
- 
                            region和你的 Amazon Web Services 区域,比如us-east-1。
- 
                            account-id用你的 Amazon Web Services 账户 电话号码,比如57EXAMPLE833。
- 
                            thing-name用你瞄准工作的物联网事物的名字,例如MyIoTThing。
aws iot create-job --job-idtest_job--targets "arn:aws:iot:region:account-id:thing/thingOne" --document-source "https://s3.amazonaws.com/amzn-s3-demo-bucket/job-document.json" --description "test job description" --tags Key=environment,Value=beta
对于本示例,您必须使用以下 IAM 策略: