シークレットリソースを使用する - AWS IoT Greengrass

AWS IoT Greengrass Version 1 は 2023 年 6 月 30 日に延長ライフフェーズに参加しました。詳細については、「AWS IoT Greengrass V1 メンテナンスポリシー」を参照してください。この日以降、 AWS IoT Greengrass V1 は機能、機能強化、バグ修正、またはセキュリティパッチを提供する更新をリリースしません。で実行されるデバイスは中断 AWS IoT Greengrass V1 されず、引き続き動作し、クラウドに接続します。に移行することを強くお勧めします。 AWS IoT Greengrass Version 2これにより、重要な新機能が追加され、プラットフォーム のサポートが追加されます

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

シークレットリソースを使用する

AWS IoT Greengrass では、シークレットリソースを使用して AWS Secrets Manager のシークレットを Greengrass グループに統合します。シークレットリソースとは、Secrets Manager シークレットへの参照を意味します。詳細については、「AWS IoT Greengrass Core にシークレットをデプロイする」を参照してください。

AWS IoT Greengrass コアデバイス上のコネクタと Lambda 関数では、シークレットリソースを使用してサービスとアプリケーションの認証を行えます。パスワードやトークンといった認証情報のハードコーディングは不要です。

シークレットの作成と管理

Greengrass グループで、シークレットリソースは Secrets Manager シークレットの ARN を参照します。シークレットリソースをコアにデプロイすると、シークレットの値は暗号化され、関連付けられているコネクタおよび Lambda 関数で使用できるようになります。詳細については、「シークレットの暗号化」を参照してください。

Secrets Manager を使用して、シークレットのクラウドバージョンを作成および管理します。AWS IoT Greengrass を使用して、シークレットリソースを作成、管理、デプロイします。

重要

Secrets Manager でシークレットを更新するためのベストプラクティスに従うことをお勧めします。次に、Greengrass グループをデプロイして、シークレットのローカルコピーを更新します。詳細については、「AWS Secrets Manager ユーザーガイド」の「AWS Secrets Manager シークレットのローテーション」を参照してください。

Greengrass Core でシークレットを使用可能にするには

  1. Secrets Manager でシークレットを作成します。これは、Secrets Manager で一元的に保存および管理されるシークレットのクラウドバージョンです。管理タスクには、シークレットの値の更新とリソースポリシーの適用が含まれます。

  2. AWS IoT Greengrass でシークレットリソースを作成します。これは、ARN に基づいてクラウドシークレットを参照するグループリソースの一種です。シークレットはグループごとに 1 回のみ参照できます。

  3. コネクタまたは Lambda 関数を設定する。リソースをコネクタまたは関数に関連付けるには、対応するパラメータまたはプロパティを指定する必要があります。これにより、ローカルにデプロイされたシークレットリソースの値を取得できます。詳細については、「コネクタと Lambda 関数でのローカルシークレットの使用」を参照してください。

  4. Greengrass グループをデプロイする。デプロイ中、AWS IoT Greengrass はクラウドシークレットの値を取り出し、Core のローカルシークレットを作成 (または更新) します。

Secrets Manager は、AWS IoT Greengrass がシークレットの値を取得するたびに、AWS CloudTrail にイベントを記録します。AWS IoT Greengrass は、ローカルシークレットのデプロイや使用に関連するイベントをログに記録しません。Secrets Manager のログの詳細については、「AWS Secrets Manager ユーザーガイド」の「 Monitor the use of your AWS Secrets Manager secrets」( シークレットの使用を監視する) を参照してください。

シークレットリソースにステージングラベルを含める

Secrets Manager はステージングラベルを使用して、シークレットの値の特定バージョンを識別します。ステージングラベルは、システム定義またはユーザー定義とすることができます。Secrets Manager は、AWSCURRENT ラベルをシークレット値の最新バージョンに割り当てます。ステージングラベルは一般に、シークレットの更新を管理するために使用されます。Secrets Manager のバージョニングの詳細については、「AWS Secrets Manager ユーザーガイド」の「Key terms and concepts for AWS Secrets Manager」( の主な用語と概念) を参照してください。

シークレットリソースには必ず AWSCURRENT ステージングラベルを含めます。また、Lambda 関数やコネクタに必要な場合、他のステージングラベルを含めることもできます。グループの展開中、AWS IoT Greengrass はグループ内で参照されているステージングラベルの値を取得し、Core で対応する値を作成または更新します。

シークレットリソースの作成と管理 (コンソール)

シークレットリソースの作成 (コンソール)

