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

Amazon IoT Greengrass Version 1在 2023 年 6 月 30 日之前,不再接收功能更新,只会收到安全补丁和错误修复。有关更多信息,请参阅 。Amazon IoT Greengrass V1维护政策. 强烈建议您迁移到Amazon IoT Greengrass Version 2,它补充说重要新功能对其他平台的支持.

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

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以将配置信息、Lambda 函数、连接器和托管订阅部署到核心设备。

  • 客户端设备. 客户端设备(也称为连接设备Greengrass 设备,或者设备) 是通过 MQTT 连接到 Greengrass 核心的设备。他们使用证书和策略连接到Amazon IoT Core和Amazon IoT Greengrass服务。这允许客户端设备使用Amazon IoT Greengrass发现服务,查找并连接到核心设备。客户端设备使用的是连接到Amazon IoT Core设备网关和核心设备。客户端设备还使用发现信息与核心设备进行双向身份验证。有关更多信息,请参阅 设备连接工作流程使用 Greengrass 核心管理设备身份验证

X.509 证书

核心设备和客户端设备之间以及设备和之间的通信Amazon IoT Core要么Amazon IoT Greengrass必须经过身份验证。此双向身份验证基于注册的 X.509 设备证书和加密密钥。

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

  • 通过互联网连接到 Amazon IoT Core 和 Amazon IoT Greengrass 的 Greengrass 核心上的 Amazon IoT 客户端组件。

  • 客户端设备连接到Amazon IoT Greengrass通过互联网获取核心发现信息。

  • 通过本地网络连接到组中的客户端设备的 Greengrass 核心上的 MQTT 服务器组件。

这些区域有:Amazon IoT Greengrass核心设备在两个位置存储证书:

  • /greengrass-root/certs 中的核心设备证书。通常,核心设备证书命名为 hash.cert.pem(例如,86c84488a5.cert.pem)。当核心连接到 Amazon IoT Core 和 Amazon IoT Greengrass 服务时,Amazon IoT 客户端将使用此证书进行相互身份验证。

  • /greengrass-root/ggc/var/state/server 中的 MQTT 服务器证书。MQTT 服务器证书名为 server.crt。此证书用于本地 MQTT 服务器(在 Greengrass 核心上)和 Greengrass 设备之间的相互身份验证。

    注意

    greengrass-root 表示在您的设备上安装 Amazon IoT Greengrass 核心软件的路径。通常,这是 /greengrass 目录。

有关更多信息,请参阅 Amazon IoT Greengrass 核心安全委托人

证书颁发机构 (CA) 证书

核心设备和客户端设备将下载用于身份验证的根 CA 证书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 Web Services 区域支持传统终端节点。有关更多信息,请参阅 服务终端节点必须与

客户端设备还将下载Greengrass 组 CA 证书。这用于在双向身份验证期间验证 Greengrass 核心上的 MQTT 服务器证书。有关更多信息,请参阅 设备连接工作流程。MQTT 服务器证书的默认期限为 7 天。

本地 MQTT 服务器上的证书轮换

客户端设备使用本地 MQTT 服务器证书与 Greengrass 核心设备进行双向身份验证。默认情况下,此证书将在 7 天后过期。此时间期限基于安全最佳实践。MQTT 服务器证书由存储在云中的组 CA 证书签署。

要进行证书轮换,Greengrass 核心设备必须在线并能够访问Amazon IoT Greengrass定期直接服务。当证书过期后,核心设备将尝试连接到Amazon IoT Greengrass服务以获取新证书。如果连接成功,核心设备将下载新的 MQTT 服务器证书并重新启动本地 MQTT 服务。此时,连接到此核心的所有客户端设备都将断开连接。如果核心设备在过期时处于离线状态,它不会接收替换证书。任何新的连接到核心服务的尝试都会被拒绝。现有连接不会受影响。客户端设备将无法连接到核心设备Amazon IoT Greengrass服务将恢复,并且可以下载新的 MQTT 服务器证书。

您可以将过期时间设置为 7 天到 30 天之间的任何值,具体取决于您的需要。轮换越频繁,就需要越频繁地进行云连接。轮换频率较低可能会带来安全问题。如果要将证书过期时间值设置为高于 30 天,请联系Amazon Web Services Support.

在Amazon IoT控制台上,您可以管理组的设置页. 在Amazon IoT GreengrassAPI,您可以使用UpdateGroupCertificateConfigurationaction.

当 MQTT 服务器证书过期后,所有验证证书的尝试都将失败。客户端设备必须能够检测故障并终止连接。

数据层面操作的 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 policy. 它包含一个或多个策略语句,用于指定以下属性:

  • Effect. 访问模式,可以是Allow要么Deny.

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

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

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

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

注意

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

Amazon IoT Greengrass 策略操作

Greengrass 核心操作

Amazon IoT Greengrass 定义 Greengrass 核心设备可以在 Amazon IoT 策略中使用的以下策略操作:

greengrass:AssumeRoleForGroup

Greengrass 核心设备使用 Token Exchange Service (TES) 系统 Lambda 函数检索凭证的权限。绑定到检索到的凭证的权限基于附加到已配置组角色的策略。

