与交互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 软件。要指定核心设备使用的角色别名,请配置iotRoleAliasGreengrass 核心.

这些区域有: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服务。有关更多信息,请参阅 Token Token Service

重要

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

要获取Amazon凭据,请定义aws.greengrass.TokenExchangeService作为组件配方中的依赖关系。以下示例配方定义了一个安装boto3并运行使用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": [ { "Lifecycle": { "Install": "pip3 install --user boto3", "Run": "python3 -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: - Lifecycle: Install: pip3 install --user boto3 Run: |- python3 -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)