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) 连接使用带有公钥和私钥的证书:

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

  • 通过互联网连接以Amazon IoT Greengrass发现核心设备的客户端设备。

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

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

证书颁发机构 (CA) 证书

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

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

在本地 MQTT 代理上轮换证书

启用客户端设备支持时,Greengrass 核心设备会生成本地 MQTT 服务器证书,客户端设备使用该证书进行相互身份验证。该证书由核心设备 CA 证书签名,核心设备将其存储在Amazon IoT Greengrass云中。客户端设备在发现核心设备时检索核心设备 CA 证书。当他们连接到核心设备时,他们使用核心设备 CA 证书来验证核心设备的 MQTT 服务器证书。核心设备 CA 证书将在 5 年后过期。

默认情况下,MQTT 服务器证书每 7 天过期一次,您可以将此持续时间配置为 2 到 10 天。此时间期限基于安全最佳实践。这种轮换有助于缓解攻击者窃取 MQTT 服务器证书和私钥来冒充 Greengrass 核心设备的威胁。

Greengrass 核心设备会在 MQTT 服务器证书到期前 24 小时对其进行轮换。Greengrass 核心设备生成新证书并重启本地 MQTT 代理。发生这种情况时,连接到 Greengrass 核心设备的所有客户端设备都将断开连接。客户端设备可以在短时间后重新连接到 Greengrass 核心设备。

数据层面操作的 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政策操作

重要

核心设备的@@ 策略或 Greengrass 数据平面操作不支持事物Amazon IoT策略变量 (iot:Connection.Thing.*)。相反,您可以使用通配符来匹配多个名称相似的设备。例如,您可以指定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策略中使用的以下策略操作。要指定策略操作的资源,您使用资源的 Amazon 资源名称 (ARN)。

核心设备操作
greengrass:GetComponentVersionArtifact

授予获取预签名 URL 以下载公有组件构件或 Lambda 组件构件的权限。

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

资源类型:componentVersion

资源 ARN 格式:arn:aws:greengrass:region:account-id:components:component-name:versions:component-version

greengrass:ResolveComponentCandidates

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

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

资源类型:无

资源 ARN 格式:*

greengrass:GetDeploymentConfiguration

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

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

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

资源类型:无

资源 ARN 格式:*

greengrass:ListThingGroupsForCoreDevice

授予权限以获取核心设备的事物组层次结构。

当核心设备收到来自的部署时,会检查此权限Amazon IoT Greengrass。核心设备使用此操作来确定自上次部署以来是否已将其从事物组中删除。如果核心设备已从事物组中移除,并且该事物组是核心设备部署的目标,则核心设备会移除该部署安装的组件。

此功能由 Greengrass 核组件的 v2.5.0 及更高版本使用。

资源类型:thing(核心设备)

资源 ARN 格式:arn:aws:iot:region:account-id:thing/core-device-thing-name*

greengrass:VerifyClientDeviceIdentity

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

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

资源类型:无

资源 ARN 格式:*

greengrass:VerifyClientDeviceIoTCertificateAssociation

授予权限以验证客户端设备是否与Amazon IoT证书关联。

当核心设备运行客户端设备身份验证组件并授权客户端设备通过 MQTT 进行连接时,将评估此权限。有关更多信息,请参阅与本地 IoT 设备互动

注意

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

资源类型:thing(客户端设备)

资源 ARN 格式:arn:aws:iot:region:account-id:thing/client-device-thing-name

greengrass:PutCertificateAuthorities

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

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

资源类型:无

ARN 格式:*

greengrass:GetConnectivityInfo

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

当核心设备安装并运行客户端设备身份验证组件时,将评估此权限。此组件使用连接信息生成有效的 CA 证书,以便通过PutCertificateAuthories操作上传到Amazon IoT Greengrass云服务。客户端设备使用这些 CA 证书来验证核心设备的身份。有关更多信息,请参阅与本地 IoT 设备互动

您也可以在Amazon IoT Greengrass控制平面上使用此操作来查看核心设备的连接信息。有关更多信息,请参阅《Amazon IoT Greengrass V1 API 参考》中的 GetConnectivityInfo

