

サポート終了通知: 2026 年 10 月 7 日、 AWS はサポートを終了します AWS IoT Greengrass Version 1。2026 年 10 月 7 日以降、 AWS IoT Greengrass V1 リソースにアクセスできなくなります。詳細については、[「 からの移行 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)」を参照してください。

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

# モジュール 7: ハードウェアセキュリティ統合のシミュレーション
<a name="console-mod7"></a>

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

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

この設定を使用して、PKCS\$111 互換のサービスによるプライベートキーの保存を試すことができます。ソフトウェアのみの実装の詳細については、「[SoftHSM](https://www.opendnssec.org/softhsm/)」を参照してください。一般的な要件など、 AWS IoT Greengrass コアでのハードウェアセキュリティの統合の詳細については、「」を参照してください[ハードウェアセキュリティ統合](hardware-security.md)。

**重要**  
このモジュールは、実験の目的でのみ提供しています。SoftHSM は本番稼働用環境で使用しないことを強くお勧めします。使用した場合、セキュリティが強化されたような錯覚を与えますが、実際の設定におけるセキュリティ上の利点はありません。SoftHSM でのキーの保存は、Greengrass 環境での他のどのシークレット保存方法よりも安全ではありません。  
このモジュールの目的は、実際のハードウェアベース HSM の今後の使用に備えて、PKCS\$111 の仕様について学習し、ソフトウェアの初期テストを実行できるようにすることです。  
ハードウェア実装は、本番稼働用環境で使用する前に別個に完全にテストする必要があります。SoftHSM で提供されている PKCS\$111 実装とハードウェアベースの実装は異なる場合があるためです。

[サポートされているハードウェアセキュリティモジュールの](hardware-security.md#hardware-security-reqs)オンボーディングについてサポートが必要な場合は、 AWS エンタープライズサポート担当者にお問い合わせください。

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

## SoftHSM ソフトウェアをインストールする
<a name="softhsm-install"></a>

このステップでは、SoftHSM をインストールし、併せて、SoftHSM インスタンスの管理に使用される pkcs11 ツールもインストールします。
+  AWS IoT Greengrass コアデバイスのターミナルで、次のコマンドを実行します。

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

  これらのパッケージの詳細については、「[softhsm2 のインストール](https://www.howtoinstall.co/en/ubuntu/xenial/softhsm2)」、「[libsofthsm2-dev のインストール](https://www.howtoinstall.co/en/ubuntu/xenial/libsofthsm2-dev)」、「[pkcs11-dump のインストール](https://www.howtoinstall.co/en/ubuntu/xenial/pkcs11-dump)」を参照してください。
**注記**  
このコマンドをシステムで使用するときに問題が発生した場合は、GitHub の「[SoftHSM バージョン 2](https://github.com/opendnssec/SoftHSMv2)」を参照してください。このサイトでは、ソースからビルドする方法を含め、より多くのインストール情報が提供されています。

## SoftHSM を設定する
<a name="softhsm-config"></a>

このステップでは、[SoftHSM を設定](https://github.com/opendnssec/SoftHSMv2#configure-1)します。

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

   ```
   sudo su
   ```

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

   ```
   man softhsm2.conf
   ```

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

   ```
   mkdir -p /etc/softhsm
   ```

1. トークンディレクトリを `/greengrass` ディレクトリに作成します。
**注記**  
このステップを省略すると、softhsm2-util は `ERROR: Could not initialize the library` と報告します。

   ```
   mkdir -p /greengrass/softhsm2/tokens
   ```

1. トークンディレクトリを設定します。

   ```
   echo "directories.tokendir = /greengrass/softhsm2/tokens" > /etc/softhsm/softhsm2.conf
   ```

1. ファイルベースのバックエンドを設定します。

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

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

```
man softhsm2.conf
```

## プライベートキーを SoftHSM にインポートする
<a name="softhsm-import-key"></a>

このステップでは、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
   ```

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

   ```
   openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in hash.private.key -out hash.private.pem
   ```

1. プライベートキーを 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 を設定する
<a name="softhsm-config-core"></a>

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

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

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

      ```
      sudo dpkg -L libsofthsm2
      ```

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

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

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

   ```
   cd /greengrass/ggc/core/
   sudo ./greengrassd stop
   ```

1. Greengrass 設定ファイルを開きます。これは、`/greengrass/config` ディレクトリにある [`config.json`](gg-core.md#config-json) ファイルです。
**注記**  
この手順の例は、`config.json` ファイルが、[モジュール 2](module2.md) の入門チュートリアルで取り上げた **[Default Group creation]** (デフォルトグループの作成) オプションを使って取得した形式を使用している前提で説明しています。

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

   ```
     "MQTTServerCertificate": {
       "privateKeyPath": "path-to-private-key"
     }
   ```

1. `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` プロパティも含める必要があります。詳細については、「[無線通信経由更新のサポートを設定する](hardware-security.md#hardware-security-ota-updates)」を参照してください。

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

   1. `PKCS11` オブジェクトを設定します。
      + [`P11Provider`] に `libsofthsm2.so` への完全パスを入力します。
      + `slotLabel` に「`greengrass`」と入力します。
      + `slotUserPin` に「`1234`」と入力します。

   1. `principals` オブジェクトでプライベートキーへのパスを設定します。`certificatePath` プロパティは編集しないでください。
      + `privateKeyPath` プロパティに、以下の RFC 7512 PKCS\$111 パス (キーのラベル) を入力します。`IoTCertificate`、`SecretsManager`、`MQTTServerCertificate` のプリンシパルに対してこの操作を行います。

        ```
        pkcs11:object=iotkey;type=private
        ```

   1. `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"
        }
      ```

1. `coreThing` オブジェクトから `caPath`、`certPath`、`keyPath` 値を削除します これは次のように表示されます。

   ```
   "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 サーバーのプライベートキーの選択の詳細については、「[パフォーマンス](hardware-security.md#hsm-performance)」を参照してください。ローカルシークレットマネージャーの詳細については、「[シークレットを AWS IoT Greengrass コアにデプロイする](secrets.md)」を参照してください。

## 設定をテストする
<a name="softhsm-test"></a>
+ Greengrass デーモンを開始します。

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

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

  これで、PKCS\$111 の仕様について学習し、SoftHSM 実装で提供される PKCS\$111 API で初期テストを行う準備ができました。
**重要**  
繰り返しますが、このモジュールは学習およびテスト専用である点を忘れないでください。このモジュールにより、実際に Greengrass 環境のセキュリティ体制は強化されません。  
代わりに、このモジュールの目的は、実際のハードウェアベース HSM の今後の使用に備えて学習とテストを開始できるようにすることです。その時点で、ソフトウェアを本番稼働に使用する前にハードウェアベース HSM に対して個別に完全にテストする必要があります。これは、SoftHSM で提供されている PKCS\$111 実装とハードウェアベース実装には違いがあるためです。

## 関連情報
<a name="console-mod7-see-also"></a>
+ *PKCS \$111 Cryptographic Token Interface Usage Guide Version 2.40* John Leiseboer および Robert Griffin 編集。2014 年 11 月 16 日。「OASIS Committee Note 02」[ http://docs.oasis-open.org/pkcs11/pkcs11-ug/v2.40/cn02/pkcs11-ug-v2.40-cn02.html](http://docs.oasis-open.org/pkcs11/pkcs11-ug/v2.40/cn02/pkcs11-ug-v2.40-cn02.html) 最新バージョン: [ http://docs.oasis-open.org/pkcs11/pkcs11-ug/v2.40/pkcs11-ug-v2.40.html](http://docs.oasis-open.org/pkcs11/pkcs11-ug/v2.40/pkcs11-ug-v2.40.html)
+ [RFC 7512](https://tools.ietf.org/html/rfc7512)