ハードウェアセキュリティ統合 - AWS IoT Greengrass

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

ハードウェアセキュリティ統合

注記

この機能は、Greengrass nucleus コンポーネントの v2.5.3 以降に利用できます。AWS IoT Greengrass は、現在 Windows コアデバイスにこの機能をサポートしていません。

AWS IoT Greengrass Core ソフトウェアは、PKCS#11 インターフェイスを介してハードウェアセキュリティモジュール (HSM) を使用するように設定できます。この機能を使用すると、デバイスのプライベートキーと証明書を安全に保存して、ソフトウェアで公開または複製されないようにできます。プライベートキーと証明書は、HSM やトラステッドプラットフォームモジュール (TPM) などのハードウェアモジュールに保存できます。

AWS IoT Greengrass Core ソフトウェアは、プライベートキーと X.509 証明書を使用して、AWS IoT や AWS IoT Greengrass のサービスへの接続を認証します。シークレットマネージャーコンポーネントは、このプライベートキーを使用することで、Greengrass コアデバイスにデプロイするシークレットの暗号化と復号化を安全に行うことができます。HSM を使用するようにコアデバイスを設定する場合、これらのコンポーネントは HSM に保存したプライベートキーと証明書を使用します。

Moquette MQTT ブローカーコンポーネントも、ローカルの MQTT サーバー証明書のプライベートキーを格納します。このコンポーネントは、プライベートキーをデバイスのファイルシステム上のコンポーネントのワークフォルダに保存します。現在 AWS IoT Greengrass では、このプライベートキーまたは証明書を HSM に格納することをサポートしていません。

ヒント

この機能をサポートするデバイスを検索するには、「AWS Partner Device Catalog」を参照してください。

要件

Greengrass コアデバイスで HSM を使用するには、以下の要件を満たしている必要があります。

  • Greengrass nucleus v2.5.3 以降がコアデバイスにインストールされている。コアデバイスに AWS IoT Greengrass Core ソフトウェアをインストールする際に、互換性のあるバージョンを選択できます。

  • PKCS#11 プロバイダコンポーネントがコアデバイスにインストールされている。コアデバイスに AWS IoT Greengrass Core ソフトウェアをインストールする際に、このコンポーネントをダウンロードしてインストールできます。

  • PKCS#1 v1.5 署名スキームと RSA-2048 キーサイズ (またはそれ以上の規模) または ECC キーを備えた RSA キーをサポートするハードウェアセキュリティモジュール。

    注記

    ECC キーを備えたハードウェアセキュリティモジュールを使用するには、v2.5.6 以降の Greengrass nucleus を使用する必要があります。

    ハードウェアセキュリティモジュールとシークレットマネージャーを使用するには、RSA キーを備えたハードウェアセキュリティモジュールを使用する必要があります。

  • PKCS#11 関数を呼び出すため、AWS IoT Greengrass Core ソフトウェアがランタイム時 (libdl を使用) にロードできる PKCS#11 プロバイダライブラリ。PKCS#11 プロバイダライブラリは、次の PKCS#11 API オペレーションを実装する必要があります。

    • C_Initialize

    • C_Finalize

    • C_GetSlotList

    • C_GetSlotInfo

    • C_GetTokenInfo

    • C_OpenSession

    • C_GetSessionInfo

    • C_CloseSession

    • C_Login

    • C_Logout

    • C_GetAttributeValue

    • C_FindObjectsInit

    • C_FindObjects

    • C_FindObjectsFinal

    • C_DecryptInit

    • C_Decrypt

    • C_DecryptUpdate

    • C_DecryptFinal

    • C_SignInit

    • C_Sign

    • C_SignUpdate

    • C_SignFinal

    • C_GetMechanismList

    • C_GetMechanismInfo

    • C_GetInfo

    • C_GetFunctionList

  • ハードウェアモジュールは、「PKCS#11 仕様」で定義されているスロットラベルで解決できる必要があります。

  • プライベートキーと証明書は HSM の同じスロットに保存する必要があり、HSM がオブジェクト ID をサポートしている場合、同じオブジェクトラベルとオブジェクト ID を使用する必要があります。

  • 証明書とプライベートキーがオブジェクトラベルで解決できる必要があります。

  • プライベートキーには、次の許可が必要です。

    • sign

    • decrypt

  • (オプション) シークレットマネージャーコンポーネントを使用する場合、バージョン 2.1.0 以降を使用する必要があります。また、プライベートキーには次の許可が必要です。

    • unwrap

    • wrap

