Amazon IoT Greengrass 的设备身份验证和授权 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Amazon IoT Greengrass 的设备身份验证和授权

Amazon IoT Greengrass 环境中的设备使用 X.509 证书进行身份验证,使用 Amazon IoT 策略进行授权。证书和策略可让设备在彼此之间以及与 Amazon IoT Core 和 Amazon IoT Greengrass 之间安全地相互连接。

X.509 证书属于数字证书,它按照 X.509 公有密钥基础设施标准将公有密钥与证书所含的身份相关联。X.509 证书由一家名为证书颁发机构 (CA) 的可信实体颁发。CA 持有一个或多个名为 CA 证书的特殊证书,它使用这种证书来颁发 X.509 证书。只有证书颁发机构才有权访问 CA 证书。

Amazon IoT 策略定义允许 Amazon IoT 设备执行的操作集。具体而言,它们允许和拒绝访问 Amazon IoT Core 和 Amazon IoT Greengrass 数据层面操作,如发布 MQTT 消息和检索设备阴影。

所有设备都需要在 Amazon IoT Core 注册表中有条目,并且需要带附加 Amazon IoT 策略的已激活的 X.509 证书。设备分为两类:

  • Greengrass 核心设备

    Greengrass 核心设备使用证书和Amazon IoT要连接到的策略 Amazon IoT Core 和Amazon IoT Greengrass. 证书和策略还允许Amazon IoT Greengrass将组件和配置部署到核心设备。

  • 客户端设备

    MQTT 客户端设备使用证书和策略连接到 Amazon IoT Core 和Amazon IoT Greengrass服务。这使客户端设备能够使用Amazon IoT Greengrass云发现以查找并连接到 Greengrass 核心设备。客户端设备使用同一证书连接到 Amazon IoT Core 云服务和核心设备。客户端设备还使用发现信息与核心设备进行双向身份验证。有关更多信息,请参阅与本地 IoT 设备进行交互

X.509 证书

核心设备和客户端设备之间以及设备和 Amazon IoT Core 或者Amazon IoT Greengrass必须进行身份验证。此双向身份验证基于注册的 X.509 设备证书和加密密钥。

在 Amazon IoT Greengrass 环境中,设备对以下传输层安全性 (TLS) 连接使用带有公钥和私钥的证书:

  • 这些区域有:Amazon IoTGreengrass 核心设备上的客户端组件,该组件连接到 Amazon IoT Core 和Amazon IoT Greengrass通过互联网。

  • 连接到Amazon IoT Greengrass通过互联网发现核心设备。

  • Greengrass 核心上的 MQTT 代理组件通过本地网络连接到组中的 Greengrass 设备的 Greengrass 核心。

Amazon IoT Greengrass核心设备将证书存储在 Greengrass 根文件夹中。

证书颁发机构 (CA) 证书

Greengrass 核心设备和客户端设备将下载用于使用 Amazon IoT Core 和Amazon IoT Greengrass服务。我们建议您使用 Amazon Trust Services (ATS) 根 CA 证书,如 Amazon Root CA 1。有关更多信息,请参阅 。用于服务器身份验证的 CA 证书中的 Amazon IoT Core 开发人员指南.

注意

您的 CA 证书类型必须与终端节点匹配。将 ATS 根 CA 证书与 ATS 终端节点(首选)或具有旧式终端节点的 VeriSign 根 CA 证书结合使用。只有一些Amazon区域支持传统终端节点。有关更多信息,请参阅使用与 CA 证书类型匹配的服务终端节点

客户端设备还下载 Greengrass 核心设备 CA 证书。他们使用此证书在双向身份验证期间验证核心设备上的 MQTT 服务器证书。

本地 MQTT 代理上的证书轮换

Greengrass 核心设备生成本地 MQTT 服务器证书,客户端设备使用该证书进行相互身份验证。此证书由核心设备 CA 证书签署,核心设备将存储在Amazon IoT Greengrass云。MQTT 服务器证书每 7 天过期一次。此时间期限基于安全最佳实践。此轮换有助于减轻攻击者窃取 MQTT 服务器证书和私钥以模拟 Greengrass 核心设备的威胁。

当 MQTT 服务器证书过期后,Greengrass 核心设备将生成新证书并重新启动本地 MQTT 代理。发生这种情况时,连接到 Greengrass 核心设备的所有客户端设备都将断开连接。客户端设备可以在短时间后重新连接到 Greengrass 核心设备。

核心设备 CA 证书不会过期或轮换。

数据层面操作的 Amazon IoT 策略

