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

のドキュメントを表示していますAWS IoT Greengrass Version 1。AWS IoT Greengrass Version 2の最新のメジャーバージョンです。AWS IoT Greengrass。の使用方法の詳細については、「」を参照してください。AWS IoT Greengrass V2の詳細については、AWS IoT Greengrass Version 2開発者ガイド

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

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

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

リポジトリの []AWS IoT GreengrassCore デバイスでは、コネクタと Lambda 関数は、パスワード、トークンなどの認証情報をハードコードすることなく、シークレットリソースを使用してサービスやアプリケーションで認証できます。

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

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

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

重要

シークレットマネージャーでシークレットを更新するためのベストプラクティスに従うことをお勧めします。次に、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 CloudTrailそのたびにAWS IoT Greengrassはシークレット値を取得します。AWS IoT Greengrassは、ローカルシークレットのデプロイや使用に関連するイベントをログに記録しません。Secrets Manager ログ記録の詳細については、「」を参照してください。使用状況を監視します。AWS Secrets Managerシークレット()AWS Secrets Managerユーザーガイド

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

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

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

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

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

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


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

または、コンソールでは、コネクタまたは Lambda 関数を設定するときに、シークレットリソースとシークレットリソースを作成できます。これは、コネクタのパラメータの設定ページまたは Lambda 関数のリソースページで.

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

Greengrass グループのシークレットリソースの管理タスクには、グループへのシークレットリソースの追加、グループからのシークレットリソースの削除、ステージングラベルシークレットリソースに含まれている。

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

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

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

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

シークレットマネージャーでシークレットを削除する場合は、グループおよびそれを参照するコネクタおよび Lambda 関数から、対応するシークレットリソースを削除します。それ以外の場合は、グループ展開中にAWS IoT Greengrassシークレットが見つからないというエラーを返します。また、必要に応じて Lambda 関数コードを更新します。

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

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

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

シークレットリソースは、対応する Secrets Manager ARN を参照し、AWSCURRENTこれは常に含まれています。

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 GreengrassAPI はバージョンを使用してグループを管理します。バージョンは変更不可であるため、グループのデバイス、関数、リソースなどのグループコンポーネントを追加または変更するには、新規コンポーネントまたは更新されたコンポーネントを作成する必要があります。次に、各コンポーネントのターゲットバージョンを含むグループバージョンを作成およびデプロイします。グループの詳細については、「」を参照してください。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)」を参照してください。

シークレットマネージャーでシークレットを削除する場合は、グループおよびそれを参照するコネクタおよび 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 (読み取り専用) アクセス許可のみがサポートされています。

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

    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 関数はget_secret_value関数をsecretsmanagerクライアントをAWS IoT GreengrassCore SDK (v1.3.0 以降)。

    次の例は、使用する方法を示しています。AWS IoT Greengrassシークレットを取得するためのPython用のCore SDK。これは、シークレットの名前をget_secret_valuefunction.SecretIdは、シークレットマネージャーのシークレットの名前または 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 関数がシークレットを安全に処理し、シークレットに格納されている機密データをログに記録しないようにしてください。詳細については、「」を参照してください。Lambda 機能のログ記録とデバッグのリスクを軽減する()AWS Secrets Managerユーザーガイド。このドキュメントでは特に回転関数について言及していますが、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 関数デプロイパッケージを作成する:」を参照してください。