ハードウェアセキュリティのベストプラクティス

Greengrass コアデバイスでハードウェアセキュリティを設定する場合は、以下のベストプラクティスを考慮してください。

  • 内部ハードウェア乱数ジェネレーターを使用して、HSM に直接プライベートキーを生成します。この方法では、プライベートキーが HSM 内に残るため、他の場所で生成したプライベートキーをインポートするよりも安全です。

  • プライベートキーを変更不可およびエクスポートを禁止するように設定します。

  • HSM ハードウェアベンダーが推奨するプロビジョニングツールを使用して、ハードウェアで保護されたプライベートキーにより証明書署名リクエスト (CSR) を生成します。次に、AWS IoT コンソールを使用してクライアント証明書を生成します。

注記

HSM でプライベートキーを生成する場合は、キーをローテーションするセキュリティ上のベストプラクティスは適用されません。

ハードウェアセキュリティを備えた AWS IoT Greengrass Core ソフトウェアのインストール

AWS IoT Greengrass Core ソフトウェアをインストールする場合、HSM で生成したプライベートキーを使用するように設定できます。このアプローチは、HSM でプライベートキーを生成するためのセキュリティ上のベストプラクティスに従うため、プライベートキーは HSM 内に残ります。

ハードウェアセキュリティを備えた AWS IoT Greengrass Core ソフトウェアをインストールするには、次の操作を行います。

  1. HSM でプライベートキーを生成します。

  2. プライベートキーから証明書署名リクエスト (CSR) を作成します。

  3. CSR から証明書を作成します。AWS IoT または、別のルート認証機関 (CA) によって署名された証明書を作成できます。別のルート CA の使用方法の詳細については、「AWS IoT Core デベロッパーガイド」の「独自のクライアント証明書を作成する」を参照してください。

  4. AWS IoT の証明書をダウンロードして、HSM にインポートします。

  5. HSM で PKCS#11 プロバイダコンポーネントとプライベートキーおよび証明書を使用するように指定する設定ファイルから AWS IoT Greengrass Core ソフトウェアをインストールします。

ハードウェアセキュリティを備えたAWS IoT Greengrass Core ソフトウェアをインストールするには、次のインストールオプションのいずれかを選択します。

現在 AWS IoT Greengrass では、自動リソースプロビジョニングによるインストールまたはAWS IoT フリートプロビジョニングを行う際の、ハードウェアセキュリティを備えた AWS IoT Greengrass Core ソフトウェアのインストールはサポートされていません。

既存のコアデバイスでのハードウェアセキュリティの設定

コアデバイスのプライベートキーと証明書を HSM にインポートして、ハードウェアセキュリティを設定できます。

考慮事項
  • コアデバイスのファイルシステムへのルートアクセス権が必要です。

  • この手順では、AWS IoT Greengrass Core ソフトウェアをシャットダウンし、ハードウェアセキュリティの設定中はコアデバイスがオフラインになり、利用できなくなります。

既存のコアデバイスでハードウェアセキュリティを設定するには、次の手順を実行します。

  1. HSM を初期化します。

  2. PKCS#11 プロバイダコンポーネントをコアデバイスにデプロイします。

  3. AWS IoT Greengrass Core ソフトウェアを停止します。

  4. コアデバイスのプライベートキーと証明書を HSM にインポートします。

  5. AWS IoT Greengrass Core ソフトウェアの設定ファイルを、HSM でプライベートキーと証明書を使用するように更新します。

  6. AWS IoT Greengrass Core ソフトウェアを起動します。

ステップ 1: ハードウェアセキュリティモジュールを初期化する

