本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
准备安全性
本节讨论 AWS IoT Device Management 软件包目录的主要安全要求。
Resource-based authentication
在更新实例集中的软件时,软件包目录使用基于资源的授权来提高安全性。这意味着您必须创建一个 AWS Identity and Access Management (IAM) 策略,授予对软件包和软件包版本执行createreadupdatedelete、、、和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。有关更多信息和策略选项的完整列表,请参阅使用 AWS IoT Jobs 保护用户和设备。
例如,如果您的软件包和程序包版本命名如下:
AWS 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" } ] }
AWS IoT 部署软件包版本的工作权限
出于安全考虑,您务必授予部署软件包和程序包版本的权限,并指定允许部署的特定软件包和程序包版本。为此,您需要创建 IAM 角色和策略,以授予使用程序包版本部署任务的权限。该策略必须将目标程序包版本指定为资源。
IAM 策略
IAM 策略授予创建任务的权限,此任务包括在 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
AWS IoT 更新保留的命名影子的任务权限
要允许任务在任务成功完成时更新事物的预留名称影子,您必须创建 IAM 角色和策略。有两种方法可以在 AWS IoT 控制台中执行此操作。第一种是在控制台中创建软件包时。如果您看到为软件包管理启用依赖项对话框,则可以选择使用现有角色或创建新角色。或者,在 AWS IoT 控制台中,选择设置,选择管理索引,然后选择管理设备软件包和版本的索引。
注意
如果您选择在任务成功完成时让 AWS IoT 任务服务更新预留的命名影子,则 API 调用将计入您的设备影子和注册表操作,并可能产生费用。有关更多信息,请参阅AWS IoT Core 定价
使用创建角色选项时,所生成角色的名称以 aws-iot-role-update-shadows 开头并包含以下策略:
设置角色
- Permissions
-
权限策略授予查询和更新事物影子的权限。资源 ARN 中的
$package参数以预留命名影子为目标。-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:DescribeEndpoint", "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow" ], "Resource": [ "arn:aws:iot:us-east-1:111122223333:thing/<thingName>/$package" ] } ] }
- 信任关系
-
除了权限策略外,该角色还需要与 AWS IoT Core 建立信任关系,以便实体可以代入该角色并更新预留命名影子。
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
设置用户策略
- iam:PassRole 权限
-
最后,在调用 UpdatePackageConfiguration API 操作 AWS IoT Core 时,你必须拥有将角色传递给的权限。
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole", "iot:UpdatePackageConfiguration" ], "Resource": "arn:aws:iam::111122223333:role/<roleName>" } ] }
AWS IoT 从 Amazon S3 下载的任务权限
任务文件保存在 Amazon S3 中。当您通过 AWS IoT Jobs 进行派遣时,您可以参考此文件。您必须向 AWS IoT Jobs 提供下载文件的权限 (s3:GetObject)。您还必须在 Amazon S3 和 AWS IoT Jobs 之间建立信任关系。有关创建这些策略的说明,请参阅管理任务中的预签名 URL。
更新程序包版本的软件物料清单的权限
要更新处于Draft、Published或Deprecated生命周期状态的软件包版本的软件物料清单,您需要一个 AWS Identity and Access Management 角色和策略来在 Amazon S3 中查找新的软件物料清单并在中更新软件包版本 AWS IoT Core。
首先,您需要将更新的软件物料清单放置在受版本控制的 Amazon S3 存储桶中,并在包含 sboms 参数的情况下调用 UpdatePackageVersion API 操作。接下来,您的授权委托人将担任您创建的 IAM 角色,在 Amazon S3 中找到更新的软件物料清单,并在软件包目录中 AWS IoT Core 更新软件包版本。
执行此更新需要以下策略:
策略
-
信任策略:该策略与代入 IAM 角色的授权主体建立信任关系,以便其可以从 Amazon S3 中受版本控制的存储桶找到更新的软件物料清单,并在 AWS IoT Core中更新程序包版本。
-
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
-
权限策略:通过该策略可以访问其中存储了程序包版本软件物料清单的 Amazon S3 受版本控制的存储桶,并在 AWS IoT Core中更新程序包版本。
-
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::awsexamplebucket1" ] } ] }
-
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:UpdatePackageVersion" ], "Resource": [ "arn:aws:iot:*:111122223333:package/<packageName>/version/<versionName>" ] } ] }
-
-
传递角色权限:策略授予将 IAM 角色传递给 Amazon S3 以及 AWS IoT Core 在您调用
UpdatePackageVersionAPI 操作时传递的权限。-
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::awsexamplebucket1" ] } ] }
-
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole", "iot:UpdatePackageVersion" ], "Resource": "arn:aws:iam::111122223333:role/<roleName>" } ] }
-
注意
对于已转换为 Deleted 生命周期状态的程序包版本,您无法更新软件物料清单。
有关为服务创建 IAM 角色的更多信息,请参阅创建向 AWS 服务委派权限的 AWS 角色。
有关创建 Amazon S3 存储桶并向其上传对象的更多信息,请参阅创建存储桶和上传对象。