與AWS服務互動 - AWS IoT Greengrass

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

與AWS服務互動

Greengrass 核心裝置使用 X.509 憑證來連線到AWS IoT Core使用 TLS 相互驗證通訊協定。這些憑證可讓裝置在沒有AWS認證的AWS IoT情況下進行互動,這些憑證通常包含存取金鑰 ID 和秘密存取金鑰。其他AWS服務需要AWS憑證而非 X.509 憑證,才能在服務端點呼叫 API 作業。 AWS IoT Core具有認證提供者,可讓裝置使用其 X.509 憑證來驗證AWS要求。AWS IoT憑證提供者會使用 X.509 憑證驗證裝置,並以臨時、有限權限的安全性權杖形式發出AWS認證。設備可以使用此令牌來簽署和驗證任何AWS請求。這樣就不需要在 Greengrass 核心設備上存儲AWS憑據。如需詳細資訊,請參閱AWS IoT Core開發人員指南的授權直接呼叫AWS服務

若要從 AWS IoT Greengrass 擷取認證,核心裝置會使用指向 IAM AWS IoT 角色的角色別名。此 IAM 角色稱為權杖交換角色。您可以在安裝 AWS IoT Greengrass Core 軟體時建立角色別名和權杖交換角色。若要指定核心裝置使用的角色別名,請設定的iotRoleAlias參數Greengrass 核

AWS IoT憑據提供程序代表您承擔令牌交換角色,以向核心設備提供AWS憑據。您可以將適當的 IAM 政策附加到此角色,以允許核心裝置存取您的AWS資源,例如 S3 儲存貯體中的元件成品。如需如何設定 Token 交換角色的詳細資訊,請參閱授權核心裝置與 AWS 服務互動

Greengrass 核心裝置會將AWS認證儲存在記憶體中,依預設,認證會在一小時後過期。如果AWS IoT Greengrass核心軟體重新啟動,它必須再次擷取認證。您可以使用此UpdateRoleAlias作業來設定認證有效的持續時間。

AWS IoT Greengrass提供一個公共組件,即令牌交換服務組件,您可以將其定義為自定義組件中的依賴項以與AWS服務進行交互。Token 交換服務會為您的元件提供環境變數AWS_CONTAINER_CREDENTIALS_FULL_URI,該變數會定義提供認AWS證的本機伺服器的 URI。當您建立 AWS SDK 用戶端時,用戶端會檢查此環境變數,並連線至本機伺服器以擷取AWS認證,並使用它們簽署 API 要求。這可讓您使用 AWS SDK 和其他工具來呼叫元件中的AWS服務。如需詳細資訊,請參閱 代幣交換服務

重要

以這種方式取得AWS認證的 Support 已於 2016 年 7 月 13 日新增至 AWS SDK。您的元件必須使用在該日期或之後建立的 AWS SDK 版本。如需詳細資訊,請參閱 Amazon 彈性容器服務開發人員指南中的使用支援的 AWS SDK

若要取得自訂元件中的AWS認證,請在元件方案中定義aws.greengrass.TokenExchangeService為相依性。下列範例方法定義了安裝 boto3 並執行 Python 指令碼的元件,該指令碼使用權杖交換服務的AWS登入資料列出 Amazon S3 儲存貯體。

注意

若要執行此範例元件,您的裝置必須具有s3:ListAllMyBuckets權限。如需詳細資訊,請參閱 授權核心裝置與 AWS 服務互動

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

此範例元件會執行下列列出 Amazon S3 儲存貯體的 Python 指令碼。list_s3_buckets.py

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)