全部產品
Search
文件中心

Elastic Compute Service:Enclave CLI子命令說明

更新時間:Jun 19, 2024

本文介紹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> ]

參數說明

參數

是否必選

類型

說明

--docker-uri

String

指定Docker倉庫中已有Docker鏡像的資源標識符,格式為<repository>:<tag>,用於產生Enclave鏡像。

若同時指定了--docker-dir參數,則將以--docker-uri指定的URI在本地建立Docker鏡像,再用它產生Enclave鏡像。

--docker-dir

String

指定包含Dockerfile的本地目錄路徑,以建立用於產生Enclave鏡像的Docker鏡像。

--output-file

String

指定產生的Enclave鏡像的檔案名稱。

--private-key

String

指定用於對Enclave鏡像檔案簽名的私密金鑰檔案(PEM格式)。

若指定了此參數,必須同時指定--signing-certificate參數。這樣,Enclave CLI就會產生一個包含簽名的Enclave鏡像檔案,並且本命令的輸出會增加額外的PCR12,即簽署憑證的基準度量值,在遠程證明過程中可用於驗證Enclave鏡像檔案的構建者是否可信。

--signing-certificate

String

指定用於對Enclave鏡像檔案簽名的認證檔案(PEM格式),必須與--private-key參數同時使用。

請求樣本

本樣本展示如何將本地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
}

參數說明

參數

是否必選

類型

說明

--config

String

指定存放Enclave啟動參數的JSON設定檔路徑。

若指定了此參數,則不能指定其他任何參數。此時所有參數都在該設定檔中以JSON格式指定。

--cpu-count

int

指定分配給Enclave的vCPU數量,其數量必須小於執行個體的vCPU總數,以確保執行個體自身留有可用的vCPU。

該參數是否為必選取決於--cpu-ids參數設定:

  • 若未指定--cpu-ids參數,則--cpu-count為必選。

  • 若已指定--cpu-ids參數,則不能指定--cpu-count

說明

若執行個體未啟用超執行緒,則Enclave的vCPU數最少可為1;若執行個體啟用了超執行緒(預設),則為了保證安全性,Enclave的vCPU數必須為偶數,至少為2,故執行個體必須至少為4 vCPU。您可以通過運行lscpu命令查看Thread(s) per core這一項的值是否為2來檢查執行個體是否開啟超執行緒。

--cpu-ids

int

指定分配給Enclave的vCPU ID列表,其數量必須小於執行個體的vCPU總數,以確保執行個體自身留有可用的vCPU。

若執行個體啟用超執行緒,則vCPU數量必須為偶數,具體說明見--cpu-count參數說明。

該參數是否為必選取決於--cpu-count參數設定:

  • 若未指定--cpu-count參數,則--cpu-ids為必選。

  • 若已指定--cpu-count參數,則不能指定--cpu-ids

--memory

int

指定分配給Enclave的記憶體大小,單位:MiB。64 MiB≤memory<執行個體的記憶體總大小,並且必須滿足Enclave啟動並執行最小記憶體。

--eif-path

String

指定.eif格式的Enclave鏡像檔案路徑。

--enclave-cid

int

指定Enclave在vsock通訊中的CID地址,該CID必須至少為4。

若未指定該參數,則系統會為Enclave分配一個可用的CID。

--debug-mode

String

指定該參數表示令Enclave在偵錯模式下運行,未指定該參數則表示令Enclave在正常模式下運行。

只有在偵錯模式下,您才能通過enclave-cli console命令擷取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的目前狀態,可能值為RUNNINGTERMINATING

Flags

Enclave是否在偵錯模式下運行,可能值為DEBUG_MODE或NONE。

console:擷取Enclave偵錯模式輸出資訊

該子命令用於擷取一個正在啟動並執行指定Enclave的輸出內容,以便於排查Enclave應用程式的問題。

該子命令的輸出就是Enclave運行時向標準輸出列印的內容,無額外資訊,故以下不再對命令輸出進行說明。

說明

僅可用於帶有--debug-mode參數啟動的偵錯模式Enclave。

用法

enclave-cli console --enclave-id <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>

參數說明

參數

是否必選

類型

說明

--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是否成功終止運行。可能值:truefalse

相關文檔

當使用Enclave CLI子命令時,可能返回的錯誤碼。關於錯誤說明,請參見錯誤碼