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

Amazon IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 Amazon IoT Greengrass V1 维护策略。在此日期之后,将 Amazon IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 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 Core 软件的路径。通常,这是 /greengrass 目录。

有关更多信息,请参阅 Amazon IoT Greengrass 核心安全主体

证书颁发机构 (CA) 证书

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

注意

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

客户端设备还将下载 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 Greengrass API 中,您可以使用UpdateGroupCertificateConfiguration操作。

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

数据层面操作的 Amazon IoT 策略

使用 Amazon IoT 策略授权对 Amazon IoT Core 和 Amazon IoT Greengrass 数据层面的访问。Amazon IoT Core 数据层面由设备、用户和应用程序的操作组成,如连接到 Amazon IoT Core 和订阅主题。Amazon IoT Greengrass 数据层面由 Greengrass 设备的操作组成,如检索部署和更新连接信息。

Amazon IoT 策略是一个与 IAM 策略 类似的 JSON 文档。它包含一个或多个策略语句,用于指定以下属性:

  • Effect。访问模式,可以是 AllowDeny

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

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

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

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

注意

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 列表中指定目标 Amazon 资源名称 (ARN)(例如 arn:aws:iot:region:account-id:thing/device-name)。

  • 不支持在核心设备的 Amazon IoT 策略中使用事物策略变量 (iot:Connection.Thing.*)。核心使用同一个设备证书与 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:Receiveiot:Subscribe 操作的类似权限。

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

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

客户端设备的 Amazon IoT 策略通常不需要 iot:GetThingShadowiot:UpdateThingShadowiot:DeleteThingShadow 操作的权限,因为 Greengrass 核心会处理客户端设备的影子同步操作。在这种情况下,请确保核心的 Amazon IoT 策略中针对影子操作的 Resource 部分包含客户端设备的 ARN。

 

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

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

  2. 选择您的核心。

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

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

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

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

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

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

  8. 选择另存为新版本