AWS IoT Greengrass コンソールで、グループの [Resources] (リソース) ページにある [Secrets] (シークレット) タブからシークレットリソースを作成および管理します。シークレットリソースを作成してグループに追加するチュートリアルについては、「シークレットリソースを作成する方法 (コンソール)」と「Greengrass コネクタの開始方法 (コンソール)」を参照してください。

[Resources (リソース)] ページの [シークレット] タブのシークレットリソース
注記

別の方法として、コネクタや Lambda 関数を設定するときに、コンソールでシークレットとシークレットリソースを作成することもできます。これはコネクタの [Configure parameters] (パラメータの設定) ページか、Lambda 関数の [Resources] (リソース) ページから実行できます。

シークレットリソースの管理 (コンソール)

Greengrass グループのシークレットリソース管理タスクとして、グループへのシークレットリソースの追加、グループからのシークレットリソースの削除、シークレットリソース内にあるステージングラベルセットの変更が挙げられます。

Secrets Manager とは異なるシークレットを参照する場合は、そのシークレットを使用するコネクタをすべて編集する必要があります。

  1. グループの設定ページで、[コネクタ] を選択します。

  2. コネクタのコンテキストメニューから [Edit] (編集) を選択します。

  3. [パラメータの編集] ページで、シークレット ARN が変更されたことを知らせるメッセージが表示されます。変更を確定するには、[Save (保存)] を選択します。

Secrets Manager でシークレットを削除する場合は、グループ、およびそれを参照するコネクタと Lambda 関数から、対応するシークレットリソースを削除します。その操作を行わないと、グループのデプロイ中に、AWS IoT Greengrass から、シークレットが見つからない旨のエラーが返ります。また、必要に応じて Lambda 関数コードを更新します。

シークレットリソースの作成と管理 (CLI)

シークレットリソースの作成 (CLI)

AWS IoT Greengrass API では、シークレットはグループリソースの一種です。以下の例では、MySecretResource というシークレットリソースを含む初期バージョンでリソース定義を作成します。シークレットリソースを作成してグループバージョンに追加するチュートリアルについては、「Greengrass コネクタの開始方法 (CLI)」を参照してください。

シークレットリソースは、対応する Secrets Manager シークレットの ARN を参照し、常に含まれる AWSCURRENT に加えて 2 つのステージングラベルを含みます。

aws greengrass create-resource-definition --name MyGreengrassResources --initial-version '{ "Resources": [ { "Id": "my-resource-id", "Name": "MySecretResource", "ResourceDataContainer": { "SecretsManagerSecretResourceData": { "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:greengrass-SomeSecret-KUj89s", "AdditionalStagingLabelsToDownload": [ "Label1", "Label2" ] } } } ] }'

シークレットリソースの管理 (CLI)

Greengrass グループのシークレットリソース管理タスクとして、グループへのシークレットリソースの追加、グループからのシークレットリソースの削除、シークレットリソース内にあるステージングラベルセットの変更が挙げられます。

AWS IoT Greengrass API では、これらの変更はバージョンを使用して実装されます。

AWS IoT Greengrass API はバージョンを使用してグループを管理します。バージョンは変更不可であるため、グループのクライアントデバイス、関数、リソースといったグループコンポーネントを追加または変更するには、新規または更新済みコンポーネントのバージョンを作成する必要があります。その後、各コンポーネントのターゲットバージョンを含むグループバージョンを作成およびデプロイします。グループの詳細については、「AWS IoT Greengrass グループ」を参照してください。

例えば、シークレットリソースの一連のステージングラベルを変更するには、以下の操作を実行します。

  1. 更新されたシークレットリソースを含むリソース定義バージョンを作成します。以下の例では、前のセクションのシークレットリソースに 3 つ目のステージングラベルを追加します。

    注記

    バージョンにさらにリソースを追加するには、それらのリソースを Resources 配列に含めます。

    aws greengrass create-resource-definition --name MyGreengrassResources --initial-version '{ "Resources": [ { "Id": "my-resource-id", "Name": "MySecretResource", "ResourceDataContainer": { "SecretsManagerSecretResourceData": { "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:greengrass-SomeSecret-KUj89s", "AdditionalStagingLabelsToDownload": [ "Label1", "Label2", "Label3" ] } } } ] }'
  2. シークレットリソースの ID が変更された場合は、そのシークレットリソースを使用するコネクタと関数を更新します。新しいバージョンでは、リソース ID に対応するパラメータまたはプロパティを更新します。シークレットの ARN が変更された場合は、シークレットを使用するすべてのコネクタに対応するパラメータも更新する必要があります。

    注記

    リソース ID は、お客様が提供する任意の識別子です。

  3. Core に送信する各コンポーネントのターゲットバージョンを含むグループバージョンを作成します。

  4. グループバージョンをデプロイします。

