AWS IoT Greengrass 的设备身份验证和授权
AWS IoT Greengrass 环境中的设备使用 X.509 证书进行身份验证,使用 AWS IoT 策略进行授权。证书和策略可让设备在彼此之间以及与 AWS IoT Core 和 AWS IoT Greengrass 之间安全地相互连接。
X.509 证书属于数字证书,它按照 X.509 公有密钥基础设施标准将公有密钥与证书所含的身份相关联。X.509 证书由一家名为证书颁发机构 (CA) 的可信实体颁发。CA 持有一个或多个名为 CA 证书的特殊证书,它使用这种证书来颁发 X.509 证书。只有证书颁发机构才有权访问 CA 证书。
AWS IoT 策略定义允许 AWS IoT 设备执行的操作集。具体而言,它们允许和拒绝访问 AWS IoT Core 和 AWS IoT Greengrass 数据层面操作,如发布 MQTT 消息和检索设备阴影。
所有设备都需要在 AWS IoT Core 注册表中有条目,并且需要带附加 AWS IoT 策略的已激活的 X.509 证书。设备分为两类:
-
Greengrass 核心设备
Greengrass 核心设备使用证书和 AWS IoT 策略连接到 AWS IoT Core 和 AWS IoT Greengrass。该证书和策略还允许 AWS IoT Greengrass 将组件和配置部署到核心设备。
-
客户端设备
MQTT 客户端设备使用证书和策略连接到 AWS IoT Core 和 AWS IoT Greengrass 服务。这允许客户端设备使用 AWS IoT Greengrass 云发现功能查找并连接到 Greengrass 设备。客户端设备使用相同的证书连接 AWS IoT Core 云服务和核心设备。客户端设备还使用发现信息与核心设备进行双向身份验证。有关更多信息,请参阅 与本地 IoT 设备交互。
X.509 证书
核心设备和客户端设备之间以及设备和 AWS IoT Core 或 AWS IoT Greengrass 之间的通信必须经过身份验证。此双向身份验证基于注册的 X.509 设备证书和加密密钥。
在 AWS IoT Greengrass 环境中,设备对以下传输层安全性 (TLS) 连接使用带有公钥和私钥的证书:
-
通过互联网连接到 AWS IoT Core 和 AWS IoT Greengrass 的 Greengrass 核心设备上的 AWS IoT 客户端组件。
-
通过互联网连接 AWS IoT Greengrass 以发现核心设备的客户端设备。
-
通过本地网络连接到组中的 Greengrass 设备的 Greengrass Nucleus 上的 MQTT 代理组件。
AWS IoT Greengrass 核心设备将证书存储在 Greengrass 根文件夹中。
证书颁发机构 (CA) 证书
Greengrass 核心设备和客户端设备下载用于使用 AWS IoT Core 和 AWS IoT Greengrass 服务进行身份验证的根 CA 证书。我们建议您使用 Amazon Trust Services (ATS) 根 CA 证书,如 Amazon Root CA 1
客户端设备还将下载 Greengrass 核心设备 CA 证书。他们使用该证书在双向身份验证期间验证核心设备上的 MQTT 服务器证书。
本地 MQTT 代理的证书轮换
启用客户端设备支持后,Greengrass 核心设备会生成本地 MQTT 服务器证书,用于让客户端设备进行双向身份验证。该证书由核心设备存储在 AWS IoT Greengrass 云中的 CA 证书签署。客户端设备在发现核心设备时会检索核心设备 CA 证书。连接到核心设备后,它们会使用核心设备 CA 证书来验证核心设备的 MQTT 服务器证书。核心设备 CA 证书将在 5 年后过期。
MQTT 服务器证书默认每 7 天到期,您可以将此有效期配置为 2 到 10 天之间。此时间期限基于安全最佳实践。这种轮换有助于降低攻击者窃取 MQTT 服务器证书和私钥并冒充 Greengrass 核心设备的风险。
Greengrass 核心设备会在 MQTT 服务器证书到期前 24 小时对其进行轮换。Greengrass 核心设备生成新证书并重新启动本地 MQTT 代理。发生这种情况时,连接到 Greengrass 核心设备的所有客户端设备都将断开连接。客户端设备可以在短时间后重新连接到 Greengrass 核心设备。
数据面板操作的 AWS IoT 策略
使用 AWS IoT 策略授权对 AWS IoT Core 和 AWS IoT Greengrass 数据面板的访问。AWS IoT Core 数据面板为设备、用户和应用程序提供操作。这些操作包括连接 AWS IoT Core 和订阅主题的能力。AWS IoT Greengrass 数据面板为 Greengrass 设备提供操作。有关更多信息,请参阅 AWS IoT Greengrass V2 策略操作。这些操作包括解析组件依赖关系和下载公有组件构件的能力。
AWS IoT 策略是一个与 IAM 策略类似的 JSON 文档。它包含一个或多个策略语句,用于指定以下属性:
-
Effect
。访问模式,可以是Allow
或Deny
。 -
Action
. 策略允许或拒绝的操作的列表。 -
Resource
. 允许或拒绝对其执行操作的资源的列表。
AWS IoT 策略支持 *
作为通配符,并将 MQTT 通配符(+
和#
)视为文字字符串。有关 *
通配符的更多信息,请参阅《AWS Identity and Access Management 用户指南》中的在资源 ARN 中使用通配符。
有关更多信息,请参阅 AWS IoT Core 开发人员指南中的 AWS IoT策略和 AWS IoT 策略操作。
重要
核心设备或 Greengrass 数据面板操作的 AWS IoT 策略不支持事物策略变量 (iot:Connection.Thing.
)。相反,您可以使用通配符来匹配多个名称相似的设备。例如,您可以指定 *
MyGreengrassDevice*
以匹配 MyGreengrassDevice1
、MyGreengrassDevice2
等。
注意
AWS IoT Core 允许您将 AWS IoT 策略附加到事物组,以定义设备组的权限。事物组策略不允许访问 AWS IoT Greengrass 数据面板操作。要允许事物访问 AWS IoT Greengrass 数据面板操作,请将权限添加到您附加到事物证书的 AWS IoT 策略中。
AWS IoT Greengrass V2 策略操作
AWS IoT Greengrass V2 定义 Greengrass 核心设备和客户端设备可以在 AWS 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(如果部署以事物组为目标)部署文档的部署时,将评估此权限。部署文档包括组件配置、部署策略和部署元数据。有关更多信息,请参阅 将 AWS IoT Greengrass 组件部署至设备。
此功能适用于 Greengrass Nucleus 组件的 v2.3.0 及更高版本。
资源类型:无
资源 ARN 格式:
*
greengrass:ListThingGroupsForCoreDevice
-
授予获取核心设备的事物组层次结构的权限。
当核心设备收到来自 AWS IoT Greengrass 的部署时,将检查此权限。核心设备使用此操作来确定自上次部署以来是否已将其从事物组中移除。如果核心设备已从事物组中移除,且该事物组是部署至核心设备的目标,则该核心设备将移除该部署安装的组件。
此功能适用于 Greengrass Nucleus 组件的 v2.5.0 及更高版本。
资源类型:
thing
(核心设备)资源 ARN 格式:
arn:aws:iot:
region
:account-id
:thing/core-device-thing-name
greengrass:VerifyClientDeviceIdentity
-
授予验证连接到核心设备的客户端设备身份的权限。
当核心设备运行客户端设备身份验证组件并收到来自客户端设备的 MQTT 连接时,将评估此权限。客户端设备出示其 AWS IoT 设备证书。然后,核心设备将设备证书发送至 AWS IoT Greengrass 云服务以验证客户端设备的身份。有关更多信息,请参阅 与本地 IoT 设备交互。
资源类型:无
资源 ARN 格式:
*
greengrass:VerifyClientDeviceIoTCertificateAssociation
-
授予验证客户端设备是否与 AWS IoT 证书关联的权限。
当核心设备运行客户端设备身份验证组件并授权客户端设备通过 MQTT 进行连接时,将评估此权限。有关更多信息,请参阅 与本地 IoT 设备交互。
注意
要使核心设备使用此操作,Greengrass 服务角色必须与您的 AWS 账户 关联并允许
iot:DescribeCertificate
权限。资源类型:
thing
(客户端设备)资源 ARN 格式:
arn:aws:iot:
region
:account-id
:thing/client-device-thing-name
-
授予上传证书颁发机构(CA)证书的权限,客户端设备可下载这些证书来验证核心设备。
当核心设备安装并运行客户端设备身份验证组件时,将评估此权限。此组件创建本地证书颁发机构,并使用此操作上传其 CA 证书。客户端设备使用 Discover 操作查找可以连接的核心设备时会下载这些 CA 证书。客户端设备连接至核心设备的 MQTT 代理后会使用这些 CA 证书来验证核心设备的身份。有关更多信息,请参阅 与本地 IoT 设备交互。
资源类型:无
ARN 格式:
*
greengrass:GetConnectivityInfo
-
授予权限以获取核心设备连接信息。此信息描述了客户端设备连接至核心设备的方式。
当核心设备安装并运行客户端设备身份验证组件时,将评估此权限。此组件使用连接信息生成有效的 CA 证书,然后通过 PutCertificateAuthories 操作上传至 AWS IoT Greengrass 云服务。客户端设备使用这些 CA 证书来验证核心设备的身份。有关更多信息,请参阅 与本地 IoT 设备交互。
您也可以在 AWS IoT Greengrass 控制面板上使用此操作来查看核心设备的连接信息。有关更多信息,请参阅 AWS IoT Greengrass V1 API 参考中的 GetConnectivityInfo。
资源类型:
thing
(核心设备)资源 ARN 格式:
arn:aws:iot:
region
:account-id
:thing/core-device-thing-name
greengrass:UpdateConnectivityInfo
-
授予权限以更新核心设备连接信息。此信息描述了客户端设备连接至核心设备的方式。
核心设备运行 IP 检测器组件时将评估此权限。此组件确定客户端设备连接至本地网络上的核心设备所需的信息。然后,此组件使用此操作将连接信息上传至 AWS IoT Greengrass 云服务,这样客户端设备就可以通过 Discover 操作检索此信息。有关更多信息,请参阅 与本地 IoT 设备交互。
您也可以在 AWS IoT Greengrass 控制面板上使用此操作来手动更新核心设备的连接信息。有关更多信息,请参阅 AWS 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
更新核心设备的 AWS IoT 策略
您可以使用 AWS IoT Greengrass 和 AWS IoT 控制台或 AWS IoT API 来查看和更新核心设备的 AWS IoT 策略。
注意
如果您使用 AWS IoT Greengrass Core 软件安装程序来预置资源,则您的核心设备具有允许访问所有 AWS IoT Greengrass 操作的 AWS IoT 策略(greengrass:*
)。您可以按照以下步骤,限制只对核心设备使用的操作进行访问。
-
在 AWS IoT Greengrass 控制台
导航菜单中,选择核心设备。 -
在核心设备页面上,选择要更新的核心设备。
-
在核心设备详细信息页面上,选择指向核心设备的事物的链接。此链接可打开 AWS IoT 控制台中的事物详细信息页面。
-
在事物详细信息页面上,选择证书。
-
在证书选项卡中,选择事物的有效证书。
-
在证书详细信息页面上,选择策略。
-
在策略选项卡中,选择要查看和更新的 AWS IoT 策略。您可以为附加到核心设备有效证书的任何策略添加所需权限。
注意
如果使用 AWS IoT Greengrass Core 软件安装程序来预置资源,则您有两个 AWS IoT 策略。我们建议您选择名为 GreengrassV2IoTThingPolicy 的策略(如果存在)。默认情况下,使用快速安装程序创建的核心设备将使用此策略名称。如果您为此策略添加权限,则也会将这些权限授予使用此策略的其他核心设备。
-
在策略概述中,选择编辑活动版本。
-
查看策略,并根据需要添加、删除或编辑权限。
-
要将新的策略版本设置为活动版本,请在策略版本状态下,选择将编辑后的版本设置为该策略的活动版本。
-
选择另存为新版本。
-
列出核心设备的 AWS IoT 事物的主体。事物主体可以是 X.509 设备证书或其他标识。运行以下命令,然后将
MyGreengrassCore
替换为核心设备的名称。aws iot list-thing-principals --thing-name
MyGreengrassCore
该操作将返回一个响应,列出核心设备的事物主体。
{ "principals": [ "arn:aws:iot:us-west-2:123456789012:cert/
certificateId
" ] } -
识别核心设备的有效证书。运行以下命令,将
certificateId
替换为上一步中每个证书的 ID,直至找到有效证书。证书 ID 是证书 ARN 末尾的十六进制字符串。--query
参数用于指定仅输出证书的状态。aws iot describe-certificate --certificate-id
certificateId
--query 'certificateDescription.status'该操作以字符串形式返回证书状态。例如,如果证书有效,则此操作会输出
"ACTIVE"
。 -
列出附加到证书的 AWS IoT 策略。运行以下命令,并将证书 ARN 替换为实际的证书 ARN。
aws iot list-principal-policies --principal
arn:aws:iot:us-west-2:123456789012:cert/certificateId
此操作会返回一个响应,响应中会列出附加到证书的 AWS 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" } ] }
-
选择要查看和更新的策略。
注意
如果使用 AWS IoT Greengrass Core 软件安装程序来预置资源,则您有两个 AWS IoT 策略。我们建议您选择名为 GreengrassV2IoTThingPolicy 的策略(如果存在)。默认情况下,使用快速安装程序创建的核心设备将使用此策略名称。如果您为此策略添加权限,则也会将这些权限授予使用此策略的其他核心设备。
-
获取策略的文档。运行以下命令,然后将
GreengrassV2IoTThingPolicy
替换为策略名称。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" }
-
使用在线转换器或其他工具将策略文档字符串转换为 JSON 对象,然后将其保存到名为
iot-policy.json
的文件中。例如,如果您安装了 jq
工具,则可以运行以下命令来获取策略文档,将其转换为 JSON 对象,然后将策略文档另存为 JSON 对象。 aws iot get-policy --policy-name
GreengrassV2IoTThingPolicy
--query 'policyDocument' | jq fromjson >> iot-policy.json -
查看策略文档,并根据需要添加、删除或编辑权限。
例如,在 Linux 系统上,您可以运行以下命令来使用 GNU nano 打开文件。
nano iot-policy.json
完成后,策略文档可能与核心设备的最低 AWS IoT 策略类似。
-
将更改保存为策略的新版本。运行以下命令,然后将
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": "{\ \\"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 }
AWS IoT Greengrass V2 核心设备的最低 AWS IoT 策略
重要
Greengrass Nucleus 组件的更高版本需要最低 AWS IoT 策略的额外权限。您可能需要更新核心设备的 AWS IoT 策略才能授予其他权限。
-
从事物组中移除核心设备时,运行 Greengrass Nucleus v2.5.0 及更高版本的核心设备使用
greengrass:ListThingGroupsForCoreDevice
权限卸载组件。 -
运行 Greengrass Nucleus v2.3.0 及更高版本的核心设备使用
greengrass:GetDeploymentConfiguration
权限来支持大型部署配置文档。
以下示例策略包含为支持核心设备的基本 Greengrass 功能所需的一组最少操作。
-
Connect
策略在核心设备事物名称后面包含*
通配符(例如,
)。核心设备使用相同的设备证书对 AWS IoT Core 进行多个并发订阅,但连接中的客户端 ID 可能与核心设备事物名称不完全匹配。在前 50 个订阅之后,核心设备使用core-device-thing-name
*
作为客户端 ID,每增加 50 个订阅,core-device-thing-name
#number
将递增。例如,当名为number
MyCoreDevice
的核心设备创建 150 个并发订阅时,它将使用以下客户端 ID:-
1 到 50 个订阅:
MyCoreDevice
-
51 到 100 个订阅:
MyCoreDevice#2
-
101 到 150 个订阅:
MyCoreDevice#3
通配符允许核心设备在使用这些带有后缀的客户端 ID 时进行连接。
-
-
该策略列出了核心设备可将消息发布到、订阅和从中接收消息的 MQTT 主题和主题筛选条件(包括用于影子状态的主题)。要支持 AWS IoT Core、Greengrass 组件和客户端设备之间的信息交换,请指定要允许的主题和主题筛选条件。有关更多信息,请参阅《AWS IoT Core 开发人员指南》中的发布/订阅策略示例。
-
该策略允许向以下主题发布遥测数据。
$aws/things/
core-device-thing-name
/greengrass/health/json对于禁用遥测功能的核心设备,可移除此权限。有关更多信息,请参阅 从 AWS IoT Greengrass 核心设备收集系统运行状况遥测数据。
-
该策略授予通过 AWS IoT 角色别名代入 IAM 角色的权限。核心设备使用此角色(称为令牌交换角色)来获取可用于对 AWS 请求进行身份验证的 AWS 凭证。有关更多信息,请参阅 授权核心设备与 AWS 服务交互。
安装 AWS IoT Greengrass Core 软件时,您可以创建并附加仅包含此权限的第二个 AWS IoT 策略。如果您在核心设备的主 AWS IoT 策略中包含此权限,则可以分离和删除其他 AWS 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": "*" } ] }
支持客户端设备的最低 AWS IoT 政策
以下示例策略包括支持在核心设备上与客户端设备交互所需的最低操作集。要支持客户端设备,除了基本操作的最低 AWS IoT 策略外,核心设备还必须具有 AWS 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
" ] } ] }
客户端设备的最低 AWS IoT 策略
以下示例策略包括客户端设备发现其通过 MQTT 进行连接和通信的核心设备所需的最低操作集。客户端设备的 AWS IoT 策略必须包括 greengrass:Discover
操作,允许设备发现其关联的 Greengrass 核心设备的连接信息。在 Resource
部分,指定客户端设备的 Amazon 资源名称(ARN),而不是 Greengrass 核心设备的 ARN。
-
该策略允许就所有 MQTT 主题进行通信。要遵循最佳安全实践,请将
iot:Publish
、iot:Subscribe
和iot:Receive
权限限制为客户端设备在用例中所需的最小主题集。 -
该策略允许事物发现所有 AWS IoT 事物的核心设备。要遵循最佳安全实践,请将
greengrass:Discover
权限限制为客户端设备的 AWS IoT 事物或与一组 AWS IoT 事物匹配的通配符。重要
核心设备或 Greengrass 数据面板操作的 AWS IoT 策略不支持事物策略变量 (
iot:Connection.Thing.
)。相反,您可以使用通配符来匹配多个名称相似的设备。例如,您可以指定*
MyGreengrassDevice*
以匹配MyGreengrassDevice1
、MyGreengrassDevice2
等。 -
客户端设备的 AWS IoT 策略通常不需要
iot:GetThingShadow
、iot:UpdateThingShadow
或iot:DeleteThingShadow
操作的权限,因为 Greengrass 核心设备会处理客户端设备的影子同步操作。要使核心设备能够处理客户端设备影子,请检查核心设备的 AWS 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/*" ] } ] }