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

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

与交互Amazon服务

Greengrass 核心设备使用 X.509 证书连接到Amazon IoT Core使用 TLS 相互身份验证协议。这些证书允许设备与Amazon IoT没有Amazon凭证,通常包含访问密钥 ID 和秘密访问密钥。其他Amazon需要服务Amazon凭据而不是 X.509 证书,用于在服务终端节点调用 API 操作。Amazon IoT Core有一个凭据提供程序,使设备能够使用其 X.509 证书进行身份验证Amazon请求。这些区域有:Amazon IoT通过 X.509 证书和问题对设备进行身份验证Amazon具有有限权限的临时安全令牌形式的凭证。设备可使用此令牌对任何设备进行签名和验证Amazon请求. 这样就无需存储AmazonGreengrass 核心设备上的凭证。有关更多信息,请参阅 。授予直接拨打到Amazon服务中的Amazon IoT Core开发人员指南.

从获取凭证Amazon IoT,Greengrass,核心设备使用Amazon IoT指向 IAM 角色的角色别名。此 IAM 角色称为令牌交换角色. 在安装Amazon IoT GreengrassCore 软件。要指定核心设备使用的角色别名,请配置iotRoleAlias的参数Greengrass.

这些区域有:Amazon IoT凭证提供商代表您承担令牌交换角色以提供Amazon核心设备的凭据。您可以向此角色附加适当的 IAM 策略,以允许核心设备访问Amazon资源,例如 S3 存储桶中的组件工件。有关如何配置令牌交换角色的详细信息,请参阅授权核心设备与Amazon服务.

Greengrass 核心设备存储Amazon默认情况下,凭证在 1 小时后到期。如果Amazon IoT Greengrass核心软件重新启动,它必须再次获取凭据。您可以使用UpdateRoleAlias操作以配置凭证的有效期。

Amazon IoT Greengrass提供了一个公共组件,即令牌交换服务组件,您可以在自定义组件中将其定义为要与之交互的依赖关系Amazon服务。令牌交换服务为您的组件提供了一个环境变量,AWS_CONTAINER_CREDENTIALS_FULL_URI,它将 URI 定义为本地服务器,该服务器提供Amazon凭证。创建时AmazonSDK 客户端,客户端检查此环境变量并连接到本地服务器进行检索Amazon凭证并使用它们对 API 请求进行签名。这样就可以让您使用AmazonSDK 和其他可以调用的工具Amazon组件中的服务。有关更多信息,请参阅 令牌交换服务

重要

获取 SupportAmazon以这种方式将凭据添加到Amazon2016 年 7 月 13 日开发工具包。你的组件必须使用Amazon在该日期或之后创建的开发工具包版本。有关更多信息,请参阅 。使用支持的Amazon开发工具包中的Amazon Elastic Container Service 开发指南.

要获取Amazon自定义组件中的凭据,定义aws.greengrass.TokenExchangeService作为组件配方中的依赖关系。以下示例配方定义了安装的组件boto3并运行使用的 Python 脚本Amazon令牌交换服务中的凭证用于列出 Amazon S3 存储桶。

注意

要运行此示例组件,您的设备必须具有s3:ListAllMyBuckets权限。有关更多信息,请参阅 授权核心设备与Amazon服务

JSON
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.ListS3Buckets", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that uses the token exchange service to list S3 buckets.", "ComponentPublisher": "Amazon", "ComponentDependencies": { "aws.greengrass.TokenExchangeService": { "VersionRequirement": "^2.0.0", "DependencyType": "HARD" } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "Install": "pip3 install --user boto3", "Run": "python3 -u {artifacts:path}/list_s3_buckets.py" } }, { "Platform": { "os": "windows" }, "Lifecycle": { "Install": "pip3 install --user boto3", "Run": "py -3 -u {artifacts:path}/list_s3_buckets.py" } } ] }
YAML
--- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.ListS3Buckets ComponentVersion: '1.0.0' ComponentDescription: A component that uses the token exchange service to list S3 buckets. ComponentPublisher: Amazon ComponentDependencies: aws.greengrass.TokenExchangeService: VersionRequirement: '^2.0.0' DependencyType: HARD Manifests: - Platform: os: linux Lifecycle: Install: pip3 install --user boto3 Run: |- python3 -u {artifacts:path}/list_s3_buckets.py - Platform: os: windows Lifecycle: Install: pip3 install --user boto3 Run: |- py -3 -u {artifacts:path}/list_s3_buckets.py

此示例组件运行以下 Python 脚本,list_s3_buckets.py其中列出了 Amazon S3 存储桶。

import boto3 import os try: print("Creating boto3 S3 client...") s3 = boto3.client('s3') print("Successfully created boto3 S3 client") except Exception as e: print("Failed to create boto3 s3 client. Error: " + str(e)) exit(1) try: print("Listing S3 buckets...") response = s3.list_buckets() for bucket in response['Buckets']: print(f'\t{bucket["Name"]}') print("Successfully listed S3 buckets") except Exception as e: print("Failed to list S3 buckets. Error: " + str(e)) exit(1)