向用户和云服务授权以使用 Amazon IoT Jobs - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

向用户和云服务授权以使用 Amazon IoT Jobs

要向用户和云服务授权,您必须同时在控制面板和数据层面上使用 IAM 策略。这些策略必须与 HTTPS 协议一起使用,并且必须使用 Amazon 签名版本 4 身份验证(端口 443)对用户进行身份验证。

注意

不得在控制面板上使用 Amazon IoT Core 策略。只有 IAM 策略用于向用户或云服务授权。有关使用所需策略类型的更多信息,请参阅 Amazon IoT Jobs 所需的策略类型

IAM 策略是包含策略声明的 JSON 文档。策略语句使用效果操作资源 元素以指定资源、允许或拒绝的操作以及允许或拒绝操作的条件。有关更多信息,请参阅 IAM 用户指南中的 IAM JSON 策略元素参考

警告

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

控制面板上的 IAM 策略

在控制面板上,IAM 策略对操作使用 iot: 前缀,以便授权执行相应的任务 API 操作。例如,iot:CreateJob 策略操作授予用户使用 CreateJob API 的权限。

下表显示了 IAM 策略操作和使用 API 操作的权限的列表。有关资源类型的信息,请参阅 Amazon IoT 定义的资源类型。有关 Amazon IoT 操作的更多信息,请参阅 Amazon IoT 定义的操作

控制面板上的 IAM 策略操作
策略操作 API 操作 资源类型 描述
iot:AssociateTargetsWithJob AssociateTargetsWithJob
  • 任务

  • thing

  • thinggroup

表示将组与连续任务关联的权限。每次请求关联目标时,都会检查 iot:AssociateTargetsWithJob 权限。
iot:CancelJob CancelJob 任务 表示取消任务的权限。每次请求取消任务时,都会检查 iot:CancelJob 权限。
iot:CancelJobExecution CancelJobExecution
  • 任务

  • thing

表示取消任务执行的权限。每次请求取消任务执行时,都会检查 iot: CancelJobExecution 权限。
iot:CreateJob CreateJob
  • 任务

  • thing

  • thinggroup

  • jobtemplate

表示创建任务的权限。每次请求创建任务时,都会检查 iot: CreateJob 权限。
iot:CreateJobTemplate CreateJobTemplate
  • 任务

  • jobtemplate

表示创建任务模板的权限。每次请求创建任务模板时,都会检查 iot: CreateJobTemplate 权限。
iot:DeleteJob DeleteJob 任务 表示删除任务的权限。每次请求删除任务时,都会检查 iot: DeleteJob 权限。
iot:DeleteJobTemplate DeleteJobTemplate jobtemplate 表示删除任务模板的权限。每次请求删除任务模板时,都会检查 iot: CreateJobTemplate 权限。
iot:DeleteJobExecution DeleteJobTemplate
  • 任务

  • thing

表示删除任务执行的权限。每次请求删除任务执行时,都会检查 iot: DeleteJobExecution 权限。
iot:DescribeJob DescribeJob 任务 表示描述任务的权限。每次请求描述任务时,都会检查 iot: DescribeJob 权限。
iot:DescribeJobExecution DescribeJobExecution
  • 任务

  • thing

表示描述任务执行的权限。每次请求描述任务执行时,都会检查 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 表示列出任务的权限。每次请求列出任务时,都会检查 iot:ListJobs 权限。
iot:ListJobTemplates ListJobTemplates 表示列出任务模板的权限。每次请求列出任务模板时,都会检查 iot:ListJobTemplates 权限。
iot:ListManagedJobTemplates ListManagedJobTemplates 表示列出托管式任务模板的权限。每次请求列出托管式任务模板时,都会检查 iot:ListManagedJobTemplates 权限。
iot:UpdateJob UpdateJob 任务 表示更新任务的权限。每次请求更新任务时,都会检查 iot:UpdateJob 权限。
iot:TagResource TagResource
  • 任务

  • jobtemplate

  • thing

