翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
チュートリアル: Trusted Platform Module (TPM) AWS IoT Greengrass で保護する
注記
このチュートリアルのメカニズムは、 でのみサポートされています手動リソースプロビジョニングを使用して AWS IoT Greengrass Core ソフトウェアをインストールする。
このチュートリアルでは、TPM2 チップをハードウェアセキュリティモジュール (HSM) として使用してプライベートキーと CSR を作成する方法について説明します。これは に使用されますモノの証明書を作成する。
このチュートリアルでは、PKCS#11 インターフェイスを使用してトラステッドプラットフォームモジュール (TPM) で AWS IoT Greengrass Core ソフトウェアを設定することで、デバイスのセキュリティを強化する方法を示します。この TPM 統合により、デバイス ID と への接続に使用されるプライベートキーと証明書 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 Runtime Environment (JRE) バージョン 8 以降。
-
デバイスにインストールされている次のソフトウェアパッケージ:
-
curl
-
jg
-
-
デバイスのルートまたは 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
-
ストレージの場所を環境変数として設定します。ストア階層の詳細については、「初期化
」を参照してください。 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
-
管理者 PIN。このピンはオブジェクトの復旧に使用されます。
--userpin USERPIN
-
ユーザー PIN。このピンは、オブジェクト使用の認証に使用されます。
--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
-
管理者 PIN。
--userpin USERPIN
-
ユーザー PIN。
--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 キーの詳細については、「プライベートキーまたはパブリックキーの保存
」を参照してください。 -
TSS プライベートキーの認証データをキャプチャします。
auth_ecc0=$(echo "$yaml_ecc0" | grep "object-auth" | cut -d' ' -f2-)
ステップ 4: 証明書署名リクエスト (CSR) を生成する
このステップでは、TPM2-protectedプライベートキーを使用して 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 ドキュメント
」を参照してください。 -
-
同じマシンで 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 とオブジェクト URLsを取得します。
-
Greengrass トークンのトークン URL をキャプチャします。
TOKEN=sudo p11tool --list-token-urls | grep "token=greengrass"
-
Greengrass トークンURLs を取得します。ステップ 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 を設定およびインストールする
-
モノの証明書を設定します。詳細については、「モノの証明書を設定する」を参照してください。
-
の 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"
-
インストールに固有のパラメータを使用して ファイルを編集します。
-
certificateFilePath と privateKeyPath を certificateFilePath で更新し、privateKeyPath をステップ 7 でキャプチャされた PKCS#11 URL で更新します。
-
エンドポイントに基づいて iotDataEndpoint と iotCredEndpoint AWS IoT を更新します。
-
aws.greengrass.crypto.Pkcs11Provider
設定で、プラットフォームに基づいてライブラリを更新します。注記
X86_64 の例を示します。ファイルパスは ARM64 デバイスでも同様です。
-
-
の Greengrass インストール手順を完了しますAWS IoT Greengrass Core ソフトウェアのインストール。
ステップ 9: インストールを確認する
このステップでは、Greengrass が TPM2 統合で正しく実行されていることを確認します。
-
Greengrass サービスのステータスを確認します。
sudo systemctl status greengrass.service
-
Greengrass ログを表示して、エラーがないことを確認します。
sudo tail -f /greengrass/v2/logs/greengrass.log
-
デバイスがAWS IoT コンソール
に接続済みとして表示されることを確認します。 -
AWS IoT Greengrass コンソール
にサインインします。 -
管理で Greengrass デバイスを展開し、 Core デバイスを選択します。
-
デバイスが接続されていることを確認します。デバイスのステータスは、接続
HEALTHY
されている場合に表示されます。詳細については、「Greengrass コアデバイスのステータスを確認する」を参照してください。
-
トラブルシューティング
TPM2-enabled 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。