授权核心设备与 AWS 服务交互 - AWS IoT Greengrass
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

授权核心设备与 AWS 服务交互

AWS IoT Greengrass 核心设备使用 AWS IoT Core 证书提供商授权对 AWS 服务的调用。AWS IoT Core Core 凭证提供程序允许设备使用其 X.509 证书作为唯一设备身份来对 AWS 请求进行身份验证。这样就不再需要将 AWS 访问密钥 ID 和秘密访问密钥存储在您的 AWS IoT Greengrass 核心设备上。有关更多信息,请参阅 。授予直接调用 AWS 服务的权限中的AWS IoT Core 开发人员指南

当您运行 AWS IoT Greengrass Core 软件时,您可以选择配置核心设备所需的 AWS 资源。这包括您的核心设备通过 AWS IoT Core Core Core Core 凭证提供程序担任的 AWS Identity of Access Management (IAM) 角色。使用--provision true参数配置允许核心设备获取临时 AWS 证书的角色和策略。此参数还配置指向此 IAM 角色的 AWS IoT 角色别名。您可以指定要使用的 IAM 角色和 AWS IoT 角色别名。如果您指定--provision true没有这些其他名称参数,Greengrass 核心设备将创建并使用以下默认资源:

  • IAM 角色:GreengrassV2TokenExchangeRole

    此角色的策略名为GreengrassV2TokenExchangeRoleAccess以及允许的信任关系credentials.iot.amazonaws.com代入此角色。该策略包括核心设备的最低权限。

    重要

    此策略不包括访问 S3 存储桶中的文件。您必须向角色添加权限,以允许核心设备从 S3 存储桶检索组件对象。有关更多信息,请参阅 允许访问组件工件的 S3 存储桶

  • AWS IoT 角色别名:GreengrassV2TokenExchangeRoleAlias

    此角色别名指 IAM 角色。

有关更多信息,请参阅 安装 AWS IoT Greengrass 核心软件

您还可以为现有核心设备设置角色别名。为此,请配置iotRoleAlias配置参数Greengrass Core 组件

您可以为此 IAM 角色获取临时 AWS 证书,以便在自定义组件中执行 AWS 操作。有关更多信息,请参阅 与 AWS 服务交互

核心设备的服务角色权限

该角色允许以下服务代入角色:

  • credentials.iot.amazonaws.com

如果您使用 AWS IoT Greengrass Core 软件创建此角色,它将使用以下权限策略允许核心设备连接日志并向 AWS 发送日志。策略的名称默认为 IAM 角色的名称,结尾为Access。例如,如果您使用默认 IAM 角色名称,则此策略的名称为GreengrassV2TokenExchangeRoleAccess

{ "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 存储桶

默认核心设备角色不允许核心设备访问 S3 存储桶。要部署 S3 存储桶中包含工件的组件,您必须将s3:GetObject权限,以允许核心设备下载组件工件。您可以向核心设备角色添加新策略以授予此权限。

添加允许访问 Amazon S3 中的组件工件的策略

  1. 创建名为的文件component-artifact-policy.json并将以下 JSON 复制到该文件中。此策略允许访问 S3 存储桶中的所有文件。Replace DOC-EXAMPLE-BUCKET 替换为 S3 存储桶的名称以允许核心设备访问。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }
  2. 运行以下命令以从中的策略文档创建策略。component-artifact-policy.json

    aws iam create-policy \ --policy-name MyGreengrassV2ComponentArtifactPolicy \ --policy-document file://component-artifact-policy.json

    从输出中的策略元数据复制策略 Amazon 资源名称 (ARN)。您可以在下一个步骤中使用此策略将此策略附加到核心设备角色。

  3. 运行以下命令以将策略附加到核心设备角色。Replace GreengrassV2TokenExchangeRole 替换为您在运行 AWS IoT Greengrass 莓核心软件时指定的角色名称。然后,将策略 ARN 替换为上一步中的 ARN。

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

    如果命令没有输出,则成功,并且您的核心设备可以访问您上传到此 S3 存储桶的对象。