设置Amazon IoT适用于 Greengrass 核心设备的车队配置 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

设置Amazon IoT适用于 Greengrass 核心设备的车队配置

目的安装Amazon IoT Greengrass带有车队配置的核心软件,您必须首先在Amazon Web Services 账户. 这些资源使设备能够将自己注册到Amazon IoT并作为 Greengrass 的核心设备运行。请按照本节中的步骤操作一次,以在Amazon Web Services 账户.

  • 令牌交换 IAM 角色,核心设备使用该角色授权对Amazon服务。

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT角色别名,指向令牌交换角色。

  • (可选)Amazon IoT策略,核心设备使用这些策略授权对Amazon IoT和Amazon IoT Greengrass服务。该Amazon IoT策略必须允许iot:AssumeRoleWithCertificate权限Amazon IoT角色别名,指向令牌交换角色。

    您可以使用单个Amazon IoT策略,也可以配置队列配置模板以创建Amazon IoT策略。

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT队列预配置模板。此模板必须指定以下内容:

    • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT事物资源。您可以指定事物组列表,以便在每个设备联机时将组件部署到其中。

    • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT策略资源。此资源可以定义下列属性之一:

      • 现有的名称Amazon IoT政策。如果选择此选项,则从此模板创建的核心设备将使用相同的Amazon IoT策略,您可以将其权限作为队列进行管理。

      • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT策略文档。如果选择此选项,则使用此模板创建的每个核心设备将使用唯一Amazon IoT策略,您可以管理每个核心设备的权限。

    • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT证书资源。此证书资源必须使用AWS::IoT::Certificate::Id参数以将证书附加到核心设备。有关更多信息,请参阅 。即时预置中的Amazon IoT开发人员指南.

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT为队列预配置模板预配置声明证书和私有密钥。您可以在制造过程中将此证书和私钥嵌入设备中,以便设备在联机时可以注册和配置自己。

    重要

    预配置申请私有密钥应始终得到保护,包括在 Greengrass 核心设备上时。我们建议您使用 Amazon CloudWatch 指标和日志来监控滥用迹象,例如未经授权使用申请证书预配置设备。如果您检测到滥用,请禁用预配置申请证书,以使其不能用于设备预配置。有关更多信息,请参阅 。监控Amazon IoT中的Amazon IoT Core开发人员指南.

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT策略,以允许设备注册和使用队列置备模板。

创建令牌交换角色

Greengrass 核心设备使用 IAM 服务角色,称为令牌交换角色,以授权调用Amazon服务。该设备使用Amazon IoT凭证提供程序来获取临时Amazon凭据,这允许设备与Amazon IoT,将日志发送到 Amazon CloudWatch Logs,并从 Amazon S3 下载自定义组件工件。有关更多信息,请参阅授权核心设备与Amazon服务

您使用Amazon IoT 角色别名配置 Greengrass 核心设备的令牌交换角色。角色别名使您能够更改设备的令牌交换角色,但使设备配置保持不变。有关更多信息,请参阅 。授予直接调用Amazon服务中的Amazon IoT Core开发人员指南.

在本部分中,您创建令牌交换 IAM 角色和Amazon IoT角色别名,指向角色。如果您已经设置了 Greengrass 核心设备,则可以使用其令牌交换角色和角色别名,而不是创建新的。

创建令牌交换 IAM 角色

  1. 创建一个 IAM 角色,您的设备可用作令牌交换角色。执行以下操作:

    1. 创建包含令牌交换角色所需的信任策略文档的文件。

      nano device-role-trust-policy.json

      将以下 JSON 复制到该文件中。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 使用信任策略文档创建令牌交换角色。

      • Replace绿草 V2 代码交换器替换为要创建的 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" } ] } }
    3. 创建一个文件,其中包含令牌交换角色所需的访问策略文档。

      nano device-role-access-policy.json

      将以下 JSON 复制到该文件中。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeCertificate", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams", "iot:Connect", "iot:Publish", "iot:Subscribe", "iot:Receive", "s3:GetBucketLocation" ], "Resource": "*" } ] }
      注意

      此访问策略不允许访问 S3 存储桶中的组件对象。要部署用于在 Amazon S3 中定义对象的自定义组件,您必须向角色添加权限,以允许核心设备检索组件工件。有关更多信息,请参阅允许访问 S3 存储桶

      如果您还没有用于组件对象的 S3 存储桶,您可以稍后在创建存储桶后添加这些权限。

    4. 从策略文档创建 IAM 策略。

      • Replace绿色草原 V2 代币交换访问替换为要创建的 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" } }
    5. 将 IAM 策略附加到令牌交换角色。

      • Replace绿草 V2 代码交换器(使用 IAM 角色的名称)。

      • 将策略 ARN 替换为您在上一步中创建的 IAM 策略的 ARN。

      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess

      如果请求成功,命令没有任何输出。

  2. 创建Amazon IoT角色别名,指向令牌交换角色。

    • Replace绿色草芯代币交换别名替换为要创建的角色别名的名称。

    • 将角色 ARN 替换为您在上一步中创建的 IAM 角色的 ARN。

    aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole

    响应类似于以下示例,如果请求成功。

    { "roleAlias": "GreengrassCoreTokenExchangeRoleAlias", "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias" }
    注意

    要创建角色别名,您必须有权将令牌交换 IAM 角色传递给Amazon IoT. 如果您在尝试创建角色别名时收到错误消息,请检查您的Amazon用户具有此权限。有关更多信息,请参阅 。向用户授予权限以将角色传递给Amazon服务中的Amazon Identity and Access Management用户指南.

