本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
准备安全性
本节讨论 Software Package Catal AWS IoT Device Management og 的主要安全要求。
基于资源的身份验证
在更新实例集中的软件时,软件包目录使用基于资源的授权来提高安全性。这意味着您必须创建一个 AWS Identity and Access Management (IAM) 策略,该策略授予对软件包和软件包版本执行create
read
update
delete
、、和list
操作的权限,并在该Resources
部分中引用要部署的特定软件包和软件包版本。您也需要这些权限,以便更新预留命名影子。您可以通过为每个实体添加一个 Amazon 资源名称 (ARN) 来引用软件包和软件包版本。
注意
如果您打算让策略授予软件包版本API调用的权限(例如CreatePackageVersionUpdatePackageVersion、、DeletePackageVersion),则需要在策略ARNs中同时包含软件包和软件包版本。如果您希望该策略授予软件包API调用的权限(例如CreatePackageUpdatePackage、和 DeletePackage),则必须在策略ARN中仅包含该软件包。
按ARNs如下方式构造软件包和软件包版本:
软件包:
arn:aws:iot:
<region>
:<accountID>
:package/<packageName>
/package
程序包版本:
arn:aws:iot:
<region>
:<accountID>
:package/<packageName>
/version/<versionName>
注意
您还可以此策略中包含其它相关权限。例如,您可以为job
thinggroup
、和添加一个ARNjobtemplate
。有关更多信息以及策略选项的完整列表,请参阅使用AWS IoT 任务保护用户和设备。
例如,如果您的软件包和软件包版本命名如下:
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 部署包版本的 Job 权限
出于安全考虑,您务必授予部署软件包和软件包版本的权限,并指定允许部署的特定软件包和软件包版本。为此,您需要创建一个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>
" ] } ] }
注意
如果要部署卸载软件包和软件包版本的作业,则必须授权软件包版本ARN所在的位置$null
,如下所示:
arn:aws:iot:
<regionCode>
:111122223333
:package/<packageName>
/version/$null
AWS IoT 更新保留的名为 shadow 的 Job 权限
要允许任务在任务成功完成时更新事物的保留名称影子,您必须创建IAM角色和策略。有两种方法可以在 AWS IoT 控制台中执行此操作。第一种是在控制台中创建软件包时。如果您看到为软件包管理启用依赖项对话框,则可以选择使用现有角色或创建新角色。或者,在 AWS IoT 控制台中,选择设置,选择管理索引,然后选择管理设备软件包和版本的索引。
注意
如果您选择在 AWS IoT 任务成功完成时让 Job 服务更新预留的名为 shadow,则该API调用将计入您的 Dev ice Shadow 和注册表操作,并且可能会产生费用。有关更多信息,请参阅 AWS IoT Core 定价
使用创建角色选项时,所生成角色的名称以 aws-iot-role-update-shadows
开头并包含以下策略:
设置角色
- 权限
-
权限策略授予查询和更新事物影子的权限。资源中的
$package
参数以预留的名为 shadow 为ARN目标。{ "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" ] } ] } - 信任关系
-
除了权限策略外,该角色还需要与 AWS IoT Core 建立信任关系,以便实体可以代入该角色并更新预留命名影子。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
设置用户策略
- iam:PassRole 权限
-
最后,您必须拥有在调用 UpdatePackageConfigurationAPI操作 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 任务之间建立信任关系。有关创建这些策略的说明,请参阅管理作业URLs中的预签名。
更新软件包版本的软件物料清单的权限
要更新处于Draft
、Published
或Deprecated
生命周期状态的软件包版本的软件物料清单,您需要一个 AWS Identity and Access Management 角色和策略来在 Amazon S3 中查找新的软件物料清单并在中更新软件包版本 AWS IoT Core。
首先,您需要将更新的软件物料清单放在版本控制的 Amazon S3 存储桶中,并使用包含的sboms
参数调用该UpdatePackageVersion
API操作。接下来,您的授权委托人将担任您创建的IAM角色,在 Amazon S3 中找到更新的软件物料清单,然后在 Software Package Catalog 中 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>
" ] } ] }
-
-
传递角色权限:策略授予在您调用
UpdatePackageVersion
API操作 AWS IoT Core 时向 Amazon S3 传递IAM角色的权限。-
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole", "s3:GetObject" ], "arn:aws:s3:::
awsexamplebucket1
" } ] } -
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole", "iot:UpdatePackageVersion" ], "Resource": "arn:aws:iam::
111122223333
:role/<roleName>
" } ] }
-
注意
对于已过渡到Deleted
生命周期状态的软件包版本,您无法更新软件材料清单。
有关为 AWS 服务创建IAM角色的更多信息,请参阅创建角色以向 AWS 服务委派权限。
有关创建 Amazon S3 存储桶并向其上传对象的更多信息,请参阅创建存储桶和上传对象。