モジュール 7: ハードウェアセキュリティ統合のシミュレーション - 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ことを強くお勧めします。これにより、重要な新機能が追加され、追加のプラットフォームのサポートが追加されます

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

モジュール 7: ハードウェアセキュリティ統合のシミュレーション

この機能は AWS IoT Greengrass Core v1.7 以降で使用できます。

この高度なモジュールでは、Greengrass Core 用にシミュレートされたハードウェアセキュリティモジュール (HSM) を設定する方法を示します。この設定で使用している SoftHSM は、PKCS#11 アプリケーションプログラミングインターフェイス (API) を使用する純粋なソフトウェア実装です。このモジュールの目的は、PKCS#11 API のソフトウェアのみの実装について学習と初期テストを行う環境を設定できるようにすることです。このモジュールは、学習と初期テストの目的でのみ提供しています。

この設定を使用して、PKCS#11 互換のサービスによるプライベートキーの保存を試すことができます。ソフトウェアのみの実装の詳細については、「SoftHSM」を参照してください。一般的な要件を含め、AWS IoT Greengrass Core でのハードウェアセキュリティの統合の詳細については、「ハードウェアセキュリティ統合」を参照してください。

重要

このモジュールは、実験の目的でのみ提供しています。SoftHSM は本番稼働用環境で使用しないことを強くお勧めします。使用した場合、セキュリティが強化されたような錯覚を与えますが、実際の設定におけるセキュリティ上の利点はありません。SoftHSM でのキーの保存は、Greengrass 環境での他のどのシークレット保存方法よりも安全ではありません。

このモジュールの目的は、実際のハードウェアベース HSM の今後の使用に備えて、PKCS#11 の仕様について学習し、ソフトウェアの初期テストを実行できるようにすることです。

ハードウェア実装は、本番稼働用環境で使用する前に別個に完全にテストする必要があります。SoftHSM で提供されている PKCS#11 実装とハードウェアベースの実装は異なる場合があるためです。

サポートされているハードウェアセキュリティモジュールについて研修の支援が必要な場合は、AWS エンタープライズサポート担当者までお問い合わせください。

開始する前に、Greengrass Device Setup スクリプトを実行するか、入門チュートリアルのモジュール 1モジュール 2 を完了していることを確認します。このモジュールでは、コアが既にプロビジョニングされ AWS と通信していることを前提にしています。このモジュールは完了までに約 30 分かかります。

SoftHSM ソフトウェアをインストールする

このステップでは、SoftHSM をインストールし、併せて、SoftHSM インスタンスの管理に使用される pkcs11 ツールもインストールします。

  • AWS IoT Greengrass Core デバイスのターミナルで、以下のコマンドを実行します。

    sudo apt-get install softhsm2 libsofthsm2-dev pkcs11-dump

    これらのパッケージの詳細については、「softhsm2 のインストール」、「libsofthsm2-dev のインストール」、「pkcs11-dump のインストール」を参照してください。

    注記

    このコマンドをシステムで使用するときに問題が発生した場合は、GitHub の「SoftHSM バージョン 2」を参照してください。このサイトでは、ソースからビルドする方法を含め、より多くのインストール情報が提供されています。

SoftHSM を設定する

このステップでは、SoftHSM を設定します。

  1. root ユーザーに切り替えます。

    sudo su
  2. 手動のページを使って、システム全体の softhsm2.conf の場所を見つけます。一般的な場所は /etc/softhsm/softhsm2.conf ですが、システムによって異なる場合があります。

    man softhsm2.conf
  3. システム全体の場所に softhsm2 構成ファイル用のディレクトリを作成します。この例では、場所が /etc/softhsm/softhsm2.conf であることを前提としています。

    mkdir -p /etc/softhsm
  4. トークンディレクトリを /greengrass ディレクトリに作成します。

    注記

    このステップを省略すると、softhsm2-util は ERROR: Could not initialize the library と報告します。

    mkdir -p /greengrass/softhsm2/tokens
  5. トークンディレクトリを設定します。

    echo "directories.tokendir = /greengrass/softhsm2/tokens" > /etc/softhsm/softhsm2.conf
  6. ファイルベースのバックエンドを設定します。

    echo "objectstore.backend = file" >> /etc/softhsm/softhsm2.conf