创建 Amazon IoT 策略

将设备注册为Amazon IoT事情,该设备可以使用数字证书来验证Amazon. 此证书包括一个或多个Amazon IoT策略,用于定义设备可以与证书一起使用的权限。这些策略允许设备与通信Amazon IoT和Amazon IoT Greengrass.

与Amazon IoT队列配置时,设备将连接到Amazon IoT创建和下载设备证书。在您在下一节中创建的队列预配置模板中,您可以指定Amazon IoT附加相同的Amazon IoT策略添加到所有设备的证书,或者为每台设备创建新策略。

在本部分中,您将创建一个Amazon IoT策略Amazon IoT附加到所有设备的证书。通过这种方法,您可以将所有设备的权限作为一个队列进行管理。如果您宁愿创建一个新的Amazon IoT策略,您可以跳过此部分,并在定义队列模板时参考其中的策略。

创建 Amazon IoT 策略

  • 创建Amazon IoT策略,该策略定义Amazon IoT权限,以获取您的 Greengrass 核心设备队列的权限。以下策略允许访问所有 MQTT 主题和 Greengrass 操作,因此您的设备适用于需要新 Greengrass 操作的自定义应用程序和未来更改。此策略还允许iot:AssumeRoleWithCertificate权限,该权限允许您的设备使用您在上一节中创建的令牌交换角色。您可以基于自己的使用案例来限制此策略。有关更多信息,请参阅最低Amazon IoT用于 的 策略Amazon IoT Greengrass V2核心设备

    执行以下操作:

    1. 创建包含Amazon IoT策略文档,这是 Greengrass 核心设备所需的。

      nano greengrass-v2-iot-policy.json

      将以下 JSON 复制到该文件中。

      • 替换iot:AssumeRoleWithCertificate资源的 ARNAmazon IoT角色别名,您在上一部分中创建。

      { "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" } ] }
    2. 创建Amazon IoT策略从策略文档。

      • Replace绿色草原 V2 政策替换为要创建的策略的名称。

      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" }

创建队列预配置模板

Amazon IoT队列配置模板定义了如何配置Amazon IoT事物、策略和证书。要使用队列置备插件配置 Greengrass 核心设备,您必须创建一个指定以下内容的模板:

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT事物资源。您可以指定事物组列表,以便在每个设备联机时将组件部署到其中。

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT策略资源。此资源可以定义下列属性之一:

    • 现有的名称Amazon IoT政策。如果选择此选项,则从此模板创建的核心设备将使用相同的Amazon IoT策略,您可以将其权限作为队列进行管理。

    • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT策略文档。如果选择此选项,则使用此模板创建的每个核心设备将使用唯一Amazon IoT策略,您可以管理每个核心设备的权限。

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT证书资源。此证书资源必须使用AWS::IoT::Certificate::Id参数以将证书附加到核心设备。有关更多信息,请参阅 。即时预置中的Amazon IoT开发人员指南.

在模板中,您可以指定将Amazon IoT事物添加到事物组列表中。当核心设备连接至Amazon IoT Greengrass,它首次接收它是成员的每个事物组的 Greengrass 部署。您可以使用事物组将最新的软件部署到每台设备上线。有关更多信息,请参阅部署Amazon IoT Greengrass组件到设备

这些区域有:Amazon IoT服务需要权限才能创建和更新Amazon IoT资源Amazon Web Services 账户配置设备时。为了给Amazon IoT服务访问权限,您可以创建 IAM 角色并在创建模板时提供该角色。Amazon IoT提供了一个托管策略,AWSIoTThingsRegistration,它允许访问Amazon IoT可能会在置备设备时使用。您可以使用此托管策略,也可以创建自定义策略,以缩小托管策略中针对您的使用案例的权限范围。

在本部分中,您创建一个 IAM 角色,允许Amazon IoT为设备配置资源,然后创建使用该 IAM 角色的队列配置模板。

