管理任务
使用任务通知设备软件或固件更新。您可以使用 AWS IoT 控制台
任务的代码签名
向设备发送代码时,为了让设备检测代码是否在传输过程中被修改,建议您使用 AWS CLI 对代码文件进行签名。有关说明,请参阅使用 AWS CLI 创建和管理任务。
有关更多信息,请参阅什么是 AWS IoT 的代码签名?
任务文档
在创建任务之前,您必须创建任务文档。如果您使用 AWS IoT 的代码签名,则必须将任务文档上载到受版本控制的 Amazon S3 存储桶。有关创建 Amazon S3 存储桶并将向其上载文件的信息,请参阅 Amazon S3 入门指南中的 Amazon Simple Storage Service 入门。
提示
有关任务文档示例,请参阅 AWS IoT SDK for JavaScript 中的 jobs-agent.js
预签名 URL
您的任务文档可以包含指向您的代码文件(或其它文件)的预签名 Amazon S3 URL。预签名 Amazon S3 URL 的有效期有限,因此在设备请求任务文档时才生成。因为在您创建任务文档时尚未创建预签名 URL,所以在您的任务文档中使用占位符 URL。占位符 URL 类似如下所示:
${aws:iot:s3-presigned-url:https://s3.region.amazonaws.com/
<bucket>
/<code
file>
}
其中:
-
存储桶
是包含代码文件的 Amazon S3 存储桶。 -
代码文件
是代码文件的 Amazon S3 密钥。
当设备请求任务文档时,AWS IoT 会生成预签名 URL 并使用预签名 URL 替换占位符 URL。然后将您的任务文档发送到设备。
IAM 角色,用于授予从 S3 下载文件的权限
当您创建使用预签名 Amazon S3 URL 的任务时,必须提供 IAM 角色。该角色必须授予从存储数据或更新的 Amazon S3 桶下载文件的权限。该角色还必须向 AWS IoT 授予代入角色的权限。
您可以为预签名 URL 指定可选的超时。有关更多信息,请参阅 CreateJob。
向 AWS IoT Jobs 授予代入您的角色的权限
-
转到 IAM 控制台的角色中心
,然后选择您的角色。 -
在信任关系选项卡上,选择 Edit Trust Relationship (编辑信任关系),用以下 JSON 替换当前策略文档。选择更新信任策略。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "iot.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
为防止出现混淆代理人问题,请在策略中添加全局条件键
aws:SourceArn
和aws:SourceAccount
。重要
您的
aws:SourceArn
必须符合此格式:arn:aws:iot:
。确保region
:account-id
:*区域
与您的 AWS IoT 区域匹配,account-id
与您的客户账户 ID 相匹配。有关更多信息,请参阅防止跨服务混淆代理。{ "Effect": "Allow", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnLike": { "aws:SourceArn": "arn:aws:iot:*:123456789012:job/*" } } } ] }
-
如果您的任务使用的任务文档是一个 Amazon S3 对象,请选择权限,然后使用以下 JSON。这将添加一个策略,以授予从您的 Amazon S3 桶下载文件的权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::
your_S3_bucket
/*" } ] }
用于文件上传的预签名 URL
如果您的设备在作业部署期间需要将文件上传到 Amazon S3 存储桶,则可以在作业文档中包含以下预签名 URL 占位符:
${aws:iot:s3-presigned-url-upload:https://s3.region.amazonaws.com/
<bucket>
/<key>
}
在作业文档中的文件上传占位符 URL 中,您最多可以使用 ${thingName}
、${jobId}
和 ${executionNumber}
中的两个作为 key
属性中的保留关键字。创建作业执行时,将解析并替换代表 key
属性中保留关键字的本地占位符。使用包含特定于每台设备的保留关键字的本地占位符,可确保从设备上传的每个文件都特定于该设备,并且不会被从同一作业部署的另一台目标设备上传的类似文件所覆盖。有关对作业部署期间用于上传文件的预签名 URL 占位符中的本地占位符进行问题排查的信息,请参阅一般错误消息疑难解答。
注意
Amazon S3 存储桶名称不能包含代表已上传文件的保留关键字的本地占位符。本地占位符必须位于 key
属性中。
当设备收到预签名 URL 占位符时,该预签名 URL 占位符将在您的作业文档中转换为 Amazon S3 预签名上传 URL。您的设备将使用该 URL 将文件上传到目标 Amazon S3 存储桶。
注意
如果上述占位符 URL 中未提供 Amazon S3 存储桶和密钥,则 AWS IoT Jobs 将最多使用 ${thingName}
、${jobId}
和 ${executionNumber}
中的两个自动为每台设备生成一个密钥。
使用 Amazon S3 版本控制的预签名 URL
保护存储在 Amazon S3 存储桶中的文件的完整性,对于确保使用该文件将作业安全部署到您的设备实例集至关重要。使用 Amazon S3 版本控制,您可以为存储在 Amazon S3 存储桶中的文件的每个变体添加版本标识符,以便跟踪文件的每个版本。这可以让您深入了解使用 AWS IoT Jobs 将哪个版本的文件部署到了您的设备实例集中。有关使用版本控制的 Amazon S3 存储桶的更多信息,请参阅在 Amazon S3 存储桶中使用版本控制。
如果文件存储在 Amazon S3 中,并且作业文档包含预签名 URL 占位符,则 AWS IoT Jobs 将使用 Amazon S3 存储桶、存储桶密钥以及存储在 Amazon S3 存储桶中的文件版本,在作业文档中生成预签名 URL。在作业文档中生成的这个预签名 URL 将取代作业文档中最初的预签名 URL 占位符。如果您更新存储在 Amazon S3 存储桶中的文件,则将创建该文件的新版本及后续 versionId
,以表明所做的更新,并支持在未来的作业部署中定位到该特定文件。
请参阅以下示例,了解作业部署之前和作业部署期间作业文档中所示的使用 versionId
的 Amazon S3 预签名 URL:
Amazon S3 预签名 URL 占位符(在作业部署之前)
//Virtual-hosted style URL ${aws:iot:s3-presigned-url:https://
bucket-name
.s3.region-code
.amazonaws.com/key-name
%3FversionId%3Dversion-id
} //Path-style URL ${aws:iot:s3-presigned-url:https://s3.region-code
.amazonaws.com/bucket-name
/key-name
%3FversionId%3Dversion-id
}
Amazon S3 预签名 URL(在作业部署期间)
//Virtual-hosted style URL ${aws:iot:s3-presigned-url:https://
sample-bucket-name
.s3.us-west-2
.amazonaws.com/sample-code-file.png
%3FversionId%3Dversion1
} //Path-style ${aws:iot:s3-presigned-url:https://s3.us-west-2
.amazonaws.com/sample-bucket-name
/sample-code-file.png
%3FversionId%3Dversion1
}
有关 Amazon S3 虚拟托管类型和路径类型对象 URL 的更多信息,请参阅虚拟托管类型请求和路径类型请求。
注意
如果要将 versionId
附加到 Amazon S3 预签名 URL,则它必须符合支持 AWS SDK for Java 2.x 的 URL 编码。有关更多信息,请参阅 Changes in parsing Amazon S3 URIs from version 1 to version 2。