AWS サービスとやり取りする - AWS IoT Greengrass

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS サービスとやり取りする

Greengrass コアデバイスは X.509 証明書を使用して、TLS 相互認証プロトコル AWS IoT Core を使用して に接続します。これらの証明書により、デバイスは認証情報 AWS IoT なしで AWS とやり取りできます。認証情報は通常、アクセスキー ID とシークレットアクセスキーで構成されます。他の AWS サービスでは、サービスエンドポイントで API オペレーションを呼び出すために X.509 証明書 AWS の代わりに認証情報が必要です。 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 ソフトウェアをインストールするときに、ロールエイリアスとトークン交換ロールを作成します。コアデバイスが使用するロールエイリアスを指定するには、Greengrass nucleusiotRoleAlias パラメータを設定します。

AWS IoT 認証情報プロバイダーは、ユーザーに代わってトークン交換ロールを引き受け、コアデバイスに AWS 認証情報を提供します。このロールに適切な IAM ポリシーをアタッチして、コアデバイスが S3 バケットのコンポーネントアーティファクトなどの AWS リソースにアクセスできるようにします。トークン交換ロールを設定する方法の詳細については、「コアデバイスが AWS サービスとやり取りできるように承認する」を参照してください。

Greengrass コアデバイスは AWS 認証情報をメモリに保存し、認証情報はデフォルトで 1 時間後に期限切れになります。 AWS IoT Greengrass Core ソフトウェアが再起動した場合、認証情報を再度取得する必要があります。UpdateRoleAlias オペレーションを使用すると、認証情報が有効である期間を設定できます。

AWS IoT Greengrass は、トークン交換サービスコンポーネントであるパブリックコンポーネントを提供します。これは、 AWS サービスとやり取りするためのカスタムコンポーネントの依存関係として定義できます。トークン交換サービスは、 AWS 認証情報を提供するローカルサーバーへの URI AWS_CONTAINER_CREDENTIALS_FULL_URIを定義する環境変数 をコンポーネントに提供します。 AWS SDK クライアントを作成すると、クライアントはこの環境変数をチェックし、ローカルサーバーに接続して AWS 認証情報を取得し、それらを使用して API リクエストに署名します。これにより、 AWS SDKsやその他のツールを使用して、コンポーネント内の AWS サービスを呼び出すことができます。詳細については、「トークン交換サービス」を参照してください。

重要

この方法で AWS 認証情報を取得するサポートが 2016 年 7 月 13 日に AWS SDKs に追加されました。コンポーネントは、その日付以降に作成された AWS SDK バージョンを使用する必要があります。詳細については、「Amazon Elastic Container Service デベロッパーガイド」の「サポートされている AWS SDK の使用」を参照してください。

カスタムコンポーネントの AWS 認証情報を取得するには、コンポーネント recipe で依存関係aws.greengrass.TokenExchangeServiceとして を定義します。次のレシピ例では、boto3 をインストールし、トークン交換サービスの AWS 認証情報を使用して Amazon S3 バケットを一覧表示する Python スクリプトを実行するコンポーネントを定義します。

注記

このサンプルコンポーネントを実行するには、デバイスに 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)