チュートリアル: 信頼できるプラットフォームモジュール (TPM) で AWS IoT Greengrass Nucleus Lite を保護する - AWS IoT Greengrass

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

チュートリアル: 信頼できるプラットフォームモジュール (TPM) で AWS IoT Greengrass Nucleus Lite を保護する

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

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

AWS IoT Greengrass デバイスのセキュリティの詳細については、「」を参照してください「AWS IoT Greengrass」 のセキュリティ

重要

このメカニズムは、手動リソースプロビジョニングを使用した AWS IoT Greengrass nucleus lite のインストールでのみサポートされます。

前提条件

このチュートリアルを完了するには、以下が必要です。

  • TPM 2.0 ハードウェアまたは NitroTPM を搭載した Linux 互換デバイス

  • Greengrass Nucleus Lite がインストールされたデベロッパーマシン。詳細については、AWS IoT Greengrass 「 Core ソフトウェアのインストール (コンソール)」を参照してください。

  • このチュートリアルの手順は、Ubuntu 24.04 LTS 用に定義されています。

  • Linux TPM2 ソフトウェアスタックをサポートできるすべての Linux ディストリビューションは、このメカニズムをサポートできます。

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

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

    • IAM ロールとポリシーを作成および管理する

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

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

ステップ 1: NitroTPM インスタンスを設定する

  1. NitroTPM インスタンスをセットアップします。詳細については、「NitroTPM」を参照してください。

  2. 前のステップで作成したカスタム AMI を使用して最終インスタンスを起動します。

    重要

    SSH で接続する場合は、 の代わりに ubuntu ユーザーを使用しますroot

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

    ls -la /dev/tpm*

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

ステップ 2: TPM ツールをインストールして設定する

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

    sudo apt update sudo apt install tpm2-openssl tpm2-tools tpm2-abrmd libtss2-tcti-tabrmd0
  2. 次のコマンドを実行して、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 プロバイダーを設定する

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

    sudo vi /etc/ssl/openssl.cnf
  2. 次の設定を追加します。

    [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
  3. 必要に応じてモジュールパスを調整します。正しいパスを見つけるには、以下を使用します。

    find /usr -name "tpm2.so"

ステップ 4: 永続的な TPM キーを生成する

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

    sudo tpm2_createprimary -C o -c primary.ctx
  2. 次のコマンドを実行して ECC キーオブジェクトを作成します。

    sudo tpm2_create -C primary.ctx -g sha256 -G ecc256 -r device.priv -u device.pub
  3. 次のコマンドを実行してキーをロードします。

    sudo tpm2_load -C primary.ctx -r device.priv -u device.pub -c device.ctx
  4. 次のコマンドを実行して、キーを永続的にします。

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

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

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

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

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

    openssl req -new -provider tpm2 -key "handle:0x81000002" \ -out device.csr \ -subj "/CN=TPMThing"
  2. 0x81000002 を選択したハンドル値に、 を目的のモノの名前TPMThingに置き換えます。

ステップ 6: CSR から証明書を作成する

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

    mkdir greengrass-v2-certs
  2. 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 をセットアップする

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

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

    sudo usermod -a -G tss ggcore
  2. 次の手順を実行して、認証情報ディレクトリを更新します。

    • 認証情報ディレクトリからプライベートキーファイルを削除します。

      • 永続 TPM キーを使用しているため、プライベートキーファイルをコピーする必要はありません。

    • 新しい をその認証情報ディレクトリdevice.pem.crtにコピーします。

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

    system: privateKeyPath: "handle:0x81000002" # Use your chosen handle certificateFilePath: "" # Replace with the path of device.pem.crt ...
  4. 次のコマンドを実行して、Greengrass Nucleus Lite を再起動します。

    systemctl restart greengrass-lite.target

トラブルシューティング

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

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

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

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

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

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

アクセス拒否エラー

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

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

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

    ls -l /dev/tpm*
  3. tss をグループに追加した後、ログアウトして再度ログインしたことを確認します。

OpenSSL プロバイダーの問題

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

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

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

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

次の手順

AWS IoT Greengrass コアデバイスを TPM2 と正常に統合したので、次のことができます。

  • セキュア AWS IoT Greengrass デバイスにコンポーネントをデプロイする

  • TPM2 統合で追加の AWS IoT Greengrass デバイスをセットアップする

AWS IoT Greengrass デバイスのセキュリティの詳細については、「」を参照してください「AWS IoT Greengrass」 のセキュリティ