シークレットリソースを作成する方法 (コンソール) - 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 Core v1.7 以降で使用できます。

このチュートリアルでは、AWS Management Console を使用して Greengrass グループにシークレットリソースを追加する方法を示します。シークレットリソースは AWS Secrets Manager からシークレットへの参照です。詳細については、「AWS IoT Greengrass Core にシークレットをデプロイする」を参照してください。

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

このチュートリアルでは、最初に AWS Secrets Manager コンソールでシークレットを作成します。次に、AWS IoT Greengrass コンソールで、グループの [Resources] (リソース) ページからシークレットリソースを Greengrass グループに追加します。このシークレットリソースは、Secrets Manager シークレットを参照します。後で、シークレットリソースを Lambda 関数にアタッチします。これにより、関数はローカルシークレットの値を取得できます。

注記

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

シークレットのパラメータを含むコネクタのみがシークレットにアクセスできます。ローカルに保存された認証トークンを Twilio 通知コネクタがどのように使用するかを示すチュートリアルについては、「Greengrass コネクタの開始方法 (コンソール)」を参照してください。

このチュートリアルには、以下の手順の概要が含まれます。

このチュートリアルは完了までに約 20 分かかります。

前提条件

このチュートリアルを完了するには、以下が必要です。

  • Greengrass グループと Greengrass コア (v1.7 以降)。Greengrass のグループまたは Core を作成する方法については、「AWS IoT Greengrass の開始方法」を参照してください。開始方法チュートリアルには、AWS IoT Greengrass Core ソフトウェアのインストール手順も含まれています。

  • AWS IoT Greengrass はローカルシークレットをサポートするように設定する必要があります。詳細については、「シークレットの要件」を参照してください。

    注記

    この要件には、Secrets Manager シークレットへのアクセス許可が含まれます。デフォルトの Greengrass サービスロールを使用している場合、Greengrass は greengrass- で始まる名前の付いたシークレット値にアクセスできます。

  • ローカルシークレットの値を取得するには、ユーザー定義の Lambda 関数で AWS IoT Greengrass Core SDK v1.3.0 以降を使用する必要があります。

ステップ 1: Secrets Manager シークレットを作成する

この手順では、AWS Secrets Manager コンソールを使用してシークレットを作成します。

  1. AWS Secrets Manager コンソールにサインインします。

    注記

    このプロセスの詳細については、「AWS Secrets Manager ユーザーガイド」の「ステップ 1: AWS Secrets Manager でシークレットを作成および保存する」を参照してください。

  2. [Store a new secret] (新しいシークレットの保存) を選択します。

  3. [Choose secret type] (シークレットの種類を選択) で、[Other type of secrets] (他の種類のシークレット) を選択します。

  4. [このシークレットに保存するキーと値のペアを指定します] で以下の操作を行います。

    • [キー] に「test」と入力します。

    • [Value (値)] に「abcdefghi」と入力します。

  5. 暗号化には aws/secretsmanager を暗号キーとして選択した状態で、[Next] (次へ) を選択します。

    注記

    Secrets Manager がアカウントで作成するデフォルトの AWS 管理キーを使用する場合、AWS KMS によって課金されることはありません。

  6. [シークレット名] に「greengrass-TestSecret」と入力し、[次へ] を選択します。

    注記

    Greengrass サービスロールのデフォルト設定では、AWS IoT Greengrass が greengrass- で始まる名前の付いたシークレットの値を取得することができます。詳細については、「シークレットの要件」を参照してください。

  7. このチュートリアルではローテーションは不要であるため、[disable automatic rotation] (自動ローテーションを無効化)、Next (次へ) の順に選択します。

  8. [確認] ページで、設定を確認し、[保存] を選択します。

    次に、シークレットを参照する Greengrass グループにシークレットリソースを作成します。

ステップ 2: Greengrass グループにローカルシークレットリソースを追加する

