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

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

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云服务和核心设备。客户端设备还使用发现信息与核心设备进行双向身份验证。有关更多信息,请参阅 与本地物联网设备互动

X.509 证书

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

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

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

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

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

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

证书颁发机构 (CA) 证书

Greengrass 核心设备和客户端设备会下载用于对和服务进行身份验证的根 CA 证书。Amazon IoT Core Amazon IoT Greengrass我们建议您使用 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 Greengrass V2 策略操作。这些操作包括解析组件依赖关系和下载公共组件工件的能力。

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组件部署到设备

此功能适用于 2.3.0 及更高版本的 Greengrass nucleus 组件。

资源类型:无

资源 ARN 格式:*

greengrass:ListThingGroupsForCoreDevice

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

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

Greengrass nucleus 组件的 2.5.0 及更高版本使用此功能。

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

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

greengrass:VerifyClientDeviceIdentity

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

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

资源类型:无

资源 ARN 格式:*

greengrass:VerifyClientDeviceIoTCertificateAssociation

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

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

注意

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

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

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

greengrass:PutCertificateAuthorities

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

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

资源类型:无

ARN 格式:*

greengrass:GetConnectivityInfo

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

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

您也可以在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云服务,这样客户端设备就可以通过 D iscover 操作检索此信息。有关更多信息,请参阅 与本地物联网设备互动

您也可以在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操作,客户端设备只能发现您与之关联的核心设备。有关更多信息,请参阅 与本地物联网设备互动

资源类型: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控制台导航菜单中,选择核心设备

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

  3. 在核心设备详细信息页面上,选择指向核心设备的 Thin g 的链接。此链接可在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. 识别核心设备的活动证书。运行以下命令,将 cert i ficateID 替换为上一步中每个证书的 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. 获取保单文件。运行以下命令,将 GreenGrassv2IoT 替换为策略ThingPolicy的名称

    aws iot get-policy --policy-name GreengrassV2IoTThingPolicy

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

    { "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{\ \\"Version\\": \\"2012-10-17\\",\ \\"Statement\\": [\ {\ \\"Effect\\": \\"Allow\\",\ \\"Action\\": [\ \\"iot:Connect\\",\ \\"iot:Publish\\",\ \\"iot:Subscribe\\",\ \\"iot:Receive\\",\ \\"greengrass:*\\"\ ],\ \\"Resource\\": \\"*\\"\ }\ ]\ }", "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. 将更改保存为新版本的策略。运行以下命令,将 GreenGrassv2IoT 替换为策略ThingPolicy的名称

    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": "{\ \\"Version\\": \\"2012-10-17\\",\ \\"Statement\\": [\ {\ \\"Effect\\": \\"Allow\\",\ \\"Action\\": [\ \\t\\t\\"iot:Connect\\",\ \\t\\t\\"iot:Publish\\",\ \\t\\t\\"iot:Subscribe\\",\ \\t\\t\\"iot:Receive\\",\ \\t\\t\\"greengrass:*\\"\ ],\ \\"Resource\\": \\"*\\"\ }\ ]\ }", "policyVersionId": "2", "isDefaultVersion": true }

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

重要

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

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

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

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

  • Connect策略在核心设备事物名称后面包含*通配符(例如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核心设备收集系统运行状况遥测数据

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

    安装 Amazon IoT Greengrass Core 软件时,您可以创建并附加仅包含此权限的第二个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/*" ] } ] }