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

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

AWS サービスとやり取り

Greengrass コアデバイスは、TLS 相互認証プロトコルを使用して AWS IoT Core に接続するために、X.509 証明書を使用します。これらの証明書は、AWS 認証情報 (通常はアクセスキー ID とシークレットアクセスキー) がなくても、デバイスが AWS IoT とやり取りできるようにします。その他の AWS サービスは、サービスエンドポイントで API オペレーションを呼び出す際に、X.509 証明書ではなく AWS 認証情報が必要になります。AWS IoT Core には認証情報プロバイダがあり、これはデバイスが AWS リクエストを認証するために X.509 証明書を使用することを可能にします。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 はパブリックコンポーネントの 1 つであるトークン交換サービスコンポーネントを提供します。これはカスタムコンポーネントの依存関係として定義でき、AWS サービスとやり取りを可能にします。トークン交換サービスはコンポーネントに環境変数 AWS_CONTAINER_CREDENTIALS_FULL_URI を提供します。これは AWS 認証情報を提供するローカルサーバーへの URI を定義するものです。AWS SDK クライアントを作成すると、クライアントはこの環境変数をチェックしてローカルサーバーに接続し、AWS 認証情報を取得して、これを使用して API リクエストに署名します。これにより、コンポーネントで AWS サービスを呼び出すために、AWS SDK などのツールを使用できるようになります。詳細については、「トークン交換サービス」を参照してください。

重要

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

カスタムコンポーネントで AWS 認証情報を取得するには、コンポーネントレシピで aws.greengrass.TokenExchangeService を依存関係として定義します。次のサンプルレシピは、boto3 をインストールし、Amazon S3 バケットを一覧表示するためにトークン交換サービスからの AWS 認証情報を使用する 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)