注記

これらの設定は、実験の目的でのみ提供しています。すべての設定オプションを確認するには、設定ファイルのマニュアルページを読みます。

man softhsm2.conf

プライベートキーを SoftHSM にインポートする

このステップでは、SoftHSM トークンを初期化し、プライベートキー形式を変換してから、プライベートキーをインポートします。

  1. SoftHSM トークンを初期化します。

    softhsm2-util --init-token --slot 0 --label greengrass --so-pin 12345 --pin 1234
    注記

    プロンプトが表示されたら、12345 の SO ピン、1234 のユーザーピンを入力します。AWS IoT Greengrass は SO (スーパーバイザ) ピンを使用しないため、任意の値を使用できます。

    エラー CKR_SLOT_ID_INVALID: Slot 0 does not exist が発生した場合、代わりに次のコマンドを試してください。

    softhsm2-util --init-token --free --label greengrass --so-pin 12345 --pin 1234
  2. プライベートキーを、SoftHSM インポートツールで使用できる形式に変換します。このチュートリアルでは、モジュール 2 の入門チュートリアルで取り上げた [Default Group creation] (デフォルトグループの作成) オプションを使って取得したプライベートキーを変換します。

    openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in hash.private.key -out hash.private.pem
  3. プライベートキーを SoftHSM にインポートする ご使用の softhsm2-util のバージョンに応じて、以下のコマンドを 1 つだけ実行します。

    Raspbian softhsm2-util v2.2.0 構文
    softhsm2-util --import hash.private.pem --token greengrass --label iotkey --id 0000 --pin 12340
    Ubuntu softhsm2-util v2.0.0 構文
    softhsm2-util --import hash.private.pem --slot 0 --label iotkey --id 0000 --pin 1234

    このコマンドは、スロットを 0 と識別し、キーラベルを iotkey と定義します。これらの値は、次のセクションで使用します。

プライベートキーをインポートした後、オプションで /greengrass/certs ディレクトリから削除できます。ルート CA とデバイス証明書は必ずこのディレクトリに保存してください。

SoftHSM を使用するように Greengrass Core を設定する

