准备安全性 - AWS IoT Core

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

准备安全性

本节讨论 Software Package Catal AWS IoT Device Management og 的主要安全要求。

基于资源的身份验证

在更新实例集中的软件时,软件包目录使用基于资源的授权来提高安全性。这意味着您必须创建一个 AWS Identity and Access Management (IAM) 策略,该策略授予对软件包和软件包版本执行createreadupdatedelete、、和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>

注意

您还可以此策略中包含其它相关权限。例如,您可以为jobthinggroup、和添加一个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中的预签名

更新软件包版本的软件物料清单的权限

要更新处于DraftPublishedDeprecated生命周期状态的软件包版本的软件物料清单,您需要一个 AWS Identity and Access Management 角色和策略来在 Amazon S3 中查找新的软件物料清单并在中更新软件包版本 AWS IoT Core。

首先,您需要将更新的软件物料清单放在版本控制的 Amazon S3 存储桶中,并使用包含的sboms参数调用该UpdatePackageVersionAPI操作。接下来,您的授权委托人将担任您创建的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>" ] } ] }
  • 传递角色权限:策略授予在您调用UpdatePackageVersionAPI操作 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 存储桶并向其上传对象的更多信息,请参阅创建存储桶上传对象