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

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

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

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

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

  • IAM 角色:GreengrassV2TokenExchangeRole

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

    重要

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

  • Amazon IoT 角色别名:GreengrassV2TokenExchangeRoleAlias

    此角色别名指的是 IAM 角色。

有关更多信息,请参阅 步骤 3 安装Amazon IoT Greengrass核心软件

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

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

核心设备的服务角色权限

该角色允许以下服务担任该角色:

  • credentials.iot.amazonaws.com

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

Greengrass nucleus v2.5.0 and later
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams", "s3:GetBucketLocation" ], "Resource": "*" } ] }
v2.4.x
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeCertificate", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams", "s3:GetBucketLocation" ], "Resource": "*" } ] }
Earlier than v2.4.0
{ "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 存储桶中的所有文件。将 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

    Linux or Unix
    aws iam create-policy \ --policy-name MyGreengrassV2ComponentArtifactPolicy \ --policy-document file://component-artifact-policy.json
    Windows Command Prompt (CMD)
    aws iam create-policy ^ --policy-name MyGreengrassV2ComponentArtifactPolicy ^ --policy-document file://component-artifact-policy.json
    PowerShell
    aws iam create-policy ` --policy-name MyGreengrassV2ComponentArtifactPolicy ` --policy-document file://component-artifact-policy.json

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

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

    Linux or Unix
    aws iam attach-role-policy \ --role-name GreengrassV2TokenExchangeRole \ --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
    Windows Command Prompt (CMD)
    aws iam attach-role-policy ^ --role-name GreengrassV2TokenExchangeRole ^ --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
    PowerShell
    aws iam attach-role-policy ` --role-name GreengrassV2TokenExchangeRole ` --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy

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