资源类型:thing(核心设备)

资源 ARN 格式:arn:aws:iot:region:account-id:thing/core-device-thing-name*

greengrass:UpdateConnectivityInfo

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

当核心设备运行 IP 检测器组件时,将评估此权限。此组件标识客户端设备连接到本地网络上的核心设备所需的信息。然后,此组件使用此操作将连接信息上传到Amazon IoT Greengrass云服务,以便客户端设备可以通过 “发现” 操作检索此信息。有关更多信息,请参阅与本地 IoT 设备互动

您也可以在Amazon IoT Greengrass控制平面上使用此操作来手动更新核心设备的连接信息。有关更多信息,请参阅《Amazon IoT Greengrass V1 API 参考》中的 UpdateConnectivityInfo

资源类型:thing(核心设备)

资源 ARN 格式:arn:aws:iot:region:account-id:thing/core-device-thing-name*

客户端设备操作
greengrass:Discover

授予权限以发现客户端设备可以连接的核心设备的连接信息。此信息描述了客户端设备如何连接到核心设备。通过使用该BatchAssociateClientDeviceWithCoreDevice操作,客户端设备只能发现与之关联的核心设备。有关更多信息,请参阅与本地 IoT 设备互动

资源类型:thing(客户端设备)

资源 ARN 格式:arn:aws:iot:region:account-id:thing/client-device-thing-name

更新核心设备的Amazon IoT政策

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

注意

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

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

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

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

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

  5. 在 “证书” 选项卡中,选择事物的活动证书。

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

  7. 在 “策略” 选项卡中,选择要查看和更新的Amazon IoT策略。您可以将所需的权限添加到附加到核心设备的活动证书的任何策略中。

    注意

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

  8. 在策略概览中,选择编辑活跃版本

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

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

  11. 选择 “另存为新版本”。

  1. 列出核心设备的原Amazon IoT理。事物主体可以是 X.509 设备证书或其他标识。运行以下命令,并MyGreengrassCore替换为核心设备的名称。

    aws iot list-thing-principals --thing-name MyGreengrassCore

    该操作会返回一个响应,其中列出了核心设备的事物主体。

    { "principals": [ "arn:aws:iot:us-west-2:123456789012:cert/certificateId" ] }
  2. 识别核心设备的有效证书。运行以下命令,将 certcert ificate Id 替换为上一步中每个证书的 ID,直到找到有效证书。证书 ID 是证书 ARN 末尾的十六进制字符串。该--query参数指定仅输出证书的状态。

    aws iot describe-certificate --certificate-id certificateId --query 'certificateDescription.status'

    该操作以字符串形式返回证书状态。例如,如果证书处于活动状态,则此操作将输出"ACTIVE"

  3. 列出附加到证书的Amazon IoT策略。运行以下命令,将证书 ARN 替换为证书的 ARN。

    aws iot list-principal-policies --principal arn:aws:iot:us-west-2:123456789012:cert/certificateId

    该操作返回一个响应,其中列出了附加到证书的Amazon IoT策略。

    { "policies": [ { "policyName": "GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias" }, { "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy" } ] }
  4. 选择要查看和更新的政策。

    注意

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

  5. 获取策略文档。运行以下命令,然后将 GreenGrassv2IoTThingPolicy 替换为策略的名称。

    aws iot get-policy --policy-name GreengrassV2IoTThingPolicy

    该操作会返回一个响应,其中包含策略的文档和有关该策略的其他信息。策略文档是一个序列化为字符串的 JSON 对象。

    { "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Connect\",\n \"iot:Publish\",\n \"iot:Subscribe\",\n \"iot:Receive\",\n \"greengrass:*\"\n],\n \"Resource\": \"*\"\n }\n ]\n}", "defaultVersionId": "1", "creationDate": "2021-02-05T16:03:14.098000-08:00", "lastModifiedDate": "2021-02-05T16:03:14.098000-08:00", "generationId": "f19144b798534f52c619d44f771a354f1b957dfa2b850625d9f1d0fde530e75f" }
  6. 使用在线转换器或其他工具将策略文档字符串转换为 JSON 对象,然后将其保存到名为的文件中iot-policy.json

    例如,如果您安装了 jq 工具,则可以运行以下命令来获取策略文档,将其转换为 JSON 对象,然后将策略文档另存为 JSON 对象。

    aws iot get-policy --policy-name GreengrassV2IoTThingPolicy --query 'policyDocument' | jq fromjson >> iot-policy.json
  7. 查看政策文档,然后根据需要添加、删除或编辑权限。

    例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 打开文件。

    nano iot-policy.json

    完成后,该政策文档可能看起来与核心设备的最低Amazon IoT政策相似。

  8. 将更改另存为策略的新版本。运行以下命令,然后将 GreenGrassv2IoTThingPolicy 替换为策略的名称。

    aws iot create-policy-version --policy-name GreengrassV2IoTThingPolicy --policy-document file://iot-policy.json --set-as-default

    如果操作成功,将返回类似于以下示例的响应。

    { "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n\t\t\"iot:Connect\",\n\t\t\"iot:Publish\",\n\t\t\"iot:Subscribe\",\n\t\t\"iot:Receive\",\n\t\t\"greengrass:*\"\n ],\n \"Resource\": \"*\"\n }\n ]\n}", "policyVersionId": "2", "isDefaultVersion": true }

