2023 年 6 月 30 日に AWS IoT Greengrass Version 1 は延長ライフサイクルフェーズに入りました。詳細については、「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
重要
このモジュールは、実験の目的でのみ提供しています。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 を設定
-
root ユーザーに切り替えます。
sudo su
-
手動のページを使って、システム全体の
softhsm2.conf
の場所を見つけます。一般的な場所は/etc/softhsm/softhsm2.conf
ですが、システムによって異なる場合があります。man softhsm2.conf
-
システム全体の場所に softhsm2 構成ファイル用のディレクトリを作成します。この例では、場所が
/etc/softhsm/softhsm2.conf
であることを前提としています。mkdir -p /etc/softhsm
-
トークンディレクトリを
/greengrass
ディレクトリに作成します。注記
このステップを省略すると、softhsm2-util は
ERROR: Could not initialize the library
と報告します。mkdir -p /greengrass/softhsm2/tokens
-
トークンディレクトリを設定します。
echo "directories.tokendir = /greengrass/softhsm2/tokens" > /etc/softhsm/softhsm2.conf
-
ファイルベースのバックエンドを設定します。
echo "objectstore.backend = file" >> /etc/softhsm/softhsm2.conf
注記
これらの設定は、実験の目的でのみ提供しています。すべての設定オプションを確認するには、設定ファイルのマニュアルページを読みます。
man softhsm2.conf
プライベートキーを SoftHSM にインポートする
このステップでは、SoftHSM トークンを初期化し、プライベートキー形式を変換してから、プライベートキーをインポートします。
-
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
-
プライベートキーを、SoftHSM インポートツールで使用できる形式に変換します。このチュートリアルでは、モジュール 2 の入門チュートリアルで取り上げた [Default Group creation] (デフォルトグループの作成) オプションを使って取得したプライベートキーを変換します。
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in
hash
.private.key -outhash
.private.pem -
プライベートキーを 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 設定ファイルを変更します。
システム上の SoftHSM プロバイダーライブラリ (
libsofthsm2.so
) へのパスを見つけます。インストールされているライブラリのパッケージのリストを取得します。
sudo dpkg -L libsofthsm2
libsofthsm2.so
ファイルはsofthsm
ディレクトリにあります。このファイルへの完全パス (
/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so
など) をコピーします。この値は後で使用します。
Greengrass デーモンを停止します。
cd /greengrass/ggc/core/ sudo ./greengrassd stop
Greengrass 設定ファイルを開きます。これは、
/greengrass/config
ディレクトリにある config.json ファイルです。注記
この手順の例は、
config.json
ファイルが、モジュール 2 の入門チュートリアルで取り上げた [Default Group creation] (デフォルトグループの作成) オプションを使って取得した形式を使用している前提で説明しています。-
crypto.principals
オブジェクトに、以下の MQTT サーバー証明書オブジェクトを挿入します。有効な JSON ファイルを作成するために必要な場所にカンマを追加します。"MQTTServerCertificate": { "privateKeyPath": "path-to-private-key" }
-
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
プロパティも含める必要があります。詳細については、「無線通信経由更新のサポートを設定する」を参照してください。 -
crypto
オブジェクトを編集します。PKCS11
オブジェクトを設定します。[
P11Provider
] にlibsofthsm2.so
への完全パスを入力します。slotLabel
に「greengrass
」と入力します。slotUserPin
に「1234
」と入力します。
principals
オブジェクトでプライベートキーへのパスを設定します。certificatePath
プロパティは編集しないでください。privateKeyPath
プロパティに、以下の RFC 7512 PKCS#11 パス (キーのラベル) を入力します。IoTCertificate
、SecretsManager
、MQTTServerCertificate
のプリンシパルに対してこの操作を行います。pkcs11:object=iotkey;type=private
-
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" }
-
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 サーバーのプライベートキーの選択の詳細については、「パフォーマンス」を参照してください。ローカルシークレットマネージャーの詳細については、「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 実装とハードウェアベース実装には違いがあるためです。
以下も参照してください。
-
PKCS #11 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/pkcs11-ug-v2.40.html