创建队列预配置模板

  1. 创建 IAM 角色Amazon IoT可以假设在Amazon Web Services 账户. 执行以下操作:

    1. 创建一个文件,其中包含允许Amazon IoT以担任此角色。

      nano aws-iot-trust-policy.json

      将以下 JSON 复制到该文件中。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 使用信任策略文档创建 IAM 角色。

      • Replace绿色草原配置角色替换为要创建的 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" } ] } } }
    3. 查看AWSIoTThingsRegistration策略,该策略允许访问Amazon IoT可能会在置备设备时使用。您可以使用此托管策略,也可以创建自定义策略,为您的使用案例定义范围缩小权限。如果您选择创建自定义策略,请立即创建。

    4. 将 IAM 策略附加到队列配置角色。

      • Replace绿色草原配置角色(使用 IAM 角色的名称)。

      • 如果您在上一步中创建了自定义策略,请将策略 ARN 替换为要使用的 IAM 策略的 ARN。

      aws iam attach-role-policy --role-name GreengrassFleetProvisioningRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSIoTThingsRegistration

      如果请求成功,命令没有任何输出。

  2. (可选)创建预先预置挂钩,这是Amazon Lambda函数,用于验证设备在注册过程中提供的模板参数。您可以使用预置备挂钩来更好地控制Amazon Web Services 账户. 有关更多信息,请参阅 。预先预配置挂钩中的Amazon IoT Core开发人员指南.

  3. 创建队列预配置模板。执行以下操作:

    1. 创建一个文件以包含置备模板文档。

      nano greengrass-fleet-provisioning-template.json

      编写置备模板文档。您可以从以下示例置备模板开始,该模板指定创建Amazon IoT事物,具有以下属性:

      • 事物的名称是您在ThingName模板参数。

      • 事物是事物组的成员,您在ThingGroupName模板参数。

      • 事物的证书具有Amazon IoT策略名为GreengrassV2IoTThingPolicy附加到此角色。

      有关更多信息,请参阅 。预置模板中的Amazon 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" } } }
    2. 从预配置模板文档创建队列预配置模板。

      • Replace绿色草坪置备模板替换为要创建的模板的名称。

      • 将模板描述替换为模板的描述。

      • 将预配置角色 ARN 替换为您之前创建的角色的 ARN。

      aws iot create-provisioning-template \ --template-name GreengrassFleetProvisioningTemplate \ --description "A provisioning template for Greengrass core devices." \ --provisioning-role-arn "arn:aws:iam::123456789012:role/GreengrassFleetProvisioningRole" \ --template-body file://greengrass-fleet-provisioning-template.json --enabled
      注意

      如果您创建了预置备挂接,请使用--pre-provisioning-hook参数。

      --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 证书,允许设备注册为Amazon IoT,并检索一个唯一的 X.509 设备证书以用于常规操作。创建理赔证书后,您可以附加Amazon IoT策略,允许设备使用该策略创建唯一的设备证书并使用队列配置模板进行置备。具有声明证书的设备只能使用Amazon IoT政策。

在本节中,您将创建申请证书,然后将其配置为设备,以使其与您在上一节中创建的队列预配置模板一起使用。

重要

预配置申请私有密钥应始终得到保护,包括在 Greengrass 核心设备上时。我们建议您使用 Amazon CloudWatch 指标和日志来监控滥用迹象,例如未经授权使用申请证书预配置设备。如果您检测到滥用,请禁用预配置申请证书,以使其不能用于设备预配置。有关更多信息,请参阅 。监控Amazon IoT中的Amazon IoT Core开发人员指南.

创建预置要求证书和私有密钥

  1. 创建并保存要用于预配置的证书和私有密钥。Amazon IoT提供由 Amazon Root 证书颁发机构 (CA) 签发的客户端证书。

    aws iot create-keys-and-certificate \ --certificate-pem-outfile "claim.pem.crt" \ --public-key-outfile "claim.public.pem.key" \ --private-key-outfile "claim.private.pem.key" \ --set-as-active

    响应将包含有关证书的信息(如果请求成功)。保存证书的 ARN 以便稍后使用。

  2. 创建并连接到Amazon IoT策略,该策略允许设备使用证书创建唯一的设备证书并使用队列置备模板进行置备。以下策略允许访问设备预配置 MQTT API。有关更多信息,请参阅 。设备预配置 MQTT API中的Amazon IoT Core开发人员指南.

    执行以下操作:

    1. 创建包含Amazon IoT策略文档,这是 Greengrass 核心设备所需的。

      nano greengrass-provisioning-claim-iot-policy.json

      将以下 JSON 复制到该文件中。

      • 替换区域与Amazon Web Services 区域,您可以在其中设置队列置备。

      • 替换account-id使用您的Amazon Web Services 账户ID。

      • 替换绿色草坪置备模板替换为您在上一节中创建的队列预配置模板的名称。

      { "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/*" ] } ] }
    2. 创建Amazon IoT策略从策略文档。

      • Replace绿色草原配置声明政策替换为要创建的策略的名称。

      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" }
  3. 将附加到Amazon IoT策略添加到预配置声明证书中。

    • Replace绿色草原配置声明政策替换为要附加的策略的名称。

    • 将目标 ARN 替换为预配置声明证书的 ARN。

    aws iot attach-policy --policy-name GreengrassProvisioningClaimPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4

    如果请求成功,命令没有任何输出。

您现在拥有一个置备声明证书和私有密钥,设备可以使用这些证书和私钥注册到Amazon IoT并将自己配置为 Greengrass 的核心设备。您可以在制造过程中将声明证书和私钥嵌入设备中,或者在安装Amazon IoT GreengrassCore 软件。有关更多信息,请参阅安装Amazon IoT GreengrassCore 软件Amazon IoT队列预置