Enclave CLI を使用して、ECS インスタンス上でエンクレーブのビルド、実行、検査、デバッグ、および終了を行います。
Enclave CLI をインストールした後、次のコマンドを実行してサブコマンドと使用法を確認できます。
enclave-cli --help # すべてのサブコマンドを一覧表示
enclave-cli <sub-command> --help # 特定のサブコマンドの使用法を表示
build-enclave
Docker イメージからエンクレーブイメージファイル (.eif) をビルドします。ローカルの Dockerfile ディレクトリまたは Docker リポジトリのイメージ名を指定します。
出力には、エンクレーブイメージのベースライン測定値が含まれます。リモートアテステーション中に、これらの測定値が実行時の値と比較され、エンクレーブの整合性を検証します。
Alibaba Cloud の仮想化エンクレーブでは、測定値 (プラットフォームコンフィグレーションレジスタ (PCR)) は実行時に 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 |
|
|
|
いいえ |
String |
Dockerfile を含むローカルディレクトリへのパス。エンクレーブイメージ生成用の Docker イメージをビルドするために使用します。 |
|
|
はい |
String |
エンクレーブイメージの出力ファイル名。 |
|
|
いいえ |
String |
エンクレーブイメージの署名に使用する PEM 形式の秘密鍵ファイル。
|
|
|
いいえ |
String |
エンクレーブイメージの署名に使用する PEM 形式の証明書ファイル。 |
例
Docker イメージ sample:latest からエンクレーブイメージ sample.eif をビルドします:
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 形式のエンクレーブイメージのベースライン測定値。 |
|
HashAlgorithm |
測定値の生成に使用するハッシュアルゴリズム。 |
|
PCR8 |
エンクレーブイメージの測定値。 |
|
PCR9 |
カーネルとブートローダーの測定値。 |
|
PCR11 |
The application measurement. |
run-enclave
指定した vCPU とメモリで、イメージファイルからエンクレーブを起動します。
1 つの ECS インスタンスで同時に実行できるエンクレーブは 1 つだけです。
構文
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 |
エンクレーブ起動パラメーターを含む JSON 設定ファイルへのパス。 指定した場合、ほかのパラメーターは使用しないでください。すべてのパラメーターを JSON 形式でこのファイルに定義する必要があります。 |
|
|
いいえ |
int |
エンクレーブに割り当てる vCPU 数。インスタンスの合計 vCPU 数未満である必要があります。 このパラメーターが必須かどうかは、
説明
ハイパースレッディングが無効の場合、エンクレーブは 1 vCPU を使用できます。ハイパースレッディングが有効 (デフォルト) の場合、エンクレーブには偶数の vCPU 数 (最小 2) が必要なため、インスタンスには少なくとも 4 vCPU が必要です。 |
|
|
いいえ |
int |
エンクレーブに割り当てる vCPU ID のリスト。数はインスタンスの合計 vCPU 数未満である必要があります。 ハイパースレッディングが有効な場合、vCPU 数は偶数である必要があります。詳細は このパラメーターが必須かどうかは、
|
|
|
はい |
int |
エンクレーブのメモリサイズ (MiB)。有効な値:64 MiB からインスタンスの合計メモリ未満まで。エンクレーブランタイムの最小要件も満たす必要があります。 |
|
|
はい |
String |
|
|
|
いいえ |
int |
エンクレーブの vsock CID。4 以上である必要があります。 省略した場合、システムが使用可能な CID を割り当てます。 |
|
|
いいえ |
String |
デバッグモードを有効にします。省略すると通常モードで実行します。 デバッグモードでは、 |
例:インラインパラメーターでの起動
sample.eif から、vCPU 2、メモリ 1024 MiB、CID 10 でエンクレーブを起動します:
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 |
エンクレーブ ID。 |
|
ProcessID |
エンクレーブ管理プロセスの PID。 |
|
EnclaveCID |
エンクレーブ CID。 |
|
NumberOfCPUs |
vCPU 数。 |
|
CPUIDs |
vCPU ID。 |
|
MemoryMiB |
割り当てられたメモリ (MiB)。 |
describe-enclaves
現在のインスタンス上のエンクレーブに関する情報が返されます。
構文
enclave-cli describe-enclaves
例
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 |
エンクレーブ ID。 |
|
ProcessID |
エンクレーブ管理プロセスの PID。 |
|
EnclaveCID |
エンクレーブ CID。 |
|
NumberOfCPUs |
vCPU 数。 |
|
CPUIDs |
vCPU ID。 |
|
MemoryMiB |
割り当てられたメモリ (MiB)。 |
|
State |
エンクレーブの状態。有効な値: |
|
Flags |
デバッグモードのフラグ。有効な値: |
console
トラブルシューティングのために、実行中のエンクレーブからカーネルの起動ログやアプリケーション出力などの実行時出力を読み取ります。
--debug-mode でエンクレーブを起動している必要があります。
構文
enclave-cli console --enclave-id <enclave-id>
パラメーター
|
パラメーター |
必須 |
型 |
説明 |
|
|
はい |
String |
エンクレーブ ID。 |
例
ID が 12345678-1234-5678-1234-12345678****-enc1 のデバッグモードのエンクレーブから出力を読み取ります:
enclave-cli console --enclave-id 12345678-1234-5678-1234-12345678****-enc1
出力:
[ 1] Hello from the enclave side!
[ 2] Hello from the enclave side!
[ 3] Hello from the enclave side!
...
terminate-enclave
実行中のエンクレーブを終了し、リソースを解放します。
構文
enclave-cli terminate-enclave --enclave-id <enclave-id>
パラメーター
|
パラメーター |
必須 |
型 |
説明 |
|
|
はい |
String |
エンクレーブ ID。 |
例
エンクレーブ 12345678-1234-5678-1234-123456781234-enc1 を終了します:
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 |
終了したエンクレーブ ID。 |
|
Terminated |
エンクレーブが終了したかどうか。有効な値: |
関連ドキュメント
Enclave CLI のサブコマンドは エラーコード を返す場合があります。