教學課程:使用信任平台模組 (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 核心軟體 (主控台)

  • 本教學中的指示是針對 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私有金鑰來產生憑證簽署請求 (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. 透過將使用者新增至 tss 群組以進行 TPM 存取來設定ggcore使用者許可:

    sudo usermod -a -G tss ggcore
  2. 完成下列步驟以更新登入資料目錄:

    • 從登入資料目錄移除私有金鑰檔案。

      • 由於我們使用持久性 TPM 金鑰,因此不需要複製私有金鑰檔案。

    • 將新的 複製到該登入device.pem.crt資料目錄。

  3. config.yaml 使用以下 TPM 特定組態進行編輯:

    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