当 Greengrass 核心设备尝试检索凭证时(假设凭证未在本地缓存),将检查此权限。

greengrass:CreateCertificate

Greengrass 核心设备创建自己的服务器证书的权限。

当 Greengrass 核心设备创建证书时,将检查此权限。Greengrass 核心设备尝试在第一次运行时、当核心的连接信息更改时,以及在指定的轮换周期内创建服务器证书。

greengrass:GetConnectivityInfo

Greengrass 核心设备检索自己的连接信息的权限。

当 Greengrass 核心设备尝试从 Amazon IoT Core 检索其连接信息时,将检查此权限。

greengrass:GetDeployment

Greengrass 核心设备检索部署的权限。

当 Greengrass 核心设备尝试从云中检索部署和部署状态时,将检查此权限。

greengrass:GetDeploymentArtifacts

Greengrass 核心设备检索部署构件(如组信息或 Lambda 函数)的权限。

当 Greengrass 核心设备接收部署,然后尝试检索部署构件时,将检查此权限。

greengrass:UpdateConnectivityInfo

Greengrass 核心设备使用 IP 或主机名信息更新自己的连接信息的权限。

当 Greengrass 核心设备尝试更新云中的连接信息时,将检查此权限。

greengrass:UpdateCoreDeploymentStatus

Greengrass 核心设备更新部署状态的权限。

当 Greengrass 核心设备接收部署,然后尝试更新部署状态时,将检查此权限。

 

Greengrass 设备操作

Amazon IoT Greengrass定义了客户端设备可以在中使用的以下策略操作Amazon IoT策略:

greengrass:Discover

允许客户端设备使用发现 API检索组的核心连接信息和组证书颁发机构。

当客户端设备通过 TLS 双向身份验证调用发现 API 时,将检查此权限。

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

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

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

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

  • 使用事物策略变量(iot:Connection.Thing.*) 在Amazon IoT不支持核心设备的策略。内核使用相同的设备证书来制作多个连接到Amazon IoT Core但连接中的客户端 ID 可能与核心事物名称不完全匹配。

  • 对于 greengrass:UpdateCoreDeploymentStatus 权限,Resource ARN 中的最终段是核心设备的 URL 编码的 ARN。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:region:account-id:client/core-name-*" ] }, { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/core-name-*" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/things/core-name-*" ] }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": [ "arn:aws:iot:region:account-id:thing/core-name-*" ] }, { "Effect": "Allow", "Action": [ "greengrass:AssumeRoleForGroup", "greengrass:CreateCertificate" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "greengrass:GetDeployment" ], "Resource": [ "arn:aws:greengrass:region:account-id:/greengrass/groups/group-id/deployments/*" ] }, { "Effect": "Allow", "Action": [ "greengrass:GetDeploymentArtifacts" ], "Resource": [ "arn:aws:greengrass:region:account-id:/greengrass/groups/group-id/deployments/*" ] }, { "Effect": "Allow", "Action": [ "greengrass:UpdateCoreDeploymentStatus" ], "Resource": [ "arn:aws:greengrass:region:account-id:/greengrass/groups/group-id/deployments/*/cores/arn%3Aaws%3Aiot%3Aregion%3Aaccount-id%3Athing%2Fcore-name" ] }, { "Effect": "Allow", "Action": [ "greengrass:GetConnectivityInfo", "greengrass:UpdateConnectivityInfo" ], "Resource": [ "arn:aws:iot:region:account-id:thing/core-name-*" ] } ] }
注意

Amazon IoT客户端设备的策略通常需要iot:Connectiot:Publishiot:Receive, 和iot:Subscribe行动。

要允许客户端设备自动检测设备所属 Greengrass 组中核心的连接信息,Amazon IoT客户端设备的策略必须包含greengrass:Discoveraction. 在Resource部分中,指定客户端设备的 ARN,而不是 Greengrass 核心设备的 ARN。例如:

{ "Effect": "Allow", "Action": [ "greengrass:Discover" ], "Resource": [ "arn:aws:iot:region:account-id:thing/device-name" ] }

这些区域有:Amazon IoT客户端设备的策略通常不需要权限iot:GetThingShadowiot:UpdateThingShadow,或者iot:DeleteThingShadow操作,因为 Greengrass 核心会处理客户端设备的影子同步操作。在这种情况下,请确保Resource部分了解内核中的影子动作Amazon IoT策略包括客户端设备的 ARN。

 

在Amazon IoT控制台上,您可以查看和编辑附加到核心证书的策略。

  1. 在导航窗格中,在Manage,展开所有设备,然后选择事物.

  2. 选择核心。

  3. 在核心的配置页面上,选择证书选项卡。

  4. 证书选项卡上,选择您的证书。

  5. 在证书的配置页面上,选择 Policies (策略),然后选择该策略。

    如果要编辑策略,选择编辑活动版本.

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

  7. 要将新策略版本设置为活动版本,请在策略版本状态,选择将编辑的版本设置为此策略的活动版本.

  8. 选择另存为新版本.