翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
チュートリアル: 信頼できるプラットフォームモジュール (TPM) で Greengrass Nucleus を保護する
注記
このチュートリアルのメカニズムは、手動リソースプロビジョニングを使用して AWS IoT Greengrass Core ソフトウェアをインストールする でのみサポートされています。
これらのチュートリアルには、ハードウェアセキュリティモジュール (HSM) として TPM2 チップを使用してプライベートキーと CSR を作成する方法の手順が含まれています。これは「モノの証明書を作成する」を行うために使用されます。
これらのチュートリアルでは、PKCS#11 インターフェイスを使用してトラステッドプラットフォームモジュール (TPM) で AWS IoT Greengrass Core ソフトウェア (Greengrass Nucleus) を設定することで、デバイスのセキュリティを強化する方法を示します。この TPM 統合により、デバイスアイデンティティと への接続に使用されるプライベートキーと証明書 AWS IoT Core が改ざん防止ハードウェアに安全に保存され、なりすましやその他の悪意のあるアクティビティの抽出が防止されます。
この統合を完了すると、Greengrass コアデバイスは TPM で保護されたプライベートキーを使用して、 AWS IoT サービスとのアイデンティティと通信を行います。
Greengrass デバイスのセキュリティの詳細については、「「AWS IoT Greengrass」 のセキュリティ」を参照してください。
前提条件
このチュートリアルを完了するには、以下が必要です。
-
TPM 2.0 ハードウェアまたはファームウェア TPM 2.0 を搭載した Linux 互換デバイス。
-
このチュートリアルの手順は、Ubuntu 24.04 LTS 用に定義されています。
-
Linux TPM2 ソフトウェアスタック
をサポートできるすべての Linux ディストリビューションは、このメカニズムをサポートできます。
-
-
AWS CLI インストールされ、次のアクセス許可が設定されているデベロッパーマシン。
-
AWS IoT リソースの作成と管理
-
IAM ロールとポリシーを作成および管理する
-
-
デバイスにインストールされている Java ランタイム環境 (JRE) バージョン 8 以降。
-
デバイスにインストールされている以下のソフトウェアパッケージ:
-
curl
-
jq
-
-
デバイスのルートまたは sudo 権限。
ステップ 1: TPM2 ツールと依存関係をインストールする
このステップでは、必要な TPM2 ソフトウェアツールとライブラリをインストールします。
-
以下のコマンドを実行して、パッケージマネージャーを更新し、TPM2 ツールと依存関係をインストールします。
sudo apt-get update && sudo apt-get install tpm2-tools \ tpm2-abrmd \ tpm2-tss-engine-tools \ gnutls-bin \ libtpm2-pkcs11-1 \ libtpm2-pkcs11-tools \ libtpm2-pkcs11-1-dev \ python3-tpm2-pkcs11-tools \ libengine-pkcs11-openssl \ libtss2-tcti-tabrmd0 -
OpenSSL エンジン 3 を使用する OpenSSL TPM2 プロバイダーパッケージを Ubuntu 24.04 にインストールします。
sudo apt-get install tpm2-openssl
ステップ 2: PKCS#11 ストアを初期化してスロットを作成する
-
データを保存するディレクトリを作成します。
sudo mkdir -p /etc/tpm2_pkcs11 -
ストレージの場所を環境変数として設定します。ストア階層の詳細については、「Initialization
」を参照してください。 export TPM2_PKCS11_STORE=/etc/tpm2_store -
プライマリオブジェクトを使用して TPM2 トークンを初期化します。
sudo tpm2_ptool init利用可能なオプションは以下のとおりです。
hierarchy-auth HIERARCHY_AUTH-
階層にプライマリオブジェクトを追加するための承認パスワード。
primary-auth PRIMARY_AUTH-
既存のプライマリキーオブジェクトの承認値。
デフォルトは空の承認値です。
primary-handle [PRIMARY_HANDLE]-
既存のプライマリキーオブジェクトを使用します。
デフォルト:
0x81000001 transient-parents-
特定のテンプレートの一時的なプライマリオブジェクトを使用します。
値:
tpm2-tools-default、tpm2-tools-ecc-default、tss2-engine-key path PATH-
ストアディレクトリの場所。指定する場合は、ディレクトリが存在している必要があります。指定しない場合、環境変数
TPM2_PKCS11_STOREを参照して検索を実行します。その環境変数が設定されていない場合は、/etc/tpm2_pkcs11を参照します。そのディレクトリが見つからないか、作成できない場合、デフォルトで現在の作業ディレクトリになります。
ステップ 3: トークンとキーを作成する
-
PKCS#11 トークンを作成します。
sudo tpm2_ptool addtoken —pid=1 —userpin=USERPIN—sopin=SOPIN—label=greengrass利用可能なオプションは以下のとおりです。
--pid PID-
このトークンに関連付けるプライマリオブジェクト ID。
--sopin SOPIN-
管理者ピン。このピンはオブジェクトの復旧に使用されます。
--userpin USERPIN-
ユーザーピン。このピンは、オブジェクト使用の認証に使用されます。
--label LABEL-
使用中のプロファイルを識別する一意のラベル。一意である必要があります。
--hierarchy-auth HIERARCHY_AUTH
-
ECC キーオブジェクトを作成します。
sudo tpm2_ptool addkey —algorithm=ecc256 —label=greengrass —userpin=****** —key-label=greenkey--label LABEL-
キーをインポートするトークンラベル。
--key-label KEY_LABEL-
インポートされたキーのラベル。デフォルトは整数値です。
--id ID-
キー ID。デフォルトはランダムな 8 バイトの 16 進数です。
--attr-always-authenticate-
CKA_ALWAYS_AUTHENTICATE 属性を CK_TRUE に設定します。
--hierarchy-auth HIERARCHY_AUTH-
hierarchyauth は一時的なオブジェクトに必要です。
--sopin SOPIN-
管理者ピン。
--userpin USERPIN-
ユーザーピン。
--algorithm-
{rsa1024,rsa2048,rsa3072,rsa4096,aes128,aes256,ecc224,ecc256,ecc384,ecc521,hmac:sha1,hmac:sha256,hmac:sha384,hmac:sha512}
キーのタイプ。
-
トークンから TPM2-TSS オブジェクトをエクスポートして、認証データをキャプチャします。
yaml_ecc0=$(sudo tpm2_ptool export —label="greengrass" —key-label="greenkey" —userpin="******")出力例:
> echo $yaml_ecc0 object-auth: 706c1cad8a5238871b30149705255926 primary-object: auth: '' hierarchy: owner is_transient: false注記
また、このコマンドを実行したディレクトリに TSS2 プライベートキーである「greenkey.pem」という名前のファイルがあります。これを使用して、tpm2 openssl プロバイダーで CSR を生成します。TSS2 PRIVATE KEY ファイルは TPM によって保護されており、別のマシンでは使用できません。OpenSSL を使用した TSS2 キーの詳細については、「Storing the Private or Public Key
」を参照してください。 -
TSS プライベートキーの認証データをキャプチャします。
auth_ecc0=$(echo "$yaml_ecc0" | grep "object-auth" | cut -d' ' -f2-)
ステップ 4: 証明書署名リクエスト (CSR) を生成する
このステップでは、TPM2 で保護されたプライベートキーを使用して CSR を生成します。
-
TPM2 プロバイダーを使用して CSR を生成します。
sudo openssl req -new -provider tpm2 -provider base -key greenkey.pem -passin "pass:$auth_ecc0" -out "$H"$HOSTNAME".csrプロンプトが表示されたら、以下を含む CSR の必要な情報を入力します。
-
国名 (2 文字のコード)
-
州名
-
市区町村
-
組織名
-
部門名
-
共通名
-
E メールアドレス
または、無人生成用の OpenSSL 設定ファイルを指定することもできます。詳細については、「OpenSSL Documentation
」を参照してください。 -
-
同じマシンで CSR を生成しない場合は、生成された CSR を AWS 認証情報が設定されたマシンにコピーします。
ステップ 5: モノの証明書を作成する
AWS IoT モノの証明書を作成します。モノの証明書を作成する方法の詳細については、「モノの証明書を作成する」を参照してください。
ステップ 6: モノの証明書を TPM にインポートする
-
モノの証明書をデバイスにコピーします。
-
モノの証明書を Greengrass トークンに追加します。
sudo tpm2_ptool addcert --label=greengrass --key-label=greenkey device.pem.crt利用可能なオプションは以下のとおりです。
--help-
このヘルプメッセージを表示して終了します。
--label LABEL-
削除するプロファイルラベル。
--key-label KEY_LABEL-
関連付けられたプライベートキーラベル。
--key-id KEY_ID-
関連付けられた 16 進数のプライベートキー ID。
cert-
追加する x509 PEM 証明書。
ステップ 7: PKCS#11 オブジェクト URL をキャプチャする
gnutls-bin パッケージから提供される p11tool を使用して、PKCS#11 トークン URL とオブジェクト URL を取得します。
-
Greengrass トークンのトークン URL をキャプチャします。
TOKEN=sudo p11tool --list-token-urls | grep "token=greengrass" -
Greengrass トークン URL を取得します。ステップ 3 で使用したのと同じピンを使用します。
sudo p11tool --login --list-all "${TOKEN}"出力例:
Token 'greengrass' with URL 'pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass' requires user PIN Enter PIN: WARNING: Needed CKA_VALUE but didn't find encrypted blob Object 0: URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=private Type: Private key (EC/ECDSA-SECP256R1) Label: greenkey Flags: CKA_PRIVATE; CKA_NEVER_EXTRACTABLE; CKA_SENSITIVE; ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31 Object 1: URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=public Type: Public key (EC/ECDSA-SECP256R1) Label: greenkey ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31 Object 2: URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=cert Type: X.509 Certificate (EC/ECDSA-SECP256R1) Expires: Fri Dec 31 18:59:59 2049 Label: greenkey ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31 -
プライベートキーと証明書のオブジェクト URL をキャプチャします。
ステップ 8: TPM2 サポートを使用して Greengrass を設定およびインストールする
-
モノの証明書を設定します。詳細については、「Configure the thing certificate」を参照してください。
-
の HSM にプライベートキーと証明書を使用して AWS IoT Greengrass Core ソフトウェアをインストールする手順を完了しますAWS IoT Greengrass Core ソフトウェアのインストール。次に、以下の手順を使用して、PKCS#11 インターフェイスを介して TPM2 を利用するようにインストールを設定します。
-
PKCS#11 プロバイダーコンポーネントをダウンロードして Greengrass インストーラの場所に保存していることを確認します。
-
テキストエディタを使用し、
config.yamlという名前の設定ファイルを作成してインストーラに提供します。例えば、Linux ベースのシステムでは、以下のコマンドを実行して GNUnanoを使用してファイルを作成できます。nano GreengrassInstaller/config.yaml -
次の YAML コンテンツをファイルにコピーします。この部分設定ファイルは、システムパラメータ、Greengrass nucleus パラメータ、PKCS#11 プロバイダパラメータを指定します。
--- system: certificateFilePath: "pkcs11:model=SW%20%20%20TPM%00%00%00%00%00%00%00%00;manufacturer=IBM;serial=0000000000000000;token=greengrass;id=%34%35;object=greenkey;type=cert" privateKeyPath: "pkcs11:model=SW%20%20%20TPM%00%00%00%00%00%00%00%00;manufacturer=IBM;serial=0000000000000000;token=greengrass;id=%34%35;object=greenkey;type=private" rootCaPath: "/greengrass/v2/AmazonRootCA1.pem" rootpath: "/greengrass/v2" thingName: "myThing" services: aws.greengrass.Nucleus: componentType: "NUCLEUS" version: "2.14.0" configuration: awsRegion: "us-east-1" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com" iotCredEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com" aws.greengrass.crypto.Pkcs11Provider: configuration: name: "tpm2_pkcs11" library: "/usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so" slot: 1 userPin: "123456" -
インストールに固有のパラメータを使用してファイルを編集します。
-
ステップ 7 でキャプチャした PKCS#11 URL を使用して、certificateFilePath と privateKeyPath を更新します。
-
AWS IoT エンドポイントに基づいて iotDataEndpoint と iotCredEndpoint を更新します。
-
aws.greengrass.crypto.Pkcs11Provider設定で、プラットフォームに基づいてライブラリを更新します。注記
示されている例は X86_64 用です。ファイルパスは ARM64 デバイスの場合と似ています。
-
-
「AWS IoT Greengrass Core ソフトウェアのインストール」の Greengrass インストール手順を完了します。
ステップ 9: インストールを確認する
このステップでは、Greengrass が TPM2 統合で正しく実行されていることを確認します。
-
Greengrass サービスのステータスを確認します。
sudo systemctl status greengrass.service -
Greengrass ログを表示して、エラーがないことを確認します。
sudo tail -f /greengrass/v2/logs/greengrass.log -
デバイスが AWS IoT コンソール
に接続済みとして表示されることを確認します。 -
AWS IoT Greengrass コンソール
にサインインします。 -
[管理] で、[Greengrass デバイス] を展開し、[コアデバイス] を選択します。
-
デバイスが接続されていることを確認します。接続されている場合は、デバイスのステータスに
HEALTHYと表示されます。詳細については、「Greengrass コアデバイスのステータスを確認する」を参照してください。
-
トラブルシューティング
TPM2 が有効な Greengrass デバイスのセットアップまたは操作中に問題が発生した場合は、以下のトラブルシューティング手順を試してください。
-
メインの Greengrass ログファイルを確認します。
sudo tail -f /greengrass/v2/logs/greengrass.log -
PKCS#11 プロバイダーの設定を確認します。
sudo cat /greengrass/v2/config/effectiveConfig.yaml -
TPM2 サービスが実行されていることを確認します。
sudo systemctl status tpm2-abrmd.service -
TPM2 キーにアクセスできることを確認します。
sudo pkcs11-tool —module /usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so -l -p 123456 —list-objects -
OS が Clevis や systemd-cryptenroll などの TPM2 ストレージルートキーによるフルディスク暗号化で設定されている場合は、これらのツールで使用されているのと同じ永続ハンドルを使用していないことを確認してください。同じ永続ハンドルを使用すると、ディスクの暗号化メカニズムに影響する可能性があります。作成および使用されているすべての永続ハンドルを確認するには、以下のコマンドを実行します。
sudo tpm2_getcap handles-persistent
次の手順
Greengrass コアデバイスを TPM2 と正常に統合したので、以下のことができます。
-
安全な Greengrass デバイスにコンポーネントをデプロイする。詳細については、AWS IoT Greengrass コンポーネントをデバイスにデプロイするを参照してください。
-
TPM2 統合で追加の Greengrass デバイスを設定する。
Greengrass デバイスのセキュリティの詳細については、「「AWS IoT Greengrass」 のセキュリティ」を参照してください。