本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 Greengrass 核心 AWS IoT 设备设置队列配置
要安装具有队列配置功能的 AWS IoT Greengrass Core 软件,必须先在中设置以下资源 AWS 账户。这些资源使设备能够在 Greengrass 核心设备上注册 AWS IoT 并作为 Greengrass 核心设备运行。只需按照本节中的步骤操作一次,即可在 AWS 账户中创建和配置这些资源。
-
令牌交换 IAM 角色,即核心设备授权调用 AWS 服务时使用的角色。
-
指向代币交换 AWS IoT 角色的角色别名。
-
(可选)一项 AWS IoT 策略,核心设备使用该策略来授权对 AWS IoT 和 AWS IoT Greengrass 服务的调用。此 AWS IoT 策略必须
iot:AssumeRoleWithCertificate
允许指向令牌交换 AWS IoT 角色的角色别名的权限。您可以对队列中的所有核心设备使用单一 AWS IoT 策略,也可以配置队列配置模板为每台核心设备创建 AWS IoT 策略。
-
AWS IoT 舰队配置模板。此模板必须指定以下各项:
-
AWS IoT 事物资源。您可以指定一系列现有事物组,在每台设备联机时为设备部署组件。
-
一种 AWS IoT 策略资源。此资源可以定义下列属性之一:
-
现有 AWS IoT 策略的名称。如果选择此选项,则根据此模板创建的核心设备将使用相同的 AWS IoT 策略,并且您可以像队列一样管理它们的权限。
-
一份 AWS IoT 政策文件。如果选择此选项,则根据此模板创建的每台核心设备都使用唯一的 AWS IoT 策略,并且您可以管理每台核心设备的权限。
-
-
AWS IoT 证书资源。此证书资源必须使用
AWS::IoT::Certificate::Id
参数将证书附加到核心设备。有关更多信息,请参阅《AWS IoT 开发人员指南》中的Just-in-time 配置。
-
-
队列 AWS IoT 配置模板的配置声明证书和私钥。您可以在制造过程中将此证书和私钥嵌入设备中,这样设备就可以在联机时自行注册和预置。
重要
预置声明私钥应始终得到保护,包括在 Greengrass 核心设备上时。我们建议您使用 Amazon CloudWatch 指标和日志来监控是否存在滥用迹象,例如未经授权使用索赔证书来配置设备。如果您检测到滥用,请禁用预置声明证书,以使其不能用于设备预置。有关更多信息,请参阅 AWS IoT Core 开发人员指南 中的 监控 AWS IoT。
为了帮助您更好地管理自己在您的设备中注册的设备数量和设备 AWS 账户,您可以在创建队列配置模板时指定预配置挂钩。预配置挂钩是一种验证设备在注册期间提供的模板参数的 AWS Lambda 功能。例如,您可以创建一个预置前钩子,根据数据库检查设备 ID,以验证设备是否有权进行预置。有关更多信息,请参阅《AWS IoT Core 开发人员指南》中的预置前钩子。
-
您附加到配置声明证书的 AWS IoT 策略,允许设备注册和使用队列配置模板。
创建令牌交换角色
Greengrass 核心设备使用 IAM 服务角色(称为令牌交换角色)来授权对服务的调用。 AWS 设备使用 AWS IoT 证书提供程序来获取此角色的临时 AWS 证书,从而允许设备与 Amazon Logs 进行交互 AWS IoT、向 Amazon Logs 发送 CloudWatch 日志以及从 Amazon S3 下载自定义组件项目。有关更多信息,请参阅 授权核心设备与 AWS 服务交互。
您可以使用 AWS IoT 角色别名为 Greengrass 核心设备配置令牌交换角色。角色别名允许您更改设备的令牌交换角色,但设备配置保持不变。有关更多信息,请参阅《AWS IoT Core 开发人员指南》中的授权直接调用 AWS 服务。
在本节中,您将创建一个令牌交换 IAM 角色和一个指向该 AWS IoT 角色的角色别名。如果您已经设置了 Greengrass 核心设备,则可以使用其令牌交换角色和角色别名,而不必新建。
创建令牌交换 IAM 角色
-
创建设备可将其用作令牌交换角色的 IAM 角色。执行以下操作:
-
创建包含令牌交换角色所需的信任策略文档的文件。
例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建该文件。
nano device-role-trust-policy.json
将以下 JSON 复制到该文件中。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
通过信任策略文档创建令牌交换角色。
-
GreengrassV2TokenExchangeRole
替换为要创建的 IAM 角色的名称。
aws iam create-role --role-name
GreengrassV2TokenExchangeRole
--assume-role-policy-document file://device-role-trust-policy.json如果请求成功,响应类似如下示例。
{ "Role": { "Path": "/", "RoleName": "GreengrassV2TokenExchangeRole", "RoleId": "AROAZ2YMUHYHK5OKM77FB", "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole", "CreateDate": "2021-02-06T00:13:29+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } }
-
-
创建一个包含令牌交换角色所需的访问策略文档的文件。
例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建该文件。
nano device-role-access-policy.json
将以下 JSON 复制到该文件中。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams", "s3:GetBucketLocation" ], "Resource": "*" } ] }
注意
此访问策略不允许访问 S3 存储桶中的组件构件。要在 Amazon S3 中部署可定义构件的自定义组件,您必须为该角色添加权限以允许核心设备检索组件构件。有关更多信息,请参阅 允许访问 S3 存储桶中的组件构件。
如果您还没有适用于组件构件的 S3 存储桶,则可以在创建存储桶后添加这些权限。
-
通过策略文档创建 IAM 策略
-
GreengrassV2TokenExchangeRoleAccess
替换为要创建的 IAM 策略的名称。
aws iam create-policy --policy-name
GreengrassV2TokenExchangeRoleAccess
--policy-document file://device-role-access-policy.json如果请求成功,响应类似如下示例。
{ "Policy": { "PolicyName": "GreengrassV2TokenExchangeRoleAccess", "PolicyId": "ANPAZ2YMUHYHACI7C5Z66", "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess", "Path": "/", "DefaultVersionId": "v1", "AttachmentCount": 0, "PermissionsBoundaryUsageCount": 0, "IsAttachable": true, "CreateDate": "2021-02-06T00:37:17+00:00", "UpdateDate": "2021-02-06T00:37:17+00:00" } }
-
-
将 IAM 策略附加到令牌交换角色。
-
将
GreengrassV2TokenExchangeRole
替换为 IAM 角色的名称。 -
将策略 ARN 替换为您在上一步中创建的 IAM 策略的 ARN。
aws iam attach-role-policy --role-name
GreengrassV2TokenExchangeRole
--policy-arnarn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
如果请求成功,则该命令没有任何输出。
-
-
-
创建 AWS IoT 指向代币交换角色的角色别名。
-
GreengrassCoreTokenExchangeRoleAlias
替换为要创建的角色别名的名称。 -
将角色 ARN 替换为您在上一步中创建的 IAM 角色的 ARN。
aws iot create-role-alias --role-alias
GreengrassCoreTokenExchangeRoleAlias
--role-arnarn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
如果请求成功,响应类似如下示例。
{ "roleAlias": "GreengrassCoreTokenExchangeRoleAlias", "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias" }
注意
要创建角色别名,您必须有权将令牌交换 IAM 角色传递到 AWS IoT。如果您在尝试创建角色别名时收到错误消息,请检查您的 AWS 用户是否具有此权限。有关更多信息,请参阅《用户指南》中的授予AWS Identity and Access Management 用户向 AWS 服务传递角色的权限。
-
创建 AWS IoT 策略
将设备注册为 AWS IoT 事物后,该设备可以使用数字证书进行身份验证 AWS。该证书包含一个或多个 AWS IoT 策略,这些策略定义了设备可以与证书一起使用的权限。这些策略允许设备与 AWS IoT 和通信 AWS IoT Greengrass。
通过 AWS IoT 队列配置,设备可以 AWS IoT 连接到以创建和下载设备证书。在下一节中创建的队列配置模板中,您可以指定是将相同的 AWS IoT 策略 AWS IoT 附加到所有设备的证书,还是为每台设备创建新策略。
在本节中,您将创建一个 AWS IoT 附加到所有设备证书的 AWS IoT 策略。通过这种方法,您可以以实例集的形式管理所有设备的权限。如果您想为每台设备创建新 AWS IoT 策略,则可以跳过本节,在定义队列模板时参考其中的策略。
创建 AWS IoT 策略
-
创建 AWS IoT 策略来定义您的 Greengrass 核心设备队列的 AWS IoT 权限。以下策略允许访问所有 MQTT 主题和 Greengrass 操作,因此您的设备可以处理需要新 Greengrass 操作的自定义应用程序和未来更改。此策略还允许
iot:AssumeRoleWithCertificate
权限,允许您的设备使用您在上一节中创建的令牌交换角色。您可以根据自己的使用案例来限制此策略。有关更多信息,请参阅 AWS IoT Greengrass V2 核心设备的最低 AWS IoT 政策。执行以下操作:
-
创建一个包含 Greengrass 核心设备所需的 AWS IoT 策略文档的文件。
例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建该文件。
nano greengrass-v2-iot-policy.json
将以下 JSON 复制到该文件中。
-
将
iot:AssumeRoleWithCertificate
资源替换为您在上一节中创建的 AWS IoT 角色别名的 ARN。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:Connect", "greengrass:*" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "iot:AssumeRoleWithCertificate", "Resource": "
arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias
" } ] } -
-
根据 AWS IoT 策略文档创建策略。
-
GreengrassV2IoTThingPolicy
替换为要创建的策略的名称。
aws iot create-policy --policy-name
GreengrassV2IoTThingPolicy
--policy-document file://greengrass-v2-iot-policy.json如果请求成功,响应类似如下示例。
{ "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": [ \"iot:Publish\", \"iot:Subscribe\", \"iot:Receive\", \"iot:Connect\", \"greengrass:*\" ], \"Resource\": [ \"*\" ] }, { \"Effect\": \"Allow\", \"Action\": \"iot:AssumeRoleWithCertificate\", \"Resource\": \"
arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias
\" } ] }", "policyVersionId": "1" } -
-
创建实例集预置模板
AWS IoT 舰队配置模板定义了如何配置 AWS IoT 内容、策略和证书。要使用实例集预置插件预置 Greengrass 核心设备,您必须创建一个模板,指定以下各项:
-
AWS IoT 事物资源。您可以指定一系列现有事物组,在每台设备联机时为设备部署组件。
-
一种 AWS IoT 策略资源。此资源可以定义下列属性之一:
-
现有 AWS IoT 策略的名称。如果选择此选项,则根据此模板创建的核心设备将使用相同的 AWS IoT 策略,并且您可以像队列一样管理它们的权限。
-
一份 AWS IoT 政策文件。如果选择此选项,则根据此模板创建的每台核心设备都使用唯一的 AWS IoT 策略,并且您可以管理每台核心设备的权限。
-
-
AWS IoT 证书资源。此证书资源必须使用
AWS::IoT::Certificate::Id
参数将证书附加到核心设备。有关更多信息,请参阅《AWS IoT 开发人员指南》中的Just-in-time 配置。
在模板中,您可以指定将 AWS IoT 事物添加到现有事物组列表中。当核心设备首次连接到 AWS IoT Greengrass 时,它会收到其所属的每个事物组的 Greengrass 部署。您可以使用事物组,在每台设备联机后立即为设备部署最新的软件。有关更多信息,请参阅 将 AWS IoT Greengrass 组件部署到设备。
在配置设备 AWS 账户 时,该 AWS IoT 服务需要权限才能在您中创建和更新 AWS IoT 资源。要授予 AWS IoT 服务访问权限,您需要创建一个 IAM 角色并在创建模板时提供该角色。 AWS IoT 提供了一个名为 “AWSIoTThings注册
在本节中,您将创建一个允许 AWS IoT 为设备配置资源的 IAM 角色,并创建使用该 IAM 角色的队列配置模板。
创建实例集预置模板
-
创建一个 IAM 角色,该角色 AWS IoT 可以代入在您的中配置资源 AWS 账户。执行以下操作:
-
创建一个包含允许 AWS IoT 担任该角色的信任策略文档的文件。
例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建该文件。
nano aws-iot-trust-policy.json
将以下 JSON 复制到该文件中。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
使用信任策略文档创建 IAM 角色。
-
GreengrassFleetProvisioningRole
替换为要创建的 IAM 角色的名称。
aws iam create-role --role-name
GreengrassFleetProvisioningRole
--assume-role-policy-document file://aws-iot-trust-policy.json如果请求成功,响应类似如下示例。
{ "Role": { "Path": "/", "RoleName": "GreengrassFleetProvisioningRole", "RoleId": "AROAZ2YMUHYHK5OKM77FB", "Arn": "arn:aws:iam::123456789012:role/GreengrassFleetProvisioningRole", "CreateDate": "2021-07-26T00:15:12+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }
-
-
查看AWSIoTThings注册
策略,该策略允许访问配置设备时 AWS IoT 可能使用的所有权限。您可以使用此托管策略,也可以创建自定义策略,为您的使用案例定义缩小范围的权限。如果您选择创建自定义策略,请立即创建。 -
将 IAM 策略附加到实例集预置角色。
-
将
GreengrassFleetProvisioningRole
替换为 IAM 角色的名称。 -
如果您在上一步中创建了自定义策略,请将策略 ARN 替换为要使用的 IAM 策略的 ARN。
aws iam attach-role-policy --role-name
GreengrassFleetProvisioningRole
--policy-arnarn:aws:iam::aws:policy/service-role/AWSIoTThingsRegistration
如果请求成功,则该命令没有任何输出。
-
-
-
(可选)创建一个预置前钩子,该钩子是 AWS Lambda 函数,用于验证设备在注册期间提供的模板参数。您可以使用预置前钩子来更好地控制您的 AWS 账户中注册的设备和设备数量。有关更多信息,请参阅《AWS IoT Core 开发人员指南》中的预置前钩子。
-
创建实例集预置模板。执行以下操作:
-
创建一个文件以包含预置模版文档。
例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建该文件。
nano greengrass-fleet-provisioning-template.json
编写一个预置模板文档。您可以从以下示例配置模板开始,该模板指定创建具有以下属性的 AWS IoT 事物:
-
事物的名称是您在
ThingName
模板参数中指定的值。 -
事物是您在
ThingGroupName
模板参数中指定的事物组的成员。事物组必须存在于您的中 AWS 账户。 -
事物的证书上
GreengrassV2IoTThingPolicy
附有名为的 AWS IoT 策略。
有关更多信息,请参阅《AWS IoT Core 开发人员指南》中的预置模板。
{ "Parameters": { "ThingName": { "Type": "String" }, "ThingGroupName": { "Type": "String" }, "AWS::IoT::Certificate::Id": { "Type": "String" } }, "Resources": { "
MyThing
": { "OverrideSettings": { "AttributePayload": "REPLACE", "ThingGroups": "REPLACE", "ThingTypeName": "REPLACE" }, "Properties": { "AttributePayload": {}, "ThingGroups": [ { "Ref": "ThingGroupName" } ], "ThingName": { "Ref": "ThingName" } }, "Type": "AWS::IoT::Thing" }, "MyPolicy
": { "Properties": { "PolicyName": "GreengrassV2IoTThingPolicy
" }, "Type": "AWS::IoT::Policy" }, "MyCertificate
": { "Properties": { "CertificateId": { "Ref": "AWS::IoT::Certificate::Id" }, "Status": "Active" }, "Type": "AWS::IoT::Certificate" } } }注意
MyThing
MyPolicy
、和MyCertificate
是任意名称,用于标识队列置备模板中的每个资源规范。 AWS IoT 不会在根据模板创建的资源中使用这些名称。您可以使用这些名称,也可以将其替换为有助于识别模板中每项资源的值。 -
-
通过预置模板文档创建实例集预置模板。
-
将
GreengrassFleetProvisioningTemplate
替换为要创建的模板的名称。 -
将模板描述替换为您的模板描述。
-
将预置角色 ARN 替换为您之前创建的角色的 ARN。
注意
如果您创建了预置前钩子,请使用
--pre-provisioning-hook
参数指定预置前钩子的 Lambda 函数的 ARN。--pre-provisioning-hook targetArn=
arn:aws:lambda:us-west-2:123456789012:function:GreengrassPreProvisioningHook
如果请求成功,响应类似如下示例。
{ "templateArn": "arn:aws:iot:us-west-2:123456789012:provisioningtemplate/GreengrassFleetProvisioningTemplate", "templateName": "GreengrassFleetProvisioningTemplate", "defaultVersionId": 1 }
-
-
创建预置声明证书和私钥
声明证书是 X.509 证书,允许设备注册为 AWS IoT 事物并检索用于常规操作的唯一 X.509 设备证书。创建索赔证书后,您可以附加一个 AWS IoT 策略,允许设备使用该策略来创建唯一的设备证书并使用队列配置模板进行配置。具有声明证书的设备只能使用您在 AWS IoT 策略中允许的预置模板进行预置。
在本节中,您将创建声明证书并为设备配置该证书,以便与您在上一节中创建的实例集预置模版一起使用。
重要
预置声明私钥应始终得到保护,包括在 Greengrass 核心设备上时。我们建议您使用 Amazon CloudWatch 指标和日志来监控是否存在滥用迹象,例如未经授权使用索赔证书来配置设备。如果您检测到滥用,请禁用预置声明证书,以使其不能用于设备预置。有关更多信息,请参阅 AWS IoT Core 开发人员指南 中的 监控 AWS IoT。
为了帮助您更好地管理自己在您的设备中注册的设备数量和设备 AWS 账户,您可以在创建队列配置模板时指定预配置挂钩。预配置挂钩是一种验证设备在注册期间提供的模板参数的 AWS Lambda 功能。例如,您可以创建一个预置前钩子,根据数据库检查设备 ID,以验证设备是否有权进行预置。有关更多信息,请参阅《AWS IoT Core 开发人员指南》中的预置前钩子。
创建预置声明证书和私钥
-
创建一个文件夹,用于下载声明证书和私钥。
mkdir claim-certs
-
创建并保存用于置备的证书和私钥。 AWS IoT 提供由 Amazon 根证书颁发机构 (CA) 签署的客户证书。
如果请求成功,则响应将包含有关证书的信息。保存证书的 ARN 以供将来使用。
-
创建并附加一项 AWS IoT 策略,允许设备使用该证书创建唯一的设备证书,并使用队列配置模板进行配置。以下策略允许访问设备预置 MQTT API。有关更多信息,请参阅《AWS IoT Core 开发人员指南》中的设备预置 MQTT API。
执行以下操作:
-
创建一个包含 Greengrass 核心设备所需的 AWS IoT 策略文档的文件。
例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建该文件。
nano greengrass-provisioning-claim-iot-policy.json
将以下 JSON 复制到该文件中。
-
将的
region
每个实例替换为您设置队列配置 AWS 区域 的位置。 -
将的
account-id
每个实例替换为您的 AWS 账户 ID。 -
将的
GreengrassFleetProvisioningTemplate
每个实例替换为您在上一节中创建的队列置备模板的名称。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Receive" ], "Resource": [ "arn:aws:iot:
region
:account-id
:topic/$aws/certificates/create/*", "arn:aws:iot:region
:account-id
:topic/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate
/provision/*" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:region
:account-id
:topicfilter/$aws/certificates/create/*", "arn:aws:iot:region
:account-id
:topicfilter/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate
/provision/*" ] } ] } -
-
根据 AWS IoT 策略文档创建策略。
-
GreengrassProvisioningClaimPolicy
替换为要创建的策略的名称。
aws iot create-policy --policy-name
GreengrassProvisioningClaimPolicy
--policy-document file://greengrass-provisioning-claim-iot-policy.json如果请求成功,响应类似如下示例。
{ "policyName": "GreengrassProvisioningClaimPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassProvisioningClaimPolicy", "policyDocument": "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": \"iot:Connect\", \"Resource\": \"*\" }, { \"Effect\": \"Allow\", \"Action\": [ \"iot:Publish\", \"iot:Receive\" ], \"Resource\": [ \"arn:aws:iot:
region
:account-id
:topic/$aws/certificates/create/*\", \"arn:aws:iot:region
:account-id
:topic/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate
/provision/*\" ] }, { \"Effect\": \"Allow\", \"Action\": \"iot:Subscribe\", \"Resource\": [ \"arn:aws:iot:region
:account-id
:topicfilter/$aws/certificates/create/*\", \"arn:aws:iot:region
:account-id
:topicfilter/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate
/provision/*\" ] } ] }", "policyVersionId": "1" } -
-
-
将 AWS IoT 策略附加到置备声明证书。
-
GreengrassProvisioningClaimPolicy
替换为要附加的策略的名称。 -
将目标 ARN 替换为预置声明证书的 ARN。
aws iot attach-policy --policy-name
GreengrassProvisioningClaimPolicy
--targetarn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
如果请求成功,则该命令没有任何输出。
-
现在,您有了配置声明证书和私钥,设备可以使用这些证书和私钥注册 AWS IoT 并配置自己为 Greengrass 核心设备。您可以在制造过程中将索赔证书和私钥嵌入设备中,或者在安装 C AWS IoT Greengrass ore 软件之前将证书和密钥复制到设备。有关更多信息,请参阅 安装具有 AWS IoT 队列配置功能的 C AWS IoT Greengrass ore 软件。