この手順では、Secrets Manager シークレットを参照するグループリソースを設定します。

  1. AWS IoT コンソールのナビゲーションペインの [Manage] (管理) で、[Greengrass devices] (Greengrass デバイス) を展開して、[Groups (V1)] (グループ (V1))を選択します。

  2. シークレットリソースを追加するグループを選択します。

  3. グループ設定ページの [Resources] (リソース) タブから、[Secrets] (シークレット) セクションを選択します。[Secrets] (シークレット) セクションには、グループに属するシークレットリソースが表示されます。このセクションからシークレットリソースを追加、編集、削除できます。

    注記

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

  4. [Secrets] (シークレット) セクションから [Add] (追加) を選択します。

  5. [Add a secret resource] (シークレットリソースに追加) ページで、[Resource name] (リソース名) に MyTestSecret を入力します。

  6. [Secret] (シークレット) から[greengrass-testsecret]を選択します。

  7. [Select labels (Optional)] (ラベルを選択 〔オプション〕) セクションの、AWSCURRENT ステージングラベルはシークレットの最新バージョンを表します。このラベルはシークレットリソースに常に含まれています。

    注記

    このチュートリアルでは、AWSCURRENT ラベルのみが必要です。オプションで、Lambda 関数またはコネクタで必要になるラベルを含めることができます。

  8. [Add resource] (リソースを追加) を選択します。

ステップ 3: Lambda 関数デプロイパッケージを作成する

Lambda 関数を作成するには、関数のコードと依存関係を含む Lambda 関数デプロイパッケージを最初に作成する必要があります。Greengrass Lambda 関数には、コア環境での MQTT メッセージとの通信やローカルシークレットへのアクセスなどのタスクに使用する、AWS IoT Greengrass Core SDK が必要です。このチュートリアルでは Python 関数を作成するため、デプロイパッケージには Python 版の SDK を使用します。

注記

ローカルシークレットの値を取得するには、ユーザー定義の Lambda 関数で AWS IoT Greengrass Core SDK v1.3.0 以降を使用する必要があります。

  1. AWS IoT Greengrass Core SDK のダウンロードページから、AWS IoT Greengrass Core SDK for Python をお使いのコンピュータにダウンロードします。

  2. ダウンロードしたパッケージを解凍し、SDK を取得します。SDK は greengrasssdk フォルダです。

  3. 以下の Python コード関数を secret_test.py というローカルファイルに保存します。

    import greengrasssdk secrets_client = greengrasssdk.client("secretsmanager") iot_client = greengrasssdk.client("iot-data") secret_name = "greengrass-TestSecret" send_topic = "secrets/output" def function_handler(event, context): """ Gets a secret and publishes a message to indicate whether the secret was successfully retrieved. """ response = secrets_client.get_secret_value(SecretId=secret_name) secret_value = response.get("SecretString") message = ( f"Failed to retrieve secret {secret_name}." if secret_value is None else f"Successfully retrieved secret {secret_name}." ) iot_client.publish(topic=send_topic, payload=message) print("Published: " + message)

    get_secret_value 関数は、SecretId 値として Secrets Manager シークレットの名前または ARN をサポートしています。この例では、シークレット名を使用しています。この例のシークレットでは、AWS IoT Greengrass がキーと値のペアとして {"test":"abcdefghi"} を返します。

    重要

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

  4. 以下の項目を secret_test_python.zip という名前のファイルに圧縮します。ZIP ファイルを作成するときに、コードと依存関係のみを含め、フォルダは含めません。

    • secret_test.py アプリケーションロジック。

    • greengrasssdk。すべての Python Greengrass Lambda 関数に必要なライブラリ。

    これが Lambda 関数デプロイパッケージです。

ステップ 4: Lambda 関数を作成する