授予标记特定资源的权限。
iot:UntagResource UntagResource
  • 任务

  • jobtemplate

  • thing

授予取消标记特定资源的权限。

下面显示了 IAM 策略的示例,该策略授予用户对 IoT 事物和事物组执行以下操作的权限。

在此示例中:

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

  • account-id 替换为您的 Amazon Web Services 账户编号,例如 57EXAMPLE833

  • thing-group-name 替换为目标任务所属 IoT 事物组的名称,例如 FirmwareUpdateGroup

  • thing-name 替换为目标任务所属 IoT 事物的名称,例如 MyIoTThing

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "iot:CreateJobTemplate", "iot:CreateJob", ], "Effect": "Allow", "Resource": "arn:aws:iot:region:account-id:thinggroup/thing-group-name" }, { "Action": [ "iot:DescribeJob", "iot:CancelJob", "iot:DeleteJob", ], "Effect": "Allow", "Resource": "arn:aws:iot:region:account-id:job/*" }, { "Action": [ "iot:DescribeJobExecution", "iot:CancelJobExecution", "iot:DeleteJobExecution", ], "Effect": "Allow", "Resource": [ "arn:aws:iot:region:account-id:thing/thing-name" "arn:aws:iot:region:account-id:job/*" ] } ] }

您可以限制主体 从特定 IP 地址对控制面板端点进行 API 调用。要指定可以允许的 IP 地址,请在 IAM policy 的条件元素中使用 aws:SourceIp 全局条件键。

使用此条件键还可以拒绝其它 Amazon Web Service代表您进行这些 API 调用,例如 Amazon CloudFormation。要允许访问这些服务,请将 aws:ViaAWSService 全局条件键与 aws:SourceIp 键一起使用。这样可以确保源 IP 地址访问限制仅适用于由主体直接发出的请求。有关更多信息,请参阅 Amazon:基于源 IP 拒绝访问 Amazon

以下示例说明如何仅允许能够对控制面板端点进行 API 调用的特定 IP 地址。aws:ViaAWSService 键设置为 true,这允许其它服务代表您进行 API 调用。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:CreateJobTemplate", "iot:CreateJob" ], "Resource": ["*"], "Condition": { "IpAddress": { "aws:SourceIp": "123.45.167.89" } }, "Bool": {"aws:ViaAWSService": "true"} } ], }

数据层面上的 IAM 策略

数据层面上的 IAM 策略使用 iotjobsdata: 前缀以授权用户可以执行的任务 API 操作。在数据层面上,可以通过使用 iotjobsdata:DescribeJobExecution 策略操作授予用户使用 DescribeJobExecution API 的权限。

警告

当设备的目标指向 Amazon IoT Jobs 时,不建议在数据层面上使用 IAM 策略。我们建议您在控制面板上使用 IAM 策略,供用户创建和管理任务。在数据层面上,要授权设备检索任务执行和更新执行状态,请使用 HTTPS 协议的 Amazon IoT Core 策略

必须授权的 API 操作通常由用户键入 CLI 命令来执行。下面显示了用户执行 DescribeJobExecution 操作的示例。

在此示例中:

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

  • account-id 替换为您的 Amazon Web Services 账户编号,例如 57EXAMPLE833

  • thing-name 替换为目标任务所属 IoT 事物的名称,例如 myRegisteredThing

  • job-id 是使用 API 确定的目标任务的唯一标识符。

aws iot-jobs-data describe-job-execution \ --endpoint-url "https://account-id.jobs.iot.region.amazonaws.com" \ --job-id jobID --thing-name thing-name

下面显示了授权执行此操作的示例 IAM 策略:

{ "Version": "2012-10-17", "Statement": { "Action": ["iotjobsdata:DescribeJobExecution"], "Effect": "Allow", "Resource": "arn:aws:iot:region:account-id:thing/thing-name", } }

您可以限制主体 从特定 IP 地址对数据面板端点进行 API 调用。要指定可以允许的 IP 地址,请在 IAM policy 的条件元素中使用 aws:SourceIp 全局条件键。