Amazon IoT Greengrass V2核心设备的最低Amazon IoT政策

重要

更高版本的 Greengrass 核心组件需要对最低Amazon IoT策略具有额外权限。您可能需要更新核心设备的Amazon IoT策略才能授予更多权限。

  • 当您从事物组中移除核心设备时,运行 Greengrass nucleus v2.5.0 及更高版本的核心设备会使用卸载组件的greengrass:ListThingGroupsForCoreDevice权限。

  • 运行 Greengrass nucleus v2.3.0 及更高版本的核心设备使用该greengrass:GetDeploymentConfiguration权限来支持大型部署配置文档。

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

  • 该策略在核心设备事物名称后包含*通配符(例如,core-device-thing-name*)。核心设备使用相同的设备证书进行多次并发订阅Amazon IoT Core,但是连接中的客户端 ID 可能与核心设备事物名称不完全匹配。在前 50 个订阅之后,核心设备使用core-device-thing-name#number作为客户端 ID,每number增加 50 个订阅就会增加。例如,当名为的核心设备MyCoreDevice创建 150 个并发订阅时,它会使用以下客户端 ID:

    • 订阅 1 到 50:MyCoreDevice

    • 订阅 51 到 100:MyCoreDevice#2

    • 订阅 101 到 150:MyCoreDevice#3

    当核心设备使用这些带有后缀的客户端 ID 时,通配符允许其进行连接。

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

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

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

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

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

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

{ "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:AssumeRoleWithCertificate", "Resource": "arn:aws:iot:region:account-id:rolealias/token-exchange-role-alias-name" }, { "Effect": "Allow", "Action": [ "greengrass:GetComponentVersionArtifact", "greengrass:ResolveComponentCandidates", "greengrass:GetDeploymentConfiguration", "greengrass:ListThingGroupsForCoreDevice" ], "Resource": "*" } ] }

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

以下示例策略包括支持与核心设备上的客户端设备交互所需的最少操作集。要支持客户端设备,除了基本操作的最小Amazon IoT策略外,核心设备还必须具有此Amazon IoT策略中的权限。

  • 该策略允许核心设备更新自己的连接信息。只有将 IP 检测器组件部署到核心设备时,才需要此权限 (greengrass:UpdateConnectivityInfo)。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name*-gci/shadow/get" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/things/core-device-thing-name*-gci/shadow/update/delta", "arn:aws:iot:region:account-id:topicfilter/$aws/things/core-device-thing-name*-gci/shadow/get/accepted" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name*-gci/shadow/update/delta", "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name*-gci/shadow/get/accepted" ] }, { "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:iot:region:account-id:thing/core-device-thing-name*" ] } ] }

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

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

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

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

    重要

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

  • 客户端设备的Amazon IoT策略通常不要求具有、或iot:DeleteThingShadow操作的权限iot:GetThingShadowiot:UpdateThingShadow,因为 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/*" ] } ] }