このステップでは、AWS Lambda コンソールを使用して Lambda 関数を作成し、デプロイパッケージを使用するようにその関数を設定します。次に、関数のバージョンを公開し、エイリアスを作成します。

  1. 最初に Lambda 関数を作成します。

    1. AWS Management Console で、[サービス] を選択し、AWS Lambda コンソールを開きます。

    2. [Create function] (関数の作成) を選択し、[Author from scratch] (一から作成) を選択します。

    3. [Basic information] セクションで、以下の値を使用します。

      • [Function name] (関数名) に SecretTest と入力します。

      • [Runtime (ランタイム)] で [Python 3.7] を選択します。

      • [Permissions] (アクセス許可) はデフォルト設定のままにしておきます。これで Lambda への基本的なアクセス許可を付与する実行ロールが作成されます。このロールは、AWS IoT Greengrass によっては使用されません。

    4. ページの下部で、[Create function] を選択します。

  2. 今度は、ハンドラを登録し、Lambda 関数デプロイパッケージをアップロードします。

    1. [Code] (コード) タブの [Code source] (コードソース) で、[Upload from] (アップロード元) を選択します。ドロップダウンから [.zip file] (.zip ファイル) を選択します。

      
                [.zip file] (.zip ファイル) が強調表示された [Upload from] (アップロード元) ドロップダウンリスト。
    2. [Upload] (アップロード) を選択し、secret_test_python.zip デプロイパッケージを選択します。次に、保存を選択します。

    3. 関数の [Code] (コード) タブにある [Runtime settings] (ランタイム設定) で [Edit] (編集) を選択し、次の値を入力します。

      • [Runtime (ランタイム)] で [Python 3.7] を選択します。

      • [ハンドラ] に「secret_test.function_handler」と入力します。

    4. [Save (保存)] を選択します。

      注記

      AWS Lambda コンソールの [Test] (テスト) ボタンは、この関数では機能しません。AWS IoT Greengrass Core SDK には、AWS Lambda コンソールで Greengrass Lambda 関数を個別に実行するために必要なモジュールは含まれていません。これらのモジュール (例えば greengrass_common) が関数に提供されるのは、Greengrass Core にデプロイされた後になります。

  3. ここで、Lambda 関数の最初のバージョンを公開し、バージョンのエイリアスを作成します。

    注記

    Greengrass グループは、Lambda 関数をエイリアス別 (推奨) またはバージョン別に参照できます。エイリアスを使用すると、関数コードを更新する時にサブスクリプションテーブルやグループ定義を変更する必要がないため、コード更新を簡単に管理できます。その代わりに、新しい関数バージョンにエイリアスを指定するだけで済みます。

    1. [Actions] メニューから、[Publish new version] を選択します。

    2. [バージョンの説明] に「First version」と入力し、[発行] を選択します。

    3. [SecretTest: 1] 設定ページで、[Actions (アクション)] メニューの [エイリアスの作成] を選択します。

    4. [Create a new alias] ページで、次の値を使用します。

      • [名前] に GG_SecretTest と入力します。

      • [Version (バージョン)] で、[1] を選択します。

      注記

      AWS IoT Greengrass は、$LATEST バージョンの Lambda エイリアスをサポートしていません。

    5. [Create] (作成) を選択します。

これで、Greengrass グループに Lambda 関数を追加し、シークレットリソースをアタッチする準備ができました。

ステップ 5: Lambda 関数を Greengrass グループに追加する

このステップでは、Lambda 関数を AWS IoT コンソールの Greengrass グループに追加します。

  1. グループ設定ページで、[Lambda functions] (Lambda 関数) タブを選択します。

  2. [My Lambda functions] (自分の Lambda 関数) セクションで、[Add](追加)を選択します。

  3. [Lambda function] (Lambda 関数) で、[SecretTest]を選択します。

  4. [Lambda function version] (Lambda 関数のバージョン) で、公開したバージョンのエイリアスを選択します。