このステップでは、SoftHSM を使用するように Greengrass Core 設定ファイルを変更します。

  1. システム上の SoftHSM プロバイダーライブラリ (libsofthsm2.so) へのパスを見つけます。

    1. インストールされているライブラリのパッケージのリストを取得します。

      sudo dpkg -L libsofthsm2

      libsofthsm2.so ファイルは softhsm ディレクトリにあります。

    2. このファイルへの完全パス (/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so など) をコピーします。この値は後で使用します。

  2. Greengrass デーモンを停止します。

    cd /greengrass/ggc/core/ sudo ./greengrassd stop
  3. Greengrass 設定ファイルを開きます。これは、/greengrass/config ディレクトリにある config.json ファイルです。

    注記

    この手順の例は、config.json ファイルが、モジュール 2 の入門チュートリアルで取り上げた [Default Group creation] (デフォルトグループの作成) オプションを使って取得した形式を使用している前提で説明しています。

  4. crypto.principals オブジェクトに、以下の MQTT サーバー証明書オブジェクトを挿入します。有効な JSON ファイルを作成するために必要な場所にカンマを追加します。

    "MQTTServerCertificate": { "privateKeyPath": "path-to-private-key" }
  5. crypto オブジェクトに、次の PKCS11 オブジェクトを挿入します。有効な JSON ファイルを作成するために必要な場所にカンマを追加します。

    "PKCS11": { "P11Provider": "/path-to-pkcs11-provider-so", "slotLabel": "crypto-token-name", "slotUserPin": "crypto-token-user-pin" }

    ファイルは以下のようになります。

    { "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "hash.cert.pem", "keyPath" : "hash.private.key", "thingArn" : "arn:partition:iot:region:account-id:thing/core-thing-name", "iotHost" : "host-prefix.iot.region.amazonaws.com", "ggHost" : "greengrass.iot.region.amazonaws.com", "keepAlive" : 600 }, "runtime" : { "cgroup" : { "useSystemd" : "yes" } }, "managedRespawn" : false, "crypto": { "PKCS11": { "P11Provider": "/path-to-pkcs11-provider-so", "slotLabel": "crypto-token-name", "slotUserPin": "crypto-token-user-pin" }, "principals" : { "MQTTServerCertificate": { "privateKeyPath": "path-to-private-key" }, "IoTCertificate" : { "privateKeyPath" : "file:///greengrass/certs/hash.private.key", "certificatePath" : "file:///greengrass/certs/hash.cert.pem" }, "SecretsManager" : { "privateKeyPath" : "file:///greengrass/certs/hash.private.key" } }, "caPath" : "file:///greengrass/certs/root.ca.pem" } }
    注記

    ハードウェアセキュリティで無線 (OTA) 更新を使用するには、PKCS11 オブジェクトに OpenSSLEngine プロパティも含める必要があります。詳細については、「無線通信経由更新のサポートを設定する」を参照してください。

  6. crypto オブジェクトを編集します。

    1. PKCS11 オブジェクトを設定します。

      • [P11Provider] に libsofthsm2.so への完全パスを入力します。

      • [slotLabel] に「greengrass」と入力します。

      • [slotUserPin] に「1234」と入力します。

    2. principals オブジェクトでプライベートキーへのパスを設定します。certificatePath プロパティは編集しないでください。

      • privateKeyPath プロパティに、以下の RFC 7512 PKCS#11 パス (キーのラベル) を入力します。IoTCertificateSecretsManagerMQTTServerCertificate のプリンシパルに対してこの操作を行います。

        pkcs11:object=iotkey;type=private
    3. crypto オブジェクトを確認します。これは次のように表示されます。

      "crypto": { "PKCS11": { "P11Provider": "/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so", "slotLabel": "greengrass", "slotUserPin": "1234" }, "principals": { "MQTTServerCertificate": { "privateKeyPath": "pkcs11:object=iotkey;type=private" }, "SecretsManager": { "privateKeyPath": "pkcs11:object=iotkey;type=private" }, "IoTCertificate": { "certificatePath": "file://certs/core.crt", "privateKeyPath": "pkcs11:object=iotkey;type=private" } }, "caPath": "file://certs/root.ca.pem" }
  7. coreThing オブジェクトから caPathcertPathkeyPath 値を削除します これは次のように表示されます。

    "coreThing" : { "thingArn" : "arn:partition:iot:region:account-id:thing/core-thing-name", "iotHost" : "host-prefix-ats.iot.region.amazonaws.com", "ggHost" : "greengrass-ats.iot.region.amazonaws.com", "keepAlive" : 600 }
注記

このチュートリアルでは、すべてのプリンシパルに対して同じプライベートキーを指定します。ローカル MQTT サーバーのプライベートキーの選択の詳細については、「パフォーマンス」を参照してください。ローカルシークレットマネージャーの詳細については、「AWS IoT Greengrass Core にシークレットをデプロイする」を参照してください。

設定をテストする

  • Greengrass デーモンを開始します。

    cd /greengrass/ggc/core/ sudo ./greengrassd start

    デーモンが正常に起動すると、Core が正しく設定されます。

    これで、PKCS#11 の仕様について学習し、SoftHSM 実装で提供される PKCS#11 API で初期テストを行う準備ができました。

    重要

    繰り返しますが、このモジュールは学習およびテスト専用である点を忘れないでください。このモジュールにより、実際に Greengrass 環境のセキュリティ体制は強化されません。

    代わりに、このモジュールの目的は、実際のハードウェアベース HSM の今後の使用に備えて学習とテストを開始できるようにすることです。その時点で、ソフトウェアを本番稼働に使用する前にハードウェアベース HSM に対して個別に完全にテストする必要があります。これは、SoftHSM で提供されている PKCS#11 実装とハードウェアベース実装には違いがあるためです。

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