本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
准备安全性
本节讨论 Software Package Catal Amazon IoT Device Management og 的主要安全要求。
基于资源的身份验证
在更新实例集中的软件时,软件包目录使用基于资源的授权来提高安全性。这意味着您必须创建一个 Amazon Identity and Access Management (IAM) 策略,该策略授予对软件包和软件包版本执行create
read
update
delete
、、和list
操作的权限,并在该Resources
部分中引用要部署的特定软件包和软件包版本。您也需要这些权限,以便更新预留命名影子。您可以通过为每个实体包括 Amazon 资源名称(ARN)来引用软件包和软件包版本。
注意
如果您打算通过策略授予软件包版本 API 调用的权限(例如CreatePackageVersionUpdatePackageVersion、、DeletePackageVersion),则需要在策略中同时包含软件包和软件包版本 ARN。如果您打算通过策略授予软件包 API 调用(例如CreatePackageUpdatePackage、和 DeletePackage)的权限,则必须在策略中仅包含软件包 ARN。
按如下方式构造软件包 ARN 和软件包版本 ARN:
软件包:
arn:aws:iot:
<region>
:<accountID>
:package/<packageName>
/package
程序包版本:
arn:aws:iot:
<region>
:<accountID>
:package/<packageName>
/version/<versionName>
注意
您还可以此策略中包含其它相关权限。例如,您可以为 job
、thinggroup
和 jobtemplate
加入一个 ARN。有关更多信息以及策略选项的完整列表,请参阅使用Amazon IoT 任务保护用户和设备。
例如,如果您的软件包和软件包版本命名如下:
Amazon IoT 东西:
myThing
软件包名称:
samplePackage
版本
1.0.0
该策略可能类似于以下示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:createPackage", "iot:createPackageVersion", "iot:updatePackage", "iot:updatePackageVersion" ], "Resource": [ "arn:aws:iot:us-east-1:111122223333:package/samplePackage", "arn:aws:iot:us-east-1:111122223333:package/samplePackage/version/1.0.0" ] }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow" ], "Resource": "arn:aws:iot:us-east-1:111122223333:thing/myThing/$package" } ] }
Amazon IoT 部署包版本的 Job 权限
出于安全考虑,您务必授予部署软件包和软件包版本的权限,并指定允许部署的特定软件包和软件包版本。为此,您需要创建 IAM 角色和策略,以授予使用软件包版本部署任务的权限。该策略必须将目标软件包版本指定为资源。
IAM policy
IAM policy 授予创建任务的权限,此任务包括在 Resource
部分中指定的软件包和版本。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:CreateJob", "iot:CreateJobTemplate" ], "Resource":[ "arn:aws:iot:*:
111122223333
:job/<jobId>
", "arn:aws:iot:*:111122223333
:thing/<thingName>
/$package", "arn:aws:iot:*:111122223333
:thinggroup/<thingGroupName>
", "arn:aws:iot:*:111122223333
:jobtemplate/<jobTemplateName>
", "arn:aws:iot:*:111122223333
:package/<packageName>
/version/<versionName>
" ] } ] }
注意
如果要部署卸载软件包和软件包版本的任务,则必须授权其中软件包版本为 $null
的 ARN,如下所示:
arn:aws:iot:
<regionCode>
:111122223333
:package/<packageName>
/version/$null
Amazon IoT 更新保留的名为 shadow 的 Job 权限
要允许任务在任务成功完成时更新事物的预留名称影子,您必须创建 IAM 角色和策略。有两种方法可以在 Amazon IoT 控制台中执行此操作。第一种是在控制台中创建软件包时。如果您看到为软件包管理启用依赖项对话框,则可以选择使用现有角色或创建新角色。或者,在 Amazon IoT 控制台中,选择设置,选择管理索引,然后选择管理设备软件包和版本的索引。
注意
如果您选择在 Amazon IoT 任务成功完成时让 Job 服务更新预留的名为 shadow,则 API 调用将计入您的 Dev ice Shadow 和注册表操作,并且可能会产生费用。有关更多信息,请参阅Amazon IoT Core 定价
使用创建角色选项时,所生成角色的名称以 aws-iot-role-update-shadows
开头并包含以下策略:
设置角色
- 权限
-
权限策略授予查询和更新事物影子的权限。资源 ARN 中的
$package
参数以预留命名影子为目标。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:DescribeEndpoint", "Resource": "" }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow" ], "Resource": [ "arn:aws:iot:
<regionCode>
:111122223333
:thing/<thingName>
/$package" ] } ] } - 信任关系
-
除了权限策略外,该角色还需要与 Amazon IoT Core 建立信任关系,以便实体可以代入该角色并更新预留命名影子。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
设置用户策略
- iam:PassRole 权限
-
最后,在调用 UpdatePackageConfigurationAPI 操作 Amazon IoT Core 时,您必须拥有将角色传递给的权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole", "iot:UpdatePackageConfiguration" ], "Resource": "arn:aws:iam::
111122223333
:role/<roleName>
" } ] }
Amazon IoT 从 Amazon S3 下载的任务权限
任务文件保存在 Amazon S3 中。当您通过 Amazon IoT Jobs 进行分派时,应参考该文件。您必须向 Amazon IoT Jobs 提供下载文件的权限 (s3:GetObject
)。您还必须在 Amazon S3 和 Amazon IoT Jobs 之间设置信任关系。有关创建这些策略的说明,请参阅管理任务中的预签名 URL。