

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

# チュートリアル: 信頼できるプラットフォームモジュール (TPM) を使用して AWS IoT Greengrass Nucleus Lite を保護する
<a name="gg-lite-with-tpm-tutorial"></a>

このチュートリアルでは、 AWS IoT Greengrass nucleus lite のトラステッドプラットフォームモジュール (TPM) サポートを有効にして設定する方法について説明します。TPM は、安全なキーストレージのためのハードウェアベースの信頼のルートを提供します。このセキュリティ機能は、暗号化オペレーションと機密認証情報を保護し、デバイスのセキュリティと整合性を強化します。

この統合を完了すると、 AWS IoT Greengrass コアデバイスは TPM で保護されたプライベートキーをアイデンティティと AWS IoT サービスとの通信に使用します。

 AWS IoT Greengrass デバイスのセキュリティの詳細については、「」を参照してください[のセキュリティ AWS IoT Greengrass](security.md)。

## 前提条件
<a name="lite-tpm-prerequisites"></a>

このチュートリアルを完了するには、以下が必要です。
+ TPM 2.0 ハードウェアまたは [NitroTPM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html) を搭載した Linux 互換デバイス
+ Greengrass Nucleus Lite がインストールされたデベロッパーマシン。詳細については、[AWS IoT Greengrass 「 Core ソフトウェアのインストール (コンソール)](https://docs.aws.amazon.com//greengrass/v2/developerguide/install-greengrass-v2-console.html)」を参照してください。
+ このチュートリアルの手順は、Ubuntu 24.04 LTS 用に定義されています。
+ [Linux TPM2 ソフトウェアスタック](https://tpm2-software.github.io/)をサポートできるすべての Linux ディストリビューションは、このメカニズムをサポートできます。
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) がインストールされ、以下のアクセス許可が設定されたデベロッパーマシン。
  +  AWS IoT リソースの作成と管理
  + IAM ロールとポリシーを作成および管理する
+ デバイスのルートまたは sudo 権限。

このチュートリアルでは、TPM2 チップをハードウェアセキュリティモジュール (HSM) として使用して、 AWS IoT モノの証明書の作成に使用されるプライベートキーと CSR を作成する方法について説明します。

## ステップ 1: NitroTPM インスタンスを設定する
<a name="lite-tpm-step1"></a>

1. NitroTPM インスタンスをセットアップします。詳細については、「[NitroTPM](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/enable-nitrotpm-support-on-ami.html)」を参照してください。

1. 前のステップで作成したカスタム AMI を使用して最終インスタンスを起動します。
**重要**  
SSH で接続する場合は、 の代わりに `ubuntu` ユーザーを使用します`root`。

1. 次のコマンドを実行して、TPM デバイスが存在し、動作していることを確認します。

   ```
   ls -la /dev/tpm*
   ```

   `/dev/tpm0` と `/dev/tpmrm0` デバイスが表示されます。

## ステップ 2: TPM ツールをインストールして設定する
<a name="lite-tpm-step2"></a>

1. 次のコマンドを実行して、必要なパッケージをインストールします。

   ```
   sudo apt update
   sudo apt install tpm2-openssl tpm2-tools tpm2-abrmd libtss2-tcti-tabrmd0
   ```

1. 次のコマンドを実行して、TPM デバイスのアクセス許可を確認します。

   ```
   ls -l /dev/tpm0    # Should be owned by tss:root with permissions 0660
   ls -l /dev/tpmrm0  # Should be owned by tss:tss with permissions 0660
   ```

## ステップ 3: OpenSSL TPM2 プロバイダーを設定する
<a name="lite-tpm-step3"></a>

1. OpenSSL 設定ファイルを編集します。

   ```
   sudo vi /etc/ssl/openssl.cnf
   ```

1. 次の設定を追加します。

   ```
   [openssl_init]
   providers = provider_sect
   
   [provider_sect]
   default = default_sect
   tpm2 = tpm2_sect
   
   [default_sect]
   activate = 1
   
   [tpm2_sect]
   identity = tpm2
   module = /usr/local/lib64/tpm2.so
   activate = 1
   ```

1. 必要に応じてモジュールパスを調整します。正しいパスを見つけるには、以下を使用します。

   ```
   find /usr -name "tpm2.so"
   ```

## ステップ 4: 永続的な TPM キーを生成する
<a name="lite-tpm-step4"></a>

1. 次のコマンドを実行して、プライマリキーを作成します。

   ```
   sudo tpm2_createprimary -C o -c primary.ctx
   ```

1. 次のコマンドを実行して ECC キーオブジェクトを作成します。

   ```
   sudo tpm2_create -C primary.ctx -g sha256 -G ecc256 -r device.priv -u device.pub
   ```

1. 次のコマンドを実行してキーをロードします。

   ```
   sudo tpm2_load -C primary.ctx -r device.priv -u device.pub -c device.ctx
   ```

1. 次のコマンドを実行して、キーを永続的にします。

   ```
   sudo tpm2_evictcontrol -C o -c device.ctx 0x81000002
   ```

   これにより、ハンドル ( など`0x81000002`) を持つ永続キーが作成されます。

## ステップ 5: 証明書署名リクエスト (CSR) を生成する
<a name="lite-tpm-step5"></a>

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

1. TPM キーを使用して CSR を生成します。

   ```
   openssl req -new -provider tpm2 -key "handle:0x81000002" \
       -out device.csr \
       -subj "/CN=TPMThing"
   ```

1. `0x81000002` を選択したハンドル値に、 を目的のモノの名前`TPMThing`に置き換えます。

## ステップ 6: CSR から証明書を作成する
<a name="lite-tpm-step6"></a>

1. 開発用コンピュータで、 AWS IoT モノの証明書をダウンロードしたフォルダを作成します。

   ```
   mkdir greengrass-v2-certs
   ```

1. CSR ファイルを使用して、 AWS IoT モノの証明書を作成し、開発用コンピュータにダウンロードします。

   ```
   aws iot create-certificate-from-csr \
     --set-as-active \
     --certificate-signing-request file://path_to_device.csr \
     --certificate-pem-outfile greengrass-v2-certs/device.pem.crt
   ```

   リクエストが正常に処理された場合、レスポンスは次の例のようになります。

   ```
   {
   "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----"
   }
   ```

## ステップ 7: TPM サポートで Greengrass Nucleus Lite をセットアップする
<a name="lite-tpm-step7"></a>

Greengrass Nucleus Lite で TPM サポートを有効にするには、次の変更を行います。

1. TPM アクセスの`tss`グループにユーザーを追加して`ggcore`、ユーザーのアクセス許可を設定します。

   ```
   sudo usermod -a -G tss ggcore
   ```

1. 次の手順を実行して、認証情報ディレクトリを更新します。
   + 認証情報ディレクトリからプライベートキーファイルを削除します。
     + 永続 TPM キーを使用しているため、プライベートキーファイルをコピーする必要はありません。
   + 新しい をその認証情報ディレクトリ`device.pem.crt`にコピーします。

1. 次の TPM 固有の設定`config.yaml`で を編集します。

   ```
   system:
       privateKeyPath: "handle:0x81000002" # Use your chosen handle
       certificateFilePath: "" # Replace with the path of device.pem.crt
       ...
   ```

1. 次のコマンドを実行して、Greengrass Nucleus Lite を再起動します。

   ```
   systemctl restart greengrass-lite.target
   ```

## トラブルシューティング
<a name="lite-tpm-troubleshooting"></a>

TPM2-enabled AWS IoT Greengrass デバイスのセットアップまたは操作中に問題が発生した場合は、次のトラブルシューティング手順を試してください。

**TPM デバイスが見つかりません (NitroTPM を使用する場合)**

`/dev/tpm0` が存在しない場合は、次の手順を実行します。

1. NitroTPM がサポートするインスタンスタイプを使用していることを確認します。

1. AMI が で作成されていることを確認します`--tpm-support v2.0`。

1. インスタンスがカスタム AMI から起動されたことを確認します。

**アクセス拒否エラー**

TPM アクセスエラーが発生した場合は、次の操作を行います。

1. ユーザーが `tss`グループに属していることを確認します`groups $USER`。

1. 次のコマンドを使用して、TPM デバイスのアクセス許可を確認します。

   ```
   ls -l /dev/tpm*
   ```

1. `tss` をグループに追加した後、ログアウトして再度ログインしたことを確認します。

**OpenSSL プロバイダーの問題**

TPM プロバイダーが見つからない場合は、次の操作を行います。

1. の`tpm2.so`パスを確認します`/etc/ssl/openssl.cnf`。

1. 次のコマンドを実行して、プロバイダーのインストールを確認します。

   ```
   openssl list -providers
   ```

1. `tpm2-openssl` パッケージが正しくインストールされていることを確認します。

## 次の手順
<a name="lite-tpm-next-steps"></a>

 AWS IoT Greengrass コアデバイスを TPM2 と正常に統合したので、次のことができます。
+ セキュア AWS IoT Greengrass デバイスにコンポーネントをデプロイする
+ TPM2 統合で追加の AWS IoT Greengrass デバイスをセットアップする

 AWS IoT Greengrass デバイスのセキュリティの詳細については、「」を参照してください[のセキュリティ AWS IoT Greengrass](security.md)。