使用Amazon IoT策略以授权对 Amazon IoT Core 和Amazon IoT Greengrass数据平面。这些区域有: Amazon IoT Core 数据层面提供了设备、用户和应用程序的操作。这些操作包括连接到 Amazon IoT Core 并订阅主题。这些区域有:Amazon IoT Greengrass数据平面为 Greengrass 设备提供操作。这些操作包括解析组件依赖关系和下载公共组件工件的功能。

网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT策略是一个 JSON 文档,类似于IAM 策略. 它包含一个或多个策略语句,用于指定以下属性:

  • Effect. 访问模式,可以是Allow或者Deny.

  • Action. 策略允许或拒绝的操作的列表。

  • Resource. 允许或拒绝对其执行操作的资源的列表。

Amazon IoT策略支持*作为通配符,并将 MQTT 通配符 (+#)作为文字字符串。有关的更多信息*通配符,请参阅在资源 ARN 中使用通配符中的Amazon Identity and Access Management用户指南.

有关更多信息,请参阅 。Amazon IoT策略Amazon IoT策略操作中的 Amazon IoT Core 开发人员指南.

重要

事物策略变量(iot:Connection.Thing.*)不支持Amazon IoT策略的核心设备或 Greengrass 数据平面操作。相反,您可以使用匹配具有相似名称的多个设备的通配符。例如,您可以指定MyGreengrassDevice*匹配MyGreengrassDevice1MyGreengrassDevice2等等。

注意

Amazon IoT Core 使您能够附加Amazon IoT策略添加到事物组,以定义设备组的权限。事物组策略不允许访问Amazon IoT Greengrass数据层面操作。要允许事物访问Amazon IoT Greengrass数据平面操作,请将权限添加到Amazon IoT策略,您附加到事物的证书。

Amazon IoT Greengrass V2 策略操作

Amazon IoT Greengrass V2定义 Greengrass 核心设备和客户端设备可以在Amazon IoT策略:

核心设备操作

greengrass:GetComponentVersionArtifact

授予权限以获取预签名 URL 以下载公有组件

当核心设备收到指定具有项目的公共组件的部署时,将评估此权限。如果核心设备已经有该工件,则不会再次下载该工件。

greengrass:ResolveComponentCandidates

授予权限以识别符合部署组件、版本和平台要求的组件列表。如果要求冲突,或者不存在满足要求的组件,此操作将返回错误,并且设备上的部署失败。

当核心设备收到指定组件的部署时,将评估此权限。

greengrass:GetDeploymentConfiguration

授予权限以获取预签名 URL 以下载大型部署文档。

当核心设备收到指定大于 7 KB(如果部署针对某个事物)或 31 KB(如果部署针对某个事物组)的部署文档的部署时,将评估此权限。部署文档包括组件配置、部署策略和部署元数据。有关更多信息,请参阅部署Amazon IoT Greengrass组件到设备

此功能适用于 v2.3.0 及更高版本Greengrass 核组件.

greengrass:VerifyClientDeviceIdentity

授予验证连接到核心设备的客户端设备身份的权限。

当核心设备从客户端设备接收 MQTT 连接时,将评估此权限。客户端设备显示其Amazon IoT设备证书。然后,核心设备将设备证书发送到Amazon IoT Greengrass云服务来验证客户端设备的身份。有关更多信息,请参阅与本地 IoT 设备进行交互

greengrass:VerifyClientDeviceIoTCertificateAssociation

授予验证客户端设备是否与Amazon IoT证书。

当核心设备授权客户端设备通过 MQTT 进行连接时,将评估此权限。有关更多信息,请参阅与本地 IoT 设备进行交互

注意

对于要使用此操作的核心设备,Greengrass 服务角色必须与您的 Amazon Web Services 账户 并允许iot:DescribeCertificate权限。

greengrass:PutCertificateAuthorities

授予上载客户端设备可以下载的证书颁发机构 (CA) 证书的权限以验证核心设备。

此权限将在核心设备安装并运行客户端设备身份验证组件. 此组件创建一个本地证书颁发机构,并使用此操作上载其 CA 证书。客户端设备在使用发现操作来查找他们可以连接的核心设备。当客户端设备连接到核心设备上的 MQTT 代理时,它们会使用这些 CA 证书来验证核心设备的身份。有关更多信息,请参阅与本地 IoT 设备进行交互

greengrass:GetConnectivityInfo

授予权限以获取核心设备的连接信息。此信息介绍了客户端设备如何连接到核心设备。

此权限将在核心设备安装并运行客户端设备身份验证组件. 此组件使用连接信息生成有效的 CA 证书,以上载到Amazon IoT Greengrass使用云服务的推出证书授权operation. 客户端设备使用这些 CA 证书验证核心设备的身份。有关更多信息,请参阅与本地 IoT 设备进行交互

您还可以在Amazon IoT Greengrass控制面板查看核心设备的连接信息。有关更多信息,请参阅 。获取连接信息中的Amazon IoT Greengrass V1API 参考.

greengrass:UpdateConnectivityInfo

授予权限以更新核心设备的连接信息。此信息介绍了客户端设备如何连接到核心设备。

当核心设备运行IP 检测器组件. 此组件标识客户端设备连接到本地网络上的核心设备所需的信息。然后,此组件使用此操作将连接性信息上载到Amazon IoT Greengrass云服务,因此客户端设备可以通过发现operation. 有关更多信息,请参阅与本地 IoT 设备进行交互

您还可以在Amazon IoT Greengrass控制面板以手动更新核心设备的连接信息。有关更多信息,请参阅 。UpdateConnectivityInfo中的Amazon IoT Greengrass V1API 参考.

客户端设备操作

greengrass:Discover

授予发现客户端设备可以连接的核心设备连接信息的权限。此信息描述了客户端设备如何连接到核心设备。客户端设备只能通过使用批处理关联设备与核心设备operation. 有关更多信息,请参阅与本地 IoT 设备进行交互

更新核心设备的Amazon IoT策略

您可以使用Amazon IoT Greengrass和Amazon IoT控制台以查看和更新核心设备的Amazon IoT政策。

注意

如果您将Amazon IoT Greengrass核心软件安装程序用于配置资源,则核心设备将具有Amazon IoT策略,允许访问所有Amazon IoT Greengrass操作(greengrass:*)。您可以按照以下步骤操作,将访问限制为仅核心设备使用的操作。

要查看和更新核心设备的Amazon IoT策略

  1. Amazon IoT Greengrass控制台导航菜单中,选择核心设备.

  2. 在存储库的核心设备页面上,选择要更新的核心设备。

  3. 在核心设备详细信息页面上,选择指向核心设备Thing. 此链接打开事物详细信息页面Amazon IoT控制台。

  4. 在事物详细信息页面上,选择证书.

  5. 证书选项卡上,选择事物的活动证书。

  6. 在证书详细信息页面上,选择策略.

  7. 策略选项卡上,选择Amazon IoT政策进行审查和更新。您可以将所需的权限添加到附加到核心设备的活动证书的任何策略。

    注意

    如果您将Amazon IoT Greengrass核心软件安装程序用于配置资源,你有两个Amazon IoT政策。建议您选择名为GreengrassV2IoTThingPolicy(如果存在)。使用快速安装程序创建的核心设备默认使用此策略名称。如果您向此策略添加权限,则还将向使用此策略的其他核心设备授予这些权限。

  8. 在策略概述中,选择编辑策略文档.

  9. 查看策略并根据需要添加、删除或编辑权限。

  10. 选择另存为新版本.

最低Amazon IoT用于 的 策略Amazon IoT Greengrass V2核心设备

以下示例策略包含为支持核心设备的基本 Greengrass 功能所需的一组最少操作。

  • 此策略包括*核心设备事物名称后面的通配符(例如,core-device-thing-name*)。核心设备使用相同的设备证书进行多个连接 Amazon IoT Core ,但连接中的客户端 ID 可能与核心设备事物名称不完全匹配。此通配符允许核心设备在使用带后缀的客户端 ID 时进行连接。

  • 该策略列出了核心设备可将消息发布到、订阅和从中接收消息的 MQTT 主题和主题筛选条件(包括用于影子状态的主题)。支持消息交换 Amazon IoT Core 、Greengrass 组件和客户端设备,指定要允许的主题和主题筛选条件。有关更多信息,请参阅 。发布/订阅策略示例中的 Amazon IoT Core 开发人员指南.

  • 策略授予向以下主题发布遥测数据的权限。

    $aws/things/core-device-thing-name*/greengrass/health/json

    对于禁用遥测的核心设备,您可以删除此权限。有关更多信息,请参阅收集系统健康状况遥测数据,从Amazon IoT Greengrass核心设备

  • 该策略授予权限以担任 IAM 角色,该策略通过Amazon IoT角色别名。核心设备使用此角色(称为令牌交换角色)来获取Amazon凭据,可用于验证Amazon请求。有关更多信息,请参阅授权核心设备与Amazon服务

    当您安装Amazon IoT Greengrass核心软件,您可以创建并附加第二个Amazon IoT策略,该策略仅包含此权限。如果您将此权限包含在核心设备的主设备Amazon IoT策略,则可以分离和删除其他Amazon IoT政策。

  • 该策略包含一个部分,该部分允许 Amazon IoT Core 获取、更新和删除核心设备的阴影。要允许对 Greengrass 组中的已连接设备进行影子同步,请在 Resource 列表中指定目标 Amazon 资源名称 (ARN)(例如 arn:aws:iot:region:account-id:thing/device-name)。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": "arn:aws:iot:region:account-id:client/core-device-thing-name*" }, { "Effect": "Allow", "Action": [ "iot:Receive", "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name*/greengrass/health/json", "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name*/greengrassv2/health/json", "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name*/jobs/*", "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name*/shadow/*" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/things/core-device-thing-name*/jobs/*", "arn:aws:iot:region:account-id:topicfilter/$aws/things/core-device-thing-name*/shadow/*" ] }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": [ "arn:aws:iot:region:account-id:thing/core-device-thing-name*" ] }, { "Effect": "Allow", "Action": "iot:AssumeRoleWithCertificate", "Resource": "arn:aws:iot:region:account-id:rolealias/token-exchange-role-alias-name" }, { "Effect": "Allow", "Action": [ "greengrass:GetComponentVersionArtifact", "greengrass:ResolveComponentCandidates", "greengrass:GetDeploymentConfiguration" ], "Resource": "*" } ] }

最低Amazon IoT策略来支持客户端设备

以下示例策略包含为支持与核心设备上的客户端设备进行交互所需的一组最少操作。要支持客户端设备,核心设备必须具有Amazon IoT策略以及最低Amazon IoT基本操作策略.

  • 该策略允许核心设备获取、更新和删除任何Amazon IoT事物。这些权限允许核心设备管理和同步客户端设备的阴影。要遵循最佳安全实践,请限制iot:GetThingShadowiot:UpdateThingShadow, 和iot:DeleteThingShadow操作到连接到核心设备的最小客户端设备集,以供您使用案例使用。

  • 该策略允许核心设备更新自己的连接信息。只有在部署IP 检测器组件传输到核心设备。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "greengrass:PutCertificateAuthorities", "greengrass:VerifyClientDeviceIdentity" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "greengrass:VerifyClientDeviceIoTCertificateAssociation" ], "Resource": "arn:aws:iot:region:account-id:thing/*" }, { "Effect": "Allow", "Action": [ "greengrass:GetConnectivityInfo", "greengrass:UpdateConnectivityInfo" ], "Resource": [ "arn:aws:greengrass:region:account-id:/greengrass/things/core-device-thing-name*/connectivityInfo" ] }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": [ "arn:aws:iot:region:account-id:thing/*" ] } ] }