次の手順を実行して、コアデバイスで HSM を初期化します。

ハードウェアセキュリティモジュールを初期化するには
  • HSM で PKCS#11 トークンを初期化し、トークンのスロット ID とユーザー PIN を保存します。トークンの初期化方法については、HSM のドキュメントを参照してください。スロット ID とユーザー PIN は、後で PKCS#11 プロバイダーコンポーネントをデプロイして設定するときに使用します。

ステップ 2: PKCS#11 プロバイダコンポーネントをデプロイする

PKCS#11 プロバイダコンポーネントをデプロイして設定するには、以下の操作を行います。コンポーネントは 1 つ以上のコアデバイスに展開できます。

  1. AWS IoT Greengrass コンソールのナビゲーションメニューで、[Components] (コンポーネント) を選択します。

  2. [Components] (コンポーネント) ページで、[Public components] (公開コンポーネント) タブを選択し、次に aws.greengrass.crypto.Pkcs11Provider を選択します。

  3. aws.greengrass.crypto.Pkcs11Provider ページで、[Deploy] (デプロイ) を選択します。

  4. [Add to deployment] (デプロイに追加) で、改訂する既存のデプロイを選択するか、新しいデプロイを作成することを選択して、[Next] (次へ) を選択します。

  5. 新しいデプロイの作成を選択した場合、デプロイのターゲットコアデバイスまたはモノグループを選択します。リポジトリの [Specify target] (ターゲットを指定) ページの、[Deployment target] (ターゲットのデプロイ) で、コアデバイスまたはモノグループを選択し、[Next] (次へ) を選択します。

  6. [Select components] (コンポーネントを選択) ページの[Public components] (パブリックコンポーネント) から、[aws.greengrass.crypto.Pkcs11Provider] を選択してから、[Next] (次へ) をクリックします。

  7. [Configure components] (コンポーネントを設定) ページで、aws.greengrass.crypto.Pkcs11Provider を選択したら、次の操作を行います。

    1. [Configure component] (コンポーネントを設定) を選択します。

    2. [aws.greengrass.crypto.Pkcs11Provider の設定] モーダルの [設定の更新] の下にある [マージする設定] に、次の設定更新を入力します。ターゲットコアデバイスの値を使用して、次の設定パラメータを更新します。PKCS#11 トークンを初期化したスロット ID とユーザー PIN を指定します。プライベートキーと証明書は、後で HSM のこのスロットにインポートします。

      name

      PKCS#11 設定の名前。

      library

      AWS IoT Greengrass Core ソフトウェアが libdl でロードできる PKCS#11 実装のライブラリへの絶対ファイルパス

      slot

      プライベートキーとデバイス証明書を含むスロットの ID。この値は、スロットインデックスやスロットラベルとは異なります。

      userPin

      スロットへのアクセスに使用するユーザー PIN。

      { "name": "softhsm_pkcs11", "library": "/usr/lib/softhsm/libsofthsm2.so", "slot": 1, "userPin": "1234" }
    3. [Confirm] (確認) を選択してモーダルを閉じ、次に [Next] (次) を選択します。

  8. [Configure advanced settings] (詳細設定) ページはデフォルト設定のままにし、[Next] (次へ) を選択します。

  9. [Review] ページで、[デプロイ] を選択します。

    デプロイに最大 1 分かかる場合があります。

PKCS#11 プロバイダコンポーネントをデプロイするには、components オブジェクトの aws.greengrass.crypto.Pkcs11Provider を含むデプロイドキュメントを作成し、コンポーネントのコンフィギュレーション更新を指定します。デプロイの作成 の指示に従って、新しいデプロイを作成または既存のデプロイを改訂します。

次の部分デプロイドキュメントの例では、PKCS#11 プロバイダコンポーネントのデプロイと設定を行うよう指定しています。ターゲットコアデバイスの値を使用して、次の設定パラメータを更新します。後でプライベートキーと証明書を HSM にインポートする際に使用するスロット ID とユーザー PIN を保存します。

name

PKCS#11 設定の名前。

