本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程: AWS IoT Greengrass 使用信任平台模組 (TPM) 保護
注意
本教學課程中的機制僅支援 使用手動資源佈建安裝 AWS IoT Greengrass 核心軟體。
本教學課程包含如何使用 TPM2 晶片做為硬體安全模組 (HSM) 來建立私有金鑰和 CSR 的說明。用於 建立物件憑證。
本教學課程說明如何使用 PKCS#11 介面,透過信任平台模組 (TPM) 設定 AWS IoT Greengrass 核心軟體來增強裝置安全性。此 TPM 整合可確保用於裝置身分和連線至 的私有金鑰和憑證 AWS IoT Core 安全地存放在防竄改硬體中,防止擷取模擬或其他惡意活動。
當您完成此整合時,您的 Greengrass 核心裝置將使用 TPM 保護的私有金鑰來進行身分和 AWS IoT 與服務的通訊。
如需 Greengrass 裝置安全性的詳細資訊,請參閱中的安全性 AWS IoT Greengrass。
先決條件
為了完成本教學,您需要以下項目:
-
具有 TPM 2.0 硬體或韌體 TPM 2.0 的 Linux 相容裝置。
-
本教學中的指示是針對 Ubuntu 24.04 LTS 定義。
-
任何可支援 Linux TPM2 軟體堆疊的 Linux
發行版本都可以支援此機制。
-
-
安裝 AWS CLI 並設定 的開發人員機器具有以下許可:
-
建立和管理 AWS IoT 資源
-
建立和管理 IAM 角色和政策
-
-
安裝在您裝置上的 Java 執行期環境 (JRE) 第 8 版或更新版本。
-
您的裝置上安裝了下列軟體套件:
-
curl
-
jg
-
-
裝置上的根或 sudo 權限。
步驟 1:安裝 TPM2 工具和相依性
在此步驟中,您會安裝必要的 TPM2 軟體工具和程式庫。
-
執行下列命令,以更新您的套件管理員並安裝 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
-
在使用 OpenSSL 引擎 3 的 Ubuntu 24.04 上安裝 OpenSSL TPM2 提供者套件。
sudo apt-get install tpm2-openssl
步驟 2:初始化 PKCS#11 存放區並建立槽
-
建立目錄以存放資料。
sudo mkdir -p /etc/tpm2_pkcs11
-
將儲存位置設定為環境變數。如需存放階層的詳細資訊,請參閱初始化
。 export TPM2_PKCS11_STORE=/etc/tpm2_store
-
使用主要物件初始化 TPM2 字符。
sudo tpm2_ptool init
可用的選項如下:
hierarchy-auth HIERARCHY_AUTH
-
將主要物件新增至階層的授權密碼。
primary-auth PRIMARY_AUTH
-
現有主索引鍵物件的授權值。
預設是空的身分驗證值。
primary-handle [PRIMARY_HANDLE]
-
使用現有的主索引鍵物件。
預設:
0x81000001
transient-parents
-
使用指定範本的暫時性主要物件。
值:
tpm2-tools-default
、tpm2-tools-ecc-default
、tss2-engine-key
path PATH
-
存放區目錄的位置。如果指定,目錄必須存在。如果未指定,它會查看環境變數 來執行搜尋
TPM2_PKCS11_STORE
。如果未設定該環境變數,則會查看/etc/tpm2_pkcs11
。如果找不到或無法建立該目錄,則會預設為目前的工作目錄。
步驟 3:建立權杖和金鑰
-
建立 PKCS#11 權杖。
sudo tpm2_ptool addtoken —pid=1 —userpin=
USERPIN
—sopin=SOPIN
—label=greengrass可用的選項如下:
--pid PID
-
要與此字符建立關聯的主要物件 ID。
--sopin SOPIN
-
管理員 PIN 碼。此 PIN 用於物件復原。
--userpin USERPIN
-
使用者 PIN 碼。此 PIN 用於物件使用的身分驗證。
--label LABEL
-
用於識別使用中設定檔的唯一標籤必須是唯一的。
--hierarchy-auth HIERARCHY_AUTH
-
建立 ECC 金鑰物件。
sudo tpm2_ptool addkey —algorithm=ecc256 —label=greengrass —userpin=****** —key-label=greenkey
--label LABEL
-
要匯入金鑰的字符標籤。
--key-label KEY_LABEL
-
匯入的金鑰標籤。預設為整數值。
--id ID
-
金鑰 ID。預設為隨機 8 個位元組的十六進位。
--attr-always-authenticate
-
將 CKA_ALWAYS_AUTHENTICATE 屬性設定為 CK_TRUE。
--hierarchy-auth HIERARCHY_AUTH
-
暫時物件所需的階層驗證。
--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}
金鑰的類型。
-
從權杖匯出 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
注意
您也可以在執行此命令的目錄中找到名為 `greenkey.pem` 的檔案,這是 TSS2 私有金鑰。使用此選項來產生具有 tpm2 openssl 提供者的 CSR。TSS2 PRIVATE KEY 檔案受到 TPM 保護,無法在其他機器上使用。如需使用 OpenSSL 之 TSS2 金鑰的詳細資訊,請參閱儲存私有或公有金鑰
。 -
擷取 TSS 私有金鑰的身分驗證資料。
auth_ecc0=$(echo "$yaml_ecc0" | grep "object-auth" | cut -d' ' -f2-)
步驟 4:產生憑證簽署請求 (CSR)
在此步驟中,您將使用 TPM2-protected私有金鑰來產生 CSR。
-
使用 TPM2 提供者產生 CSR。
sudo openssl req -new -provider tpm2 -provider base -key greenkey.pem -passin "pass:$auth_ecc0" -out "$H"$HOSTNAME".csr
出現提示時,請提供 CSR 的必要資訊,包括:
-
國家名稱 (2 個字母代碼)
-
State or Province Name (州或省名稱)
-
Locality Name (地區名稱)
-
Organization Name (組織名稱)
-
Organizational Unit Name (組織單位名稱)
-
Common Name (通用名稱)
-
電子郵件地址
或者,您可以為自動產生提供 OpenSSL 組態檔案。如需詳細資訊,請參閱 OpenSSL 文件
。 -
-
如果您未在相同機器上產生 CSR,請將產生的 CSR 複製到已設定 AWS 登入資料的機器。
步驟 5:建立物件憑證
建立 AWS IoT 物件憑證。如需如何建立物件憑證的詳細資訊,請參閱 建立物件憑證。
步驟 6:將物件憑證匯入 TPM
-
將物件憑證複製到裝置。
-
將物件憑證新增至 Greengrass 字符。
sudo tpm2_ptool addcert --label=greengrass --key-label=greenkey device.pem.crt
可用的選項如下:
--help
-
顯示此說明訊息並結束。
--label LABEL
-
要移除的設定檔標籤。
--key-label KEY_LABEL
-
相關聯的私有金鑰標籤。
--key-id KEY_ID
-
十六進位中的關聯私有金鑰 ID。
cert
-
要新增的 x509 PEM 憑證。
步驟 7:擷取 PKCS#11 物件 URL
我們將使用 gnutls-bin
套件p11tool
提供的 來取得 PKCS#11 字符 URL 和物件 URLs。
-
擷取 Greengrass 字符的字符 URL。
TOKEN=sudo p11tool --list-token-urls | grep "token=greengrass"
-
取得 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
-
擷取私有金鑰和憑證的物件 URL。
步驟 8:使用 TPM2 支援設定和安裝 Greengrass
-
設定物件憑證。如需詳細資訊,請參閱設定物件憑證。
-
完成在 的 HSM 中使用私有金鑰和憑證安裝 AWS IoT Greengrass 核心軟體的指示安裝 AWS IoT Greengrass 核心軟體。然後,使用下列步驟來設定您的安裝,以透過 PKCS#11 介面利用 TPM2。
-
確認您已將 PKCS#11 提供者元件下載並儲存在 Greengrass 安裝程式位置。
-
使用文字編輯器來建立名為 的組態檔案
config.yaml
,以提供給安裝程式。例如,在以 Linux 為基礎的系統上,您可以執行下列命令來使用 GNUnano
建立 檔案。nano GreengrassInstaller/config.yaml
-
將下列 YAML 內容複製到 檔案。此部分組態檔案會指定系統參數、Greengrass 核參數和 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"
-
使用適用於您安裝的參數編輯 檔案。
-
使用步驟 7 中擷取的 PKCS#11 URL 更新 certificateFilePath privateKeyPath 和 privateKeyPath,並使用更新 certificateFilePath 和 privateKeyPath。
-
根據您的 AWS IoT 端點更新您的 iotDataEndpoint 和 iotCredEndpoint。
-
在
aws.greengrass.crypto.Pkcs11Provider
組態中,根據您的平台更新程式庫。注意
顯示的範例適用於 X86_64。ARM64 裝置的檔案路徑將相似。
-
-
完成 中的 Greengrass 安裝步驟安裝 AWS IoT Greengrass 核心軟體。
步驟 9:驗證安裝
在此步驟中,您將驗證 Greengrass 透過 TPM2 整合正常執行。
-
檢查 Greengrass 服務狀態。
sudo systemctl status greengrass.service
-
檢視 Greengrass 日誌以確保沒有錯誤。
sudo tail -f /greengrass/v2/logs/greengrass.log
-
確認您的裝置在AWS IoT 主控台
中顯示為已連線。 -
在管理下,展開 Greengrass 裝置,然後選擇核心裝置。
-
確認您的裝置已連線。裝置狀態會顯示
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
-
如果您的作業系統設定為使用 TPM2 儲存根金鑰的完整磁碟加密,例如 Clevis 或 systemd-cryptenroll,請確認您使用的持久性控制代碼與這些工具所使用的相同。使用相同的持久性控制代碼可能會影響您的磁碟加密機制。若要檢查所有已建立和使用的持久性控點,請執行下列命令
sudo tpm2_getcap handles-persistent
後續步驟
現在您已成功將 Greengrass 核心裝置與 TPM2 整合,您可以:
-
將元件部署到您的安全 Greengrass 裝置。如需詳細資訊,請參閱將 AWS IoT Greengrass 元件部署至裝置
-
設定具有 TPM2 整合的其他 Greengrass 裝置。
如需 Greengrass 裝置安全性的詳細資訊,請參閱中的安全性 AWS IoT Greengrass。