シークレットリソース、コネクタ、関数を作成してデプロイする方法を示すチュートリアルについては、「Greengrass コネクタの開始方法 (CLI)」を参照してください。

Secrets Manager でシークレットを削除する場合は、グループ、およびそれを参照するコネクタと Lambda 関数から、対応するシークレットリソースを削除します。その操作を行わないと、グループのデプロイ中に、AWS IoT Greengrass から、シークレットが見つからない旨のエラーが返ります。また、必要に応じて Lambda 関数コードを更新します。ローカルシークレットを削除するには、対応するシークレットリソースを含まないリソース定義バージョンをデプロイします。

コネクタと Lambda 関数でのローカルシークレットの使用

Greengrass コネクタと Lambda 関数はローカルシークレットを使用して、サービスやアプリケーションとやり取りします。デフォルトでは AWSCURRENT 値が使用されますが、シークレットリソースに含まれている他のステージングラベルの値も使用できます。

コネクタと関数はローカルシークレットにアクセスする前に設定する必要があります。これにより、シークレットリソースがコネクタまたは関数に関連付けられます。

Connector

コネクタがローカルシークレットにアクセスする必要がある場合、シークレットにアクセスするためのパラメータはお客様が設定します。

個々のコネクタの要件については、「AWS が提供する Greengrass コネクタ」を参照してください。

シークレットにアクセスして使用するためのロジックは、コネクタに組み込まれています。

Lambda 関数

Greengrass Lambda 関数にローカルシークレットへのアクセスを許可するには、その関数のプロパティを設定します。

  • これを AWS IoT Greengrass コンソールで行う方法については、「シークレットリソースを作成する方法 (コンソール)」を参照してください。

  • AWS IoT Greengrass API でこれを行うには、ResourceAccessPolicies プロパティで以下の情報を指定します。

    • ResourceId: Greengrass グループのシークレットリソースの ID。これは、対応する Secrets Manager シークレットの ARN を参照するリソースです。

    • Permission: 関数がリソースに対して付与されるアクセス許可のタイプ。シークレットリソースに対しては ro (読み取り専用) アクセス許可のみがサポートされています。

    以下の例では、MyApiKey シークレットリソースにアクセスできる Lambda 関数を作成します。

    aws greengrass create-function-definition --name MyGreengrassFunctions --initial-version '{ "Functions": [ { "Id": "MyLambdaFunction", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:myFunction:1", "FunctionConfiguration": { "Pinned": false, "MemorySize": 16384, "Timeout": 10, "Environment": { "ResourceAccessPolicies": [ { "ResourceId": "MyApiKey", "Permission": "ro" } ], "AccessSysfs": true } } } ] }'

     

    ローカルシークレットにランタイムにアクセスする場合、Greengrass Lambda 関数は AWS IoT Greengrass Core SDK (v1.3.0 以降) の secretsmanager クライアントから get_secret_value 関数を呼び出します。

    次の例では、AWS IoT Greengrass Core SDK for Python を使用してシークレットを取得する方法を示しています。シークレットの名前を get_secret_value 関数に渡します。SecretId は、Secrets Manager シークレット (シークレットリソースではなく) の名前または ARN です。

    import greengrasssdk secrets_client = greengrasssdk.client("secretsmanager") secret_name = "greengrass-MySecret-abc" def function_handler(event, context): response = secrets_client.get_secret_value(SecretId=secret_name) secret = response.get("SecretString")

    テキストタイプのシークレットの場合、get_secret_value 関数は文字列を返します。バイナリタイプのシークレットの場合は、Base 64 でエンコードされた文字列を返します。

    重要

    ユーザー定義の Lambda 関数がシークレットを安全に処理することと、シークレットに格納されている機密データをログに記録しないことを確認してください。詳細については、「AWS Secrets Manager ユーザーガイド」の「Lambda 関数のログ記録とデバッグのリスクを軽減する」を参照してください。このドキュメントでは特に回転関数について言及していますが、こうした推奨事項は Greengrass Lambda 関数にも適用されます。

    デフォルトでは、シークレットの現在の値が返されます。これは AWSCURRENT ステージングラベルのアタッチ先のバージョンです。別のバージョンにアクセスするには、対応するステージングラベルの名前をオプションの VersionStage 引数に渡します。例:

    import greengrasssdk secrets_client = greengrasssdk.client("secretsmanager") secret_name = "greengrass-TestSecret" secret_version = "MyTargetLabel" # Get the value of a specific secret version def function_handler(event, context): response = secrets_client.get_secret_value( SecretId=secret_name, VersionStage=secret_version ) secret = response.get("SecretString")

    get_secret_value を呼び出す別の関数の例については、「Lambda 関数デプロイパッケージを作成する」を参照してください。