library

AWS IoT Greengrass Core ソフトウェアが libdl でロードできる PKCS#11 実装のライブラリへの絶対ファイルパス

slot

プライベートキーとデバイス証明書を含むスロットの ID。この値は、スロットインデックスやスロットラベルとは異なります。

userPin

スロットへのアクセスに使用するユーザー PIN。

{ "name": "softhsm_pkcs11", "library": "/usr/lib/softhsm/libsofthsm2.so", "slot": 1, "userPin": "1234" }
{ ..., "components": { ..., "aws.greengrass.crypto.Pkcs11Provider": { "componentVersion": "2.0.0", "configurationUpdate": { "merge": "{\"name\":\"softhsm_pkcs11\",\"library\":\"/usr/lib/softhsm/libsofthsm2.so\",\"slot\":1,\"userPin\":\"1234\"}" } } } }

デプロイには数分かかる場合があります。AWS IoT Greengrass サービスを使用するとデプロイのステータスを確認できます。PKCS#11 プロバイダコンポーネントが正常にデプロイされたことを検証するには、AWS IoT Greengrass Core ソフトウェアログを確認します。詳細については、次を参照してください。

デプロイに失敗した場合は、各コアデバイスでデプロイのトラブルシューティングを行います。詳細については、「トラブルシューティング AWS IoT Greengrass V2」を参照してください。

ステップ 3: コアデバイスの設定を更新する

AWS IoT Greengrass Core ソフトウェアでは、デバイスの動作を指定するコンフィギュレーションファイルを使用します。この設定ファイルには、デバイスが AWS クラウド に接続するために使用するプライベートキーおよび証明書の所在が含まれています。次の手順を実行して、コアデバイスのプライベートキーと証明書を HSM にインポートし、HSM を使用するように設定ファイルを更新します。

