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

您正在查看Amazon IoT Greengrass Version 1.Amazon IoT Greengrass Version 2是最新的主要版本Amazon IoT Greengrass. 有关使用Amazon IoT Greengrass V2,请参阅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 核心的设备。这些连接设备(也称为 Greengrass 设备)使用证书和策略来连接到 Amazon IoT Core 和 Amazon IoT Greengrass 服务。这使设备能够使用 Amazon IoT Greengrass 发现服务查找并连接到核心设备。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 连接设备。

  • 通过本地网络连接到组中的 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) 证书

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

注意

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

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

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

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

要进行证书轮换,Greengrass 连接设备必须在线并能够定期直接访问 Amazon IoT Greengrass 服务。当证书过期后,Greengrass 核心设备将尝试连接到 Amazon IoT Greengrass 服务以获取新证书。如果连接成功,核心设备将下载新的 MQTT 服务器证书并重新启动本地 MQTT 服务。此时,连接到核心的所有 Greengrass 设备都将断开。如果设备在过期时处于离线状态,它不会接收替换证书。任何新的连接到核心服务的尝试都会被拒绝。现有连接不会受影响。设备将无法连接到核心,直至恢复了到 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 设备的操作组成,如检索部署和更新连接信息。

网络 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 开发人员指南.

注意

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 定义 Greengrass 设备可以在 Amazon IoT 策略中使用的以下策略操作:

greengrass:Discover

Greengrass 设备使用发现 API 检索其组的核心连接信息和组证书颁发机构的权限。

当 Greengrass 设备通过 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)。

  • 使用事物策略变量(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:greengrass:region:account-id:/greengrass/things/core-name-*/connectivityInfo" ] } ] }
注意

已连接的 Greengrass 设备的 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 核心会处理已连接设备的影子同步操作。在这种情况下,请确认Resource部分,用于核心的Amazon IoT策略包括连接设备的 ARN。

 

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

  1. 在导航窗格中,依次选择 Manage (管理)Things (事物) 和核心。

  2. 在核心的配置页面上,选择 Security (安全性)

  3. Certificates (证书) 页面上,选择您的证书。

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

    如果要编辑策略,请选择 Edit policy document (编辑策略文档)