最低Amazon IoT客户端设备的策略

以下示例策略包含客户端设备在发现核心设备通过 MQTT 连接和通信的核心设备所需的一组最少操作。客户端设备的Amazon IoT策略必须包含greengrass:Discover操作,以允许设备发现其关联的 Greengrass 核心设备的连接信息。在Resource部分中,指定客户端设备的 Amazon 资源名称 (ARN),而不是 Greengrass 核心设备的 ARN。

  • 该策略允许就所有 MQTT 主题进行通信。要遵循最佳安全实践,请限制iot:Publishiot:Subscribe, 和iot:Receive权限访问客户端设备为您的使用案例所需的最小主题集。

  • 该政策允许事情发现所有核心设备Amazon IoT事物。要遵循最佳安全实践,请限制greengrass:Discover权限访问客户端设备的Amazon IoT事物或一个匹配一组Amazon IoT事物。

    重要

    事物策略变量(iot:Connection.Thing.*)不支持Amazon IoT策略的核心设备或 Greengrass 数据平面操作。相反,您可以使用匹配具有相似名称的多个设备的通配符。例如,您可以指定MyGreengrassDevice*匹配MyGreengrassDevice1MyGreengrassDevice2,依此类推。

  • 客户端设备的Amazon IoT策略通常不需要iot:GetThingShadowiot:UpdateThingShadow,或者iot:DeleteThingShadow操作,因为 Greengrass 核心设备处理客户端设备的卷影同步操作。要使核心设备能够处理客户端设备阴影,请检查核心设备的Amazon IoT策略允许这些操作,并且Resource部分包含客户端设备的 ARN。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account-id:topic/*" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topicfilter/*" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account-id:topic/*" ] }, { "Effect": "Allow", "Action": [ "greengrass:Discover" ], "Resource": [ "arn:aws:iot:region:account-id:thing/*" ] } ] }