使用此条件键还可以拒绝其它 Amazon Web Service代表您进行这些 API 调用,例如 Amazon CloudFormation。要允许访问这些服务,请将 aws:ViaAWSService 全局条件键与 aws:SourceIp 条件键一起使用。这可确保 IP 地址访问限制仅适用于主体直接发出的请求。有关更多信息,请参阅 Amazon:基于源 IP 拒绝访问 Amazon

以下示例说明如何仅允许能够对数据面板端点进行 API 调用的特定 IP 地址。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["iotjobsdata:*"], "Resource": ["*"], "Condition": { "IpAddress": { "aws:SourceIp": "123.45.167.89" } }, "Bool": {"aws:ViaAWSService": "false"} } ], }

以下示例说明如何限制特定 IP 地址或地址范围,使其无法对数据面板端点进行 API 调用。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": ["iotjobsdata:*"], "Condition": { "IpAddress": { "aws:SourceIp": [ "123.45.167.89", "192.0.2.0/24", "203.0.113.0/24" ] } }, "Resource": ["*"], } ], }

如果用户同时在控制面板和数据层面上执行 API 操作,则控制面板策略操作必须使用 iot: 前缀,而数据层面策略操作必须使用 iotjobsdata: 前缀。

例如,DescribeJobExecution API 可以同时用于控制面板和数据层面中。在控制面板上,DescribeJobExecution API 用于描述任务执行。在数据层面上,DescribeJobExecution API 用于获取任务执行的详细信息。

以下 IAM 策略授予用户同时在控制面板和数据层面上使用 DescribeJobExecution API 的权限。

在此示例中:

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

  • account-id 替换为您的 Amazon Web Services 账户编号,例如 57EXAMPLE833

  • thing-name 替换为目标任务所属 IoT 事物的名称,例如 MyIoTThing

{ "Version": "2012-10-17", "Statement": [ { "Action": ["iotjobsdata:DescribeJobExecution"], "Effect": "Allow", "Resource": "arn:aws:iot:region:account-id:thing/thing-name" }, { "Action": [ "iot:DescribeJobExecution", "iot:CancelJobExecution", "iot:DeleteJobExecution", ], "Effect": "Allow", "Resource": [ "arn:aws:iot:region:account-id:thing/thing-name" "arn:aws:iot:region:account-id:job/*" ] } ] }

授权对 IoT 资源进行标记

为了更好地控制用户可以创建、修改或使用的任务和任务模板,可以将标签附加到任务或任务模板。还可以通过将标签放在账单组中并向其附加标签,帮助您辨别所有权并分配和分摊成本。

当用户希望标记他们使用 Amazon Web Services Management Console或 Amazon CLI 创建的任务或任务模板时,您的 IAM 策略必须授予用户标记它们的权限。要授予权限,IAM 策略必须使用 iot:TagResource 操作。

有关标记实例的一般信息,请参阅给您的 Amazon IoT 资源加标签

有关显示如何授予标记权限的示例,请考虑这样一位用户:该用户运行以下命令创建任务并将其标记到特定环境。

在此示例中:

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

  • account-id 替换为您的 Amazon Web Services 账户编号,例如 57EXAMPLE833

  • thing-name 替换为目标任务所属 IoT 事物的名称,例如 MyIoTThing

aws iot create-job --job-id test_job --targets "arn:aws:iot:region:account-id:thing/thingOne" --document-source "https://s3.amazonaws.com/my-s3-bucket/job-document.json" --description "test job description" --tags Key=environment,Value=beta

对于本示例,您必须使用以下 IAM 策略:

{ "Version": "2012-10-17", "Statement": { "Action": [ "iot:CreateJob", "iot:CreateJobTemplate", "iot:TagResource" ], "Effect": "Allow", "Resource": [ "arn:aws:iot:aws-region:account-id:job/*", "arn:aws:iot:aws-region:account-id:jobtemplate/*" ] } }