次に、Lambda 関数のライフサイクルを設定します。

  1. [Lambda function configuration] (Lambda 関数の設定) セクションで次のように更新します。

    注記

    ビジネスケースで要求される場合を除き、Lambda 関数を、コンテナ化を使用しないで実行することをお勧めします。これにより、デバイスリソースを設定しなくても、デバイスの GPU とカメラにアクセスできるようになります。コンテナ化を使用しないで実行する場合は、AWS IoT Greengrass Lambda 関数にもルートアクセスを付与する必要があります。

    1. コンテナ化を使用せずに実行するには:

      • [System user and group] (システムユーザーとグループ) で、Another user ID/group IDを選択します。[System user ID] (システムユーザ ID) には、「0」と入力します。[System group ID] (システムグループ ID) には、「0」と入力します。

        これにより、Lambda 関数を root として実行できます。root として実行の詳細については、「グループ内の Lambda 関数に対するデフォルトのアクセス ID の設定」を参照してください。

        ヒント

        また、ルートアクセスを Lambda 関数に付与するように config.json ファイルを更新する必要があります。手順については、「root としての Lambda 関数の実行」を参照してください。

      • [Lambda function containerization] (Lambda 関数のコンテナ化) で、[No container] (コンテナなし) を選択します。

        コンテナ化を使用しない実行の詳細については、「Lambda 関数のコンテナ化を選択する場合の考慮事項」を参照してください。

      • [Timeout (タイムアウト)] に「10 seconds」と入力します。

      • [Pinned] (固定)で、[True] を選択します。

        詳細については、「Greengrass Lambda 関数のライフサイクル設定」を参照してください。

      • [Additional Parameter] (追加のパラメータ) の、[Read access to /sys directory] (/sys ディレクトリへの読み取りアクセス) で、[Enabled] (有効) を選択します。

    2. 代わりにコンテナ化モードで実行するには:

      注記

      ビジネスケースで要求されない限り、コンテナ化モードでの実行はお勧めしていません。

      • [System user and group] (システムユーザーとグループ) で、[Use group default] (グループのデフォルトを使用) を選択します。

      • [Lambda function containerization] (Lambda 関数のコンテナ化) で、[Use group default] (グループのデフォルトを使用) を選択します。

      • [メモリ制限] に「1024 MB」と入力します。

      • [Timeout (タイムアウト)] に「10 seconds」と入力します。

      • [Pinned] (固定)で、[True] を選択します。

        詳細については、「Greengrass Lambda 関数のライフサイクル設定」を参照してください。

      • [Additional Parameter] (追加のパラメータ) の、[Read access to /sys directory] (/sys ディレクトリへの読み取りアクセス) で、[Enabled] (有効) を選択します。

  2. [Add Lambda function] (Lambda 関数の追加) を選択します。

次に、シークレットリソースを関数に関連付けます。

ステップ 6: シークレットリソースを Lambda 関数にアタッチする

このステップでは、シークレットリソースを Greengrass グループの Lambda 関数に関連付けます。これで、リソースは関数に関連付けられて、ローカルシークレットの値を取得できるようになります。

  1. グループ設定ページで、[Lambda functions] (Lambda 関数) タブを選択します。

  2. [SecretTest] 関数を選択します。

  3. 関数の詳細ページで、[Resources] (リソース) を選択します。

  4. シークレット セクションまでスクロールして、[Associate] (関連付け) を選択します。

  5. [MyTestSecret][Associate] (関連付け) の順に選択します。

ステップ 7: サブスクリプションを Greengrass グループに追加する

このステップでは、AWS IoT と Lambda 関数にメッセージの交換を許可するサブスクリプションを追加します。1 つのサブスクリプションでは、AWS IoT に関数の呼び出しを許可し、もう 1 つのサブスクリプションでは、関数に AWS IoT へのデータの送信を許可します。

  1. グループ設定ページで、[Subscriptions] (サブスクリプション) タブ、[Add Subscription] (サブスクリプションの追加) の順に選択します。

  2. 関数にメッセージを発行することを AWS IoT に許可するサブスクリプションを作成します。

    グループ設定ページで、[Subscriptions] (サブスクリプション) タブ、[Add subscription] (サブスクリプションの追加) の順に選択します。

  3. [Create a subscription] (サブスクリプションの作成) ページで、ソースおよびターゲットを次のように設定します。

    1. [Source type] (ソースタイプ) で、[Lambda function] (Lambda 関数)、[IoT Cloud] (IoT クラウド) の順に選択します。

    2. [Target type] (ターゲットタイプ) で、[Service] (サービス)、[SecretTest]の順に選択します。

    3. [Topic filter] (トピックのフィルター) で、「secrets/input」と入力し、[Create subscription] (サブスクリプションの作成) を選択します。

  4. 2 つ目のサブスクリプションを追加します。[Subscriptions] (サブスクリプション) タブ、[Add subscription] (サブスクリプションの追加) の順に選択し、ソースとターゲットを次のように設定します。

    1. [Source type] (ソースタイプ) で、[Services] (サービス)、[SecretTest]の順に選択します。

    2. [Target type] (ターゲットタイプ) で、[Lambda function] (Lambda 関数)、 [IoT Cloud] (IoT クラウド) の順に選択します。

    3. [Topic filter] (トピックのフィルター) で、「secrets/output」と入力し、[Create subscription] (サブスクリプションの作成) を選択します。

