チュートリアル: Trusted Platform Module (TPM) AWS IoT Greengrass で保護する - AWS IoT Greengrass

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

チュートリアル: 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 用に定義されています。

  • 以下のアクセス許可が AWS CLI インストールおよび設定されたデベロッパーマシン。

    • AWS IoT リソースの作成と管理

    • IAM ロールとポリシーの作成と管理

  • デバイスにインストールされている Java Runtime Environment (JRE) バージョン 8 以降。

  • デバイスにインストールされている次のソフトウェアパッケージ:

    • curl

    • jg

  • デバイスのルートまたは sudo 権限。

ステップ 1: TPM2 ツールと依存関係をインストールする

このステップでは、必要な TPM2 ソフトウェアツールとライブラリをインストールします。

  1. 次のコマンドを実行して、パッケージマネージャーを更新し、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
  2. OpenSSL エンジン 3 を使用する OpenSSL TPM2 プロバイダーパッケージを Ubuntu 24.04 にインストールします。

    sudo apt-get install tpm2-openssl

ステップ 2: PKCS#11 ストアを初期化してスロットを作成する

  1. データを保存するディレクトリを作成します。

    sudo mkdir -p /etc/tpm2_pkcs11
  2. ストレージの場所を環境変数として設定します。ストア階層の詳細については、「初期化」を参照してください。

    export TPM2_PKCS11_STORE=/etc/tpm2_store
  3. プライマリオブジェクトを使用して TPM2 トークンを初期化します。

    sudo tpm2_ptool init

    使用可能なオプションは次のとおりです。

    hierarchy-auth HIERARCHY_AUTH

    階層にプライマリオブジェクトを追加するための認可パスワード。

    primary-auth PRIMARY_AUTH

    既存のプライマリキーオブジェクトの承認値。

    デフォルトは空の認証値です。

    primary-handle [PRIMARY_HANDLE]

    既存のプライマリキーオブジェクトを使用します。

    デフォルト: 0x81000001

    transient-parents

    特定のテンプレートの一時的なプライマリオブジェクトを使用します。

    値: tpm2-tools-defaulttpm2-tools-ecc-defaulttss2-engine-key

    path PATH

    ストアディレクトリの場所。指定した場合、 ディレクトリが存在している必要があります。指定しない場合、環境変数 を見て検索を実行しますTPM2_PKCS11_STORE。その環境変数が設定されていない場合、 が表示されます/etc/tpm2_pkcs11。そのディレクトリが見つからないか、作成できない場合は、デフォルトで現在の作業ディレクトリになります。

ステップ 3: トークンとキーを作成する

  1. 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

  2. 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}

    キーのタイプ。

  3. トークンから 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 キーの詳細については、「プライベートキーまたはパブリックキーの保存」を参照してください。

  4. TSS プライベートキーの認証データをキャプチャします。

    auth_ecc0=$(echo "$yaml_ecc0" | grep "object-auth" | cut -d' ' -f2-)

ステップ 4: 証明書署名リクエスト (CSR) を生成する

このステップでは、TPM2-protectedプライベートキーを使用して CSR を生成します。

  1. 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 ドキュメント」を参照してください。

  2. 同じマシンで CSR を生成していない場合は、生成された CSR を AWS 認証情報が設定されたマシンにコピーします。

ステップ 5: モノの証明書を作成する

AWS IoT モノの証明書を作成します。モノの証明書を作成する方法の詳細については、「」を参照してくださいモノの証明書を作成する

ステップ 6: モノの証明書を TPM にインポートする

  1. モノの証明書をデバイスにコピーします。

  2. モノの証明書を 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を取得します。

  1. Greengrass トークンのトークン URL をキャプチャします。

    TOKEN=sudo p11tool --list-token-urls | grep "token=greengrass"
  2. 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
  3. プライベートキーと証明書のオブジェクト URL をキャプチャします。

ステップ 8: TPM2 サポートを使用して Greengrass を設定およびインストールする

  1. モノの証明書を設定します。詳細については、「モノの証明書を設定する」を参照してください。

  2. の HSM にプライベートキーと証明書を使用して AWS IoT Greengrass Core ソフトウェアをインストールする手順を完了しますAWS IoT Greengrass Core ソフトウェアのインストール。次に、次の手順を使用して、PKCS#11 インターフェイスを介して TPM2 を利用するようにインストールを設定します。

  3. PKCS#11 プロバイダーコンポーネントがダウンロードされ、Greengrass インストーラーの場所に保存されていることを確認します。

  4. テキストエディタを使用し、config.yaml という名前の設定ファイルを作成してインストーラに提供します。例えば、Linux ベースのシステムでは、次のコマンドを実行して GNU nano を使用して ファイルを作成できます。

    nano GreengrassInstaller/config.yaml
  5. 次の 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"
  6. インストールに固有のパラメータを使用して ファイルを編集します。

    1. certificateFilePath と privateKeyPath を certificateFilePath で更新し、privateKeyPath をステップ 7 でキャプチャされた PKCS#11 URL で更新します。

    2. エンドポイントに基づいて iotDataEndpoint と iotCredEndpoint AWS IoT を更新します。

    3. aws.greengrass.crypto.Pkcs11Provider 設定で、プラットフォームに基づいてライブラリを更新します。

      注記

      X86_64 の例を示します。ファイルパスは ARM64 デバイスでも同様です。

  7. の Greengrass インストール手順を完了しますAWS IoT Greengrass Core ソフトウェアのインストール

ステップ 9: インストールを確認する

このステップでは、Greengrass が TPM2 統合で正しく実行されていることを確認します。

  1. Greengrass サービスのステータスを確認します。

    sudo systemctl status greengrass.service
  2. Greengrass ログを表示して、エラーがないことを確認します。

    sudo tail -f /greengrass/v2/logs/greengrass.log
  3. デバイスがAWS IoT コンソールに接続済みとして表示されることを確認します。

    1. AWS IoT Greengrass コンソール にサインインします。

    2. 管理Greengrass デバイスを展開し、 Core デバイスを選択します。

    3. デバイスが接続されていることを確認します。デバイスのステータスは、接続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