

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 教學課程：使用信任平台模組 (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 核心軟體 （主控台）](https://docs.aws.amazon.com//greengrass/v2/developerguide/install-greengrass-v2-console.html)。
+ 本教學中的指示是針對 Ubuntu 24.04 LTS 定義。
+ 任何可支援 Linux [TPM2 軟體堆疊的 Linux ](https://tpm2-software.github.io/)發行版本都可以支援此機制。
+ 安裝[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私有金鑰來產生憑證簽署請求 (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. 透過將使用者新增至 `tss` 群組以進行 TPM 存取來設定`ggcore`使用者許可：

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

1. 完成下列步驟以更新登入資料目錄：
   + 從登入資料目錄移除私有金鑰檔案。
     + 由於我們使用持久性 TPM 金鑰，因此不需要複製私有金鑰檔案。
   + 將新的 複製到該登入`device.pem.crt`資料目錄。

1. `config.yaml` 使用以下 TPM 特定組態進行編輯：

   ```
   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)。