本文介紹Enclave CLI所有子命令的詳細用法,以協助您更好地理解和使用Enclave CLI。
您也可以在安裝Enclave CLI後分別運行如下命令來查看Enclave CLI所有子命令的列表和各子命令的用法說明。
enclave-cli --help # 子命令列表
enclave-cli <sub-command> --help # 子命令用法說明build-enclave:構建Enclave
該子命令用於將Docker鏡像轉換為.eif格式的Enclave鏡像檔案,您可以通過指定一個包含Dockerfile的本地目錄或Docker倉庫中的鏡像名來選擇用於構建Enclave鏡像檔案的Docker鏡像。
該子命令會返回Enclave鏡像檔案的基準度量值,可用於Enclave運行時的遠程證明過程,與其運行時產生的度量值進行對比,若一致則表示此Enclave是可信的。
阿里雲虛擬化Enclave中的度量值,也稱為PCR(Platform Configuration Register),在Enclave運行時由vTPM產生,完全遵循TPM 2.0標準。
用法
enclave-cli build-enclave \
--docker-uri <repository>:<tag> \
--output-file <enclave-image-filename> \
[ --docker-dir <path-to-dockerfile-directory> ] \
[ --private-key <private-key> --signing-certificate <certificate> ]參數說明
參數 | 是否必選 | 類型 | 說明 |
| 是 | String | 指定Docker倉庫中已有Docker鏡像的資源標識符,格式為 若同時指定了 |
| 否 | String | 指定包含Dockerfile的本地目錄路徑,以建立用於產生Enclave鏡像的Docker鏡像。 |
| 是 | String | 指定產生的Enclave鏡像的檔案名稱。 |
| 否 | String | 指定用於對Enclave鏡像檔案簽名的私密金鑰檔案(PEM格式)。 若指定了此參數,必須同時指定 |
| 否 | String | 指定用於對Enclave鏡像檔案簽名的認證檔案(PEM格式),必須與 |
請求樣本
本樣本展示如何將本地Docker鏡像sample:latest轉換成名為sample.eif的Enclave鏡像檔案。
enclave-cli build-enclave --docker-uri sample:latest --output-file sample.eif返回樣本
Start building the Enclave Image...
Enclave Image successfully created.
{
"Measurements": {
"HashAlgorithm": "Sha256 { ... }",
"PCR11": "dc5dcd841f87e2b6c0e65a11b46b25ebe2999a8a5f0318e10c0175b60000****",
"PCR8": "2c6944f47864f1f8ab276000a9f057fcdf9f56a015c0bc5e2339f24b0000****",
"PCR9": "8ef5fe53a7709cc1c1a0aa7b5149a55bcd524cccc9f43e7a3baf44ca0000****"
}
}參數說明
參數 | 說明 |
Measurements | JSON格式,包含Enclave鏡像檔案的基準度量值。 |
HashAlgorithm | 用於產生度量值的雜湊演算法。 |
PCR8 | Enclave鏡像檔案的度量值。 |
PCR9 | 核心和啟動引導程式的度量值。 |
PCR11 | 應用程式的度量值。 |
run-enclave:運行Enclave
該子命令用於根據您指定的Enclave鏡像檔案啟動一個新的Enclave,同時會將Enclave資源分派服務預留的vCPU和記憶體資源分派給啟動並執行Enclave。
當前一個ECS執行個體中僅支援運行一個Enclave。
用法
enclave-cli run-enclave \
--cpu-count <vcpu-count> \
--cpu-ids <list-of-vcpu-ids> \
--memory <amount-of-memory-in-MiB> \
--eif-path <enclave-image-file-path> \
[ --enclave-cid <enclave-cid> ] \
[ --debug-mode ] \
[ --config <json-config-file> ]該子命令的JSON設定檔格式如下:
{
"cpu_count": <vcpu-count>,
"cpu_ids": <list-of-vcpu-ids>,
"memory_mib": <amount-of-memory-in-MiB>,
"eif_path": "<enclave-image-file-path>",
"enclave_cid": <enclave-cid>,
"debug_mode": true|false
}參數說明
參數 | 是否必選 | 類型 | 說明 |
| 否 | String | 指定存放Enclave啟動參數的JSON設定檔路徑。 若指定了此參數,則不能指定其他任何參數。此時所有參數都在該設定檔中以JSON格式指定。 |
| 否 | int | 指定分配給Enclave的vCPU數量,其數量必須小於執行個體的vCPU總數,以確保執行個體自身留有可用的vCPU。 該參數是否為必選取決於
說明 若執行個體未啟用超執行緒,則Enclave的vCPU數最少可為1;若執行個體啟用了超執行緒(預設),則為了保證安全性,Enclave的vCPU數必須為偶數,至少為2,故執行個體必須至少為4 vCPU。您可以通過運行 |
| 否 | int | 指定分配給Enclave的vCPU ID列表,其數量必須小於執行個體的vCPU總數,以確保執行個體自身留有可用的vCPU。 若執行個體啟用超執行緒,則vCPU數量必須為偶數,具體說明見 該參數是否為必選取決於
|
| 是 | int | 指定分配給Enclave的記憶體大小,單位:MiB。64 MiB≤memory<執行個體的記憶體總大小,並且必須滿足Enclave啟動並執行最小記憶體。 |
| 是 | String | 指定 |
| 否 | int | 指定Enclave在vsock通訊中的CID地址,該CID必須至少為4。 若未指定該參數,則系統會為Enclave分配一個可用的CID。 |
| 否 | String | 指定該參數表示令Enclave在偵錯模式下運行,未指定該參數則表示令Enclave在正常模式下運行。 只有在偵錯模式下,您才能通過 |
請求樣本
本樣本展示如何使用sample.eif鏡像檔案啟動一個Enclave並為其分配2 vCPU、1024 MiB記憶體和值為10的vsock CID地址。
enclave-cli run-enclave --cpu-count 2 --memory 1024 --eif-path sample.eif --enclave-cid 10返回樣本
Start allocating memory...
Started enclave with enclave-cid: 10, memory: 1024 MiB, cpu-ids: [2, 3]
{
"EnclaveID": "12345678-1234-5678-1234-123456781234-enc1",
"ProcessID": 1234,
"EnclaveCID": 10,
"NumberOfCPUs": 2,
"CPUIDs": [
2,
3
],
"MemoryMiB": 1024
}參數說明
參數 | 說明 |
EnclaveID | 標識Enclave的唯一ID。 |
ProcessID | 執行個體中Enclave管理進程的PID。 |
EnclaveCID | Enclave的CID地址。 |
NumberOfCPUs | 執行個體分配給Enclave的vCPU數量。 |
CPUIDs | 執行個體分配給Enclave的vCPU ID列表。 |
MemoryMiB | 執行個體分配給Enclave的記憶體大小,單位:MiB。 |
describe-enclaves:擷取Enclave資訊
該子命令無參數,用於擷取當前正在啟動並執行Enclave資訊。
用法
enclave-cli describe-enclaves請求樣本
本樣本展示如何擷取執行個體中正在啟動並執行Enclave資訊。
enclave-cli describe-enclaves返回樣本
[
{
"EnclaveID": "12345678-1234-5678-1234-123456781234-enc1",
"ProcessID": 1234,
"EnclaveCID": 10,
"NumberOfCPUs": 2,
"CPUIDs": [
2,
3
],
"MemoryMiB": 1024,
"State": "RUNNING",
"Flags": "DEBUG_MODE"
}
]參數說明
參數 | 說明 |
EnclaveID | 標識Enclave的唯一ID。 |
ProcessID | 執行個體中Enclave管理進程的PID。 |
EnclaveCID | Enclave的CID地址。 |
NumberOfCPUs | 執行個體分配給Enclave的vCPU數量。 |
CPUIDs | 執行個體分配給Enclave的vCPU ID列表。 |
MemoryMiB | 執行個體分配給Enclave的記憶體大小,單位:MiB。 |
State | Enclave的目前狀態,可能值為 |
Flags | Enclave是否在偵錯模式下運行,可能值為DEBUG_MODE或NONE。 |
console:擷取Enclave偵錯模式輸出資訊
該子命令用於擷取一個正在啟動並執行指定Enclave的輸出內容,以便於排查Enclave應用程式的問題。
該子命令的輸出就是Enclave運行時向標準輸出列印的內容,無額外資訊,故以下不再對命令輸出進行說明。
僅可用於帶有--debug-mode參數啟動的偵錯模式Enclave。
用法
enclave-cli console --enclave-id <enclave-id>參數說明
參數 | 是否必選 | 類型 | 說明 |
| 是 | String | 指定要擷取輸出內容的Enclave ID |
請求樣本
本樣本展示如何擷取ID為12345678-1234-5678-1234-12345678****-enc1在偵錯模式下,Enclave的運行時輸出內容。
enclave-cli console --enclave-id 12345678-1234-5678-1234-12345678****-enc1返回樣本
本命令會輸出此Enclave的核心開機記錄和應用程式運行時輸出。當Enclave運行正常時,其輸出應為如下所示內容。
[ 1] Hello from the enclave side!
[ 2] Hello from the enclave side!
[ 3] Hello from the enclave side!
...terminate-enclave:終止Enclave
該子命令用於終止一個正在啟動並執行Enclave。
用法
enclave-cli terminate-enclave --enclave-id <enclave-id>參數說明
參數 | 是否必選 | 類型 | 說明 |
| 是 | String | 指定要擷取輸出內容的Enclave ID |
請求樣本
本樣本展示如何終止運行ID為12345678-1234-5678-1234-12345678****-enc1的Enclave。
enclave-cli terminate-enclave --enclave-id 12345678-1234-5678-1234-123456781234-enc1返回樣本
Successfully terminated enclave 12345678-1234-5678-1234-123456781234-enc1.
{
"EnclaveID": "12345678-1234-5678-1234-123456781234-enc1",
"Terminated": true
}參數說明
參數 | 說明 |
EnclaveID | 標識Enclave的唯一ID。 |
Terminated | Enclave是否成功終止運行。可能值: |
相關文檔
當使用Enclave CLI子命令時,可能返回的錯誤碼。關於錯誤說明,請參見錯誤碼。