このトピックでは、Enclave CLI を使用して Elastic Compute Service (ECS) インスタンスにエンクレーブを作成する方法について説明します。 エンクレーブを作成した後、ビジネス要件に基づいてエンクレーブを開始または停止できます。
手順
Enclave をサポートし、エンクレーブのリソースを事前に割り当てた ECS インスタンスを作成します。
詳細については、「エンクレーブを使用して機密コンピューティング環境を構築する」をご参照ください。
エンクレーブイメージファイルを作成します。
Enclave CLI をインストールすると、
/usr/share/ali-enclaves/examples/hello
ディレクトリにサンプル Dockerfile があります。 この Dockerfile を使用して、エンクレーブイメージファイルを作成できます。hello
という名前でlatest
というタグが付いた Docker イメージを作成するには、次のコマンドを実行します。sudo docker build /usr/share/ali-enclaves/examples/hello -t hello
Docker イメージが作成されたかどうかを確認するには、次のコマンドを実行します。
sudo docker images hello:latest
コマンド出力に、
latest
というタグが付いたhello
Docker イメージの情報が含まれている場合、Docker イメージは作成されています。Enclave CLI を使用して
hello.eif
エンクレーブイメージファイルを作成するには、次のコマンドを実行します。sudo enclave-cli build-enclave --docker-uri hello:latest --output-file hello.eif
エラーが返されない場合、
hello.eif
エンクレーブイメージファイルが作成されます。 Enclave CLI によって返されるプラットフォーム構成レジスタ (PCR) は、エンクレーブに固有のハッシュを示します。 リモート構成証明にハッシュを使用できます。 コマンド出力の例:Start building the Enclave Image... Enclave Image successfully created. { "Measurements": { "HashAlgorithm": "Sha256 { ... }", "PCR11": "dc5dcd841f87e2b6c0e65a11b46b25ebe2999a8a5f0318e10c0175b60000****", "PCR8": "2c6944f47864f1f8ab276000a9f057fcdf9f56a015c0bc5e2339f24b0000****", "PCR9": "8ef5fe53a7709cc1c1a0aa7b5149a55bcd524cccc9f43e7a3baf44ca0000****" } }
エンクレーブを実行するには、次のコマンドを実行します。
作成した
hello.eif
イメージファイルを使用して、エンクレーブを起動できます。 次のコマンドは、エンクレーブイメージファイルに基づいて、デバッグモードでエンクレーブを起動します。 エンクレーブには 2 つの vCPU と 1024 MiB のメモリがあります。 その他のパラメーターの詳細については、「Enclave CLI のサブコマンド」の「run-enclave」セクションをご参照ください。sudo enclave-cli run-enclave --cpu-count 2 --memory 1024 --eif-path hello.eif --debug-mode
次のようなコマンド出力は、エンクレーブが実行されていることを示します。 次の出力例では、エンクレーブの ID は
4f39d839-0f7a-4bee-a09d-93b8b1d6****-enc1
です。 Enclave CLI を使用してエンクレーブを管理する場合は、この ID を指定する必要があります。説明エンクレーブのコンテキスト識別子 (CID) は 4 です。CID は、エンクレーブの vsock アドレスを定義するために自動的に割り当てられます。 vsock アドレスは、非デバッグモードのエンクレーブと、エンクレーブが作成されたインスタンスとの間に接続を確立するためにのみ使用できます。
Start allocating memory... Started enclave with enclave-cid: 4, memory: 1024 MiB, cpu-ids: [2, 3] { "EnclaveID": "4f39d839-0f7a-4bee-a09d-93b8b1d6****-enc1", "ProcessID": 1234, "EnclaveCID": 4, "NumberOfCPUs": 2, "CPUIDs": [ 2, 3 ], "MemoryMiB": 1024 }
エンクレーブの状態を確認するには、次のコマンドを実行します。
enclave-cli describe-enclaves
このコマンドは、エンクレーブ ID、vCPU の数、メモリサイズ、エンクレーブの状態などの情報を返します。 エンクレーブが想定どおりに動作している場合、返される状態は
RUNNING
です。[ { "EnclaveID": "4f39d839-0f7a-4bee-a09d-93b8b1d6****-enc1", "ProcessID": 1234, "EnclaveCID": 4, "NumberOfCPUs": 2, "CPUIDs": [ 2, 3 ], "MemoryMiB": 1024, "State": "RUNNING", "Flags": "DEBUG_MODE" } ]
また、次のコマンドを実行して、デバッグモードで実行されているエンクレーブのデバッグ出力を表示することもできます。
enclave-cli console --enclave-id 4f39d839-0f7a-4bee-a09d-93b8b1d6****-enc1
エンクレーブが想定どおりに動作している場合、次のようなコマンド出力が返されます。
[ 1] Hello from the enclave side! [ 2] Hello from the enclave side! [ 3] Hello from the enclave side! ...
説明このコマンド出力例では、
[ N] Hello from the enclave side!
メッセージが 5 秒ごとにエンクレーブに対して返されます。 N は、メッセージが返された回数を示します。エンクレーブを停止するには、次のコマンドを実行します。
sudo enclave-cli terminate-enclave --enclave-id 4f39d839-0f7a-4bee-a09d-93b8b1d6****-enc1
次のようなコマンド出力は、エンクレーブが停止されたことを示します。
Successfully terminated enclave 4f39d839-0f7a-4bee-a09d-93b8b1d6****-enc1. { "EnclaveID": "12345678-1234-5678-1234-12345678****-enc1", "Terminated": true }