本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
向用户和云服务授权以使用 AWS IoT Jobs
要对用户和云服务进行授权,您必须在控制平面和数据层面上使用IAM策略。这些策略必须与HTTPS协议一起使用,并且必须使用 AWS 签名版本 4 身份验证(端口 443)对用户进行身份验证。
注意
AWS IoT Core 不得在控制平面上使用策略。仅使用IAM策略对用户或云服务进行授权。有关使用所需策略类型的更多信息,请参阅 AWS IoT 任务必需的策略类型。
IAM策略是包含政策声明的JSON文档。策略语句使用效果、操作 和资源 元素以指定资源、允许或拒绝的操作以及允许或拒绝操作的条件。有关更多信息,请参阅IAM用户指南中的IAMJSON策略元素参考。
警告
我们建议您不要在IAM策略或 AWS IoT Core 策略"Action":
["iot:*"]
中使用通配符权限。使用通配符权限不是推荐的安全最佳实践。有关更多信息,请参阅AWS IoT
政策过于宽松。
IAM控制平面上的策略
在控制平面上,IAM策略使用带有操作iot:
的前缀来授权相应的作业API操作。例如,iot:CreateJob
策略操作向用户授予使用权限CreateJob
API。
下表显示了IAM策略操作和使用这些操作的权限的API列表。有关资源类型的信息,请参阅由定义的资源类型 AWS IoT。有关 AWS IoT 操作的更多信息,请参阅由定义的操作 AWS 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策略,该策略允许用户对您的物联网事物和事物组执行以下操作。
在此示例中:
-
region
和你的 AWS 区域,比如us-east-1
。 -
account-id
用你的 AWS 账户 电话号码,比如57EXAMPLE833
。 -
thing-group-name
上面写上你要定位工作的物联网事物组的名称,例如FirmwareUpdateGroup
。 -
thing-name
用你瞄准工作的物联网事物的名字,例如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策略的条件元素中使用aws:SourceIp
全局条件密钥。
使用此条件键还可以拒绝其他 AWS 服务人代表您API拨打这些电话,例如 AWS CloudFormation。要允许访问这些服务,请使用带有 aws: 密钥的aws:ViaAWSService
全局条件SourceIp 密钥。这可以确保源 IP 地址访问限制仅适用于由主体直接发出的请求。有关更多信息,请参阅 AWS: AWS 根据源 IP 拒绝访问。
以下示例说明如何仅允许可以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
警告
在为设备定位 AWS IoT 任务时,不建议在数据层面上使用IAM策略。我们建议您在控制平面上使用IAM策略让用户创建和管理作业。在数据层面上,要授权设备检索任务执行和更新执行状态,请使用 AWS IoT Core HTTPS协议策略。
必须获得授权的API操作通常由您键入CLI命令来执行。下面显示了用户执行 DescribeJobExecution
操作的示例。
在此示例中:
-
region
和你的 AWS 区域,比如us-east-1
。 -
account-id
用你的 AWS 账户 电话号码,比如57EXAMPLE833
。 -
thing-name
用你瞄准工作的物联网事物的名字,例如myRegisteredThing
。 -
是使用定位的任务的唯一标识符API。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策略示例:
{ "Version": "2012-10-17", "Statement": { "Action": ["iotjobsdata:DescribeJobExecution"], "Effect": "Allow", "Resource": "arn:aws:iot:
region
:account-id
:thing/thing-name
", } }
您可以限制委托人从特定 IP 地址API呼叫您的数据平面终端节点。要指定可以允许的 IP 地址,请在IAM策略的条件元素中使用aws:SourceIp
全局条件密钥。
使用此条件键还可以拒绝其他 AWS 服务人代表您API拨打这些电话,例如 AWS CloudFormation。要允许访问这些服务,请将 aws:ViaAWSService
全局条件键与 aws:SourceIp
条件键一起使用。这可确保 IP 地址访问限制仅适用于主体直接发出的请求。有关更多信息,请参阅 AWS: AWS 根据源 IP 拒绝访问。
以下示例说明如何仅允许可以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可以在控制平面和数据平面中使用。在控制平面上 DescribeJobExecutionAPI,用于描述任务执行。在数据平面上, DescribeJobExecutionAPI用于获取任务执行的详细信息。
以下IAM策略授权用户在控制平面和数据平面DescribeJobExecution
API上使用。
在此示例中:
-
region
和你的 AWS 区域,比如us-east-1
。 -
account-id
用你的 AWS 账户 电话号码,比如57EXAMPLE833
。 -
thing-name
用你瞄准工作的物联网事物的名字,例如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 资源进行标记
为了更好地控制您可以创建、修改或使用的任务和任务模板,可以将标签附加到任务或任务模板。还可以通过将标签放在账单组中并向其附加标签,帮助您辨别所有权并分配和分摊成本。
当用户想要标记他们使用或创建的作业或作业模板时 AWS CLI,您的IAM策略必须向该用户授予对其进行标记的权限。 AWS Management Console 要授予权限,您的IAM策略必须使用iot:TagResource
操作。
注意
如果您的IAM策略不包含该iot:TagResource
操作,则任何CreateJobTemplate
带有标签的CreateJob
或都将返回AccessDeniedException
错误。
当您想要为使用或创建的任务或作业模板添加标签时 AWS CLI,您的IAM策略必须授予对它们进行标记的权限。 AWS Management Console 要授予权限,您的IAM策略必须使用iot:TagResource
操作。
有关标记实例的一般信息,请参阅标记您的资源 AWS IoT。
请参阅以下授予标记权限的IAM策略示例:
示例 1
某位用户运行以下命令来创建任务并将其标记到特定环境。
在此示例中:
-
region
和你的 AWS 区域,比如us-east-1
。 -
account-id
用你的 AWS 账户 电话号码,比如57EXAMPLE833
。 -
thing-name
用你瞄准工作的物联网事物的名字,例如MyIoTThing
。
aws iot create-job --job-id
test_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策略:
{ "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/*" ] } }