ステップ 8: Greengrass グループをデプロイする

Core デバイスにグループをデプロイします。デプロイ時に、AWS IoT Greengrass は Secrets Manager からシークレットの値を取り出し、暗号化されたローカルコピーを Core に作成します。

  1. AWS IoT Greengrass Core が実行されていることを確認します。必要に応じて、Raspberry Pi のターミナルで以下のコマンドを実行します。

    1. デーモンが実行中であるかどうかを確認するには

      ps aux | grep -E 'greengrass.*daemon'

      出力に root/greengrass/ggc/packages/ggc-version/bin/daemon エントリが含まれる場合、デーモンは実行されています。

      注記

      パスのバージョンは、コアデバイスにインストールされている AWS IoT Greengrass Core ソフトウェアのバージョンによって異なります。

    2. 次のようにしてデーモンを開始します。

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. グループ設定ページで、[Deploy] (デプロイ) を選択します。

    1. [Lambda functions] (Lambda 関数) タブの [System Lambda functions] (システム Lambda 関数) セクションで、[IP detector] (IP ディテクター)、[Edit] (編集) の順に選択します。

    2. [Edit IP detector settings] (IPディテクタ設定の編集) のダイアログボックスで、[Automatically detect and override MQTT broker endpoints] (MQTT ブローカーのエンドポイントを自動的に検出して上書きする)を選択します。

    3. [Save (保存)] を選択します。

      これにより、デバイスは、IP アドレス、DNS、ポート番号など、コアの接続情報を自動的に取得できます。自動検出が推奨されますが、AWS IoT Greengrass は手動で指定されたエンドポイントもサポートしています。グループが初めてデプロイされたときにのみ、検出方法の確認が求められます。

      注記

      プロンプトが表示されたら、Greengrass サービスロールの作成権限を付与し、そのロールを現在の AWS リージョン の AWS アカウント に関連付けます。このロールを付与することで、AWS IoT Greengrass は AWS サービスのリソースにアクセスできます。

      [Deployments] ページでは、デプロイのタイムスタンプ、バージョン ID、ステータスが表示されます。完了すると、デプロイのステータスが [Completed] (完了) と表示されます。

      トラブルシューティングヘルプについては、AWS IoT Greengrass のトラブルシューティング を参照してください。

Lambda 関数をテストする

  1. AWS IoT コンソールのホームページで、[Test] (テスト) を選択します。

  2. [Subscribe to topic] (トピックへのサブスクライブ) で、以下の値を使用し、[Subscribe] (サブスクリプション) を選択します。

    プロパティ

    トピックのサブスクリプション

    シークレット/出力

    MQTT ペイロード表示

    文字列としてペイロードを表示

  3. [Publish to topic] (トピックに発行) で、以下の値を使用し、[Publish] (発行) を選択して関数を呼び出します。

    プロパティ

    トピック

    シークレット/入力

    Message

    デフォルトのメッセージを保持します。メッセージの発行では Lambda 関数を呼び出しますが、このチュートリアルの関数はメッセージ本文を処理しません。

    成功した場合、関数は成功のメッセージを発行します。

以下も参照してください。