ハードウェアセキュリティを使用するようにコアデバイスの設定を更新するには
  1. AWS IoT Greengrass Core ソフトウェアを停止します。例えば systemd で AWS IoT Greengrass Core ソフトウェアをシステムサービスとして設定 した場合は、次のコマンドを実行してソフトウェアを停止できます。

    sudo systemctl stop greengrass.service
  2. コアデバイスのプライベートキーと証明書ファイルを検索します。

    • 自動プロビジョニングまたはフリートプロビジョニングで AWS IoT Greengrass Core ソフトウェアをインストールした場合は、プライベートキーは /greengrass/v2/privKey.key にあり、証明書は /greengrass/v2/thingCert.crt にあります。

    • 手動プロビジョニングで AWS IoT Greengrass Core ソフトウェアをインストールした場合、プライベートキーは、デフォルトで /greengrass/v2/private.pem.key にあり、証明書はデフォルトで /greengrass/v2/device.pem.crt にあります。

    /greengrass/v2/config/effectiveConfig.yamlsystem.privateKeyPathsystem.certificateFilePath のプロパティで、これらのファイルの場所を確認します。

  3. プライベートキーと証明書を HSM にインポートします。プライベートキーと証明書をインポートする方法については、HSM のドキュメントを参照してください。PKCS#11 トークンを初期化したスロット ID とユーザー PIN を使用して、プライベートキーと証明書をインポートします。プライベートキーと証明書には、同じオブジェクトラベルとオブジェクト ID を使用する必要があります。各ファイルをインポートしたときに指定したオブジェクトラベルを保存します。HSM でプライベートキーと証明書を使用するように、後で AWS IoT Greengrass Core ソフトウェアの設定を更新する際にこのラベルを使用します。

  4. AWS IoT Greengrass Core を HSM でプライベートキーと証明書を使用するように更新します。設定を更新するには、AWS IoT Greengrass Core 設定ファイルを修正し、更新した設定ファイルを用いて AWS IoT Greengrass Core ソフトウェアを実行して、新しい設定を適用します。

    以下の操作を実行します。

    1. AWS IoT Greengrass Core 設定ファイルのバックアップを作成します。ハードウェアセキュリティの設定時に問題が発生した場合は、このバックアップを使用してコアデバイスを復元できます。

      sudo cp /greengrass/v2/config/effectiveConfig.yaml ~/ggc-config-backup.yaml
    2. AWS IoT Greengrass Core 設定ファイルをテキストエディタで開きます。例えば、次のコマンドを実行して GNU nano を使用してファイルを編集できます。を Greengrass ルートフォルダへのパス/greengrass/v2に置き換えます。

      sudo nano /greengrass/v2/config/effectiveConfig.yaml
    3. system.privateKeyPath の値を HSM のプライベートキーの PKCS#11 URI に置き換えます。iotdeviceKey を以前にプライベートキーと証明書をインポートしたオブジェクトラベルに置き換えます。

      pkcs11:object=iotdevicekey;type=private
    4. system.certificateFilePath の値を HSM の証明書の PKCS#11 URI に置き換えます。iotdeviceKey を以前にプライベートキーと証明書をインポートしたオブジェクトラベルに置き換えます。

      pkcs11:object=iotdevicekey;type=cert

    これらの手順を完了すると、AWS IoT Greengrass Core 設定ファイルの system のプロパティは次の例のようになります。

    system: certificateFilePath: "pkcs11:object=iotdevicekey;type=cert" privateKeyPath: "pkcs11:object=iotdevicekey;type=private" rootCaPath: "/greengrass/v2/rootCA.pem" rootpath: "/greengrass/v2" thingName: "MyGreengrassCore"
  5. 更新済みの effectiveConfig.yaml ファイルの設定を適用します。Greengrass.jar--init-config パラメータで実行して、effectiveConfig.yaml の設定を適用します。を Greengrass ルートフォルダへのパス/greengrass/v2に置き換えます。

    sudo java -Droot="/greengrass/v2" \ -jar /greengrass/v2/alts/current/distro/lib/Greengrass.jar \ --start false \ --init-config /greengrass/v2/config/effectiveConfig.yaml
  6. AWS IoT Greengrass Core ソフトウェアを起動します。systemd で AWS IoT Greengrass Core ソフトウェアをシステムサービスとして設定した場合は、次のコマンドを実行してソフトウェアを起動できます。

    sudo systemctl start greengrass.service

    詳細については、「AWS IoT Greengrass Core ソフトウェアを実行する」を参照してください。

  7. AWS IoT Greengrass Core ソフトウェアログで、ソフトウェアが起動し、AWS クラウド と接続されることを確認します。AWS IoT Greengrass Core ソフトウェアは、プライベートキーと証明書を使用して、AWS IoT と AWS IoT Greengrass のサービスに接続します。

    sudo tail -f /greengrass/v2/logs/greengrass.log

    次の情報レベルのログメッセージは、AWS IoT Greengrass Core ソフトウェアが AWS IoT と AWS IoT Greengrass のサービスに正常に接続されていることを示します。

    2021-12-06T22:47:53.702Z [INFO] (Thread-3) com.aws.greengrass.mqttclient.AwsIotMqttClient: Successfully connected to AWS IoT Core. {clientId=MyGreengrassCore5, sessionPresent=false}
  8. (オプション) AWS IoT Greengrass Core ソフトウェアが HSM のプライベートキーと証明書で動作することを確認したら、デバイスのファイルシステムからプライベートキーと証明書ファイルを削除します。次のコマンドを実行し、ファイルパスをプライベートキーおよび証明書ファイルへのパスに置き換えます。

    sudo rm /greengrass/v2/privKey.key sudo rm /greengrass/v2/thingCert.crt

PKCS#11 をサポートしないハードウェア

PKCS#11 ライブラリは通常、ハードウェアベンダーによって提供されるか、オープンソースです。例えば、標準準拠のハードウェア (TPM1.2 など) では、既存のオープンソースソフトウェアを使用できます。ただし、ハードウェアに対応する PKCS#11 ライブラリ実装がない場合、またはカスタム PKCS#11 プロバイダを作成する場合、統合については Amazon Web Service エンタープライズサポート担当者までお問い合わせください。

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