Compile, execute, inspecione, depure e encerre enclaves em instâncias ECS com a Enclave CLI.
Após instalar a Enclave CLI, execute os comandos abaixo para visualizar os subcomandos e o modo de uso:
enclave-cli --help # List all subcommands
enclave-cli <sub-command> --help # Show usage for a specific subcommand
build-enclave
Gera um arquivo de imagem de enclave (.eif) a partir de uma imagem docker. Especifique um diretório local contendo o Dockerfile ou o nome de uma imagem em um repositório docker.
A saída inclui medições de base da imagem do enclave. Durante o atestado remoto, essas medições são comparadas com os valores de tempo de execução para verificar a integridade do enclave.
Nos enclaves de virtualização do Alibaba Cloud, as medições (Platform Configuration Registers ou PCRs) são geradas por um vTPM em tempo de execução e estão em conformidade com o TPM 2.0.
Uso
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> ]
Parâmetros
|
Parâmetro |
Obrigatório |
Tipo |
Descrição |
|
|
Sim |
String |
URI da imagem docker no formato Caso |
|
|
Não |
String |
Caminho para um diretório local que contém um Dockerfile. Utilizado para compilar a imagem docker necessária à geração da imagem do enclave. |
|
|
Sim |
String |
Nome do arquivo de saída para a imagem do enclave. |
|
|
Não |
String |
Arquivo de chave privada no formato PEM para assinar a imagem do enclave. Requer |
|
|
Não |
String |
Arquivo de certificado no formato PEM para assinar a imagem do enclave. Deve ser usado em conjunto com |
Exemplo
Crie uma imagem de enclave sample.eif a partir da imagem docker sample:latest:
enclave-cli build-enclave --docker-uri sample:latest --output-file sample.eif
Saída
Start building the Enclave Image...
Enclave Image successfully created.
{
"Measurements": {
"HashAlgorithm": "Sha256 { ... }",
"PCR11": "dc5dcd841f87e2b6c0e65a11b46b25ebe2999a8a5f0318e10c0175b60000****",
"PCR8": "2c6944f47864f1f8ab276000a9f057fcdf9f56a015c0bc5e2339f24b0000****",
"PCR9": "8ef5fe53a7709cc1c1a0aa7b5149a55bcd524cccc9f43e7a3baf44ca0000****"
}
}
Campos de saída
|
Parâmetro |
Descrição |
|
Measurements |
Medições de base da imagem do enclave em formato json. |
|
HashAlgorithm |
Algoritmo de hash utilizado para gerar as medições. |
|
PCR8 |
Medição da imagem do enclave. |
|
PCR9 |
Medição do kernel e do bootloader. |
|
PCR11 |
Medição da aplicação. |
run-enclave
Inicia um enclave a partir de um arquivo de imagem, utilizando as vCPUs e a memória especificadas.
Apenas um enclave pode ser executado por vez em uma instância ECS.
Sintaxe
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> ]
Alternativamente, especifique todos os parâmetros em um arquivo de configuração 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
}
Parâmetros
|
Parâmetro |
Obrigatório |
Tipo |
Descrição |
|
|
Não |
String |
Caminho para um arquivo de configuração json com os parâmetros de inicialização do enclave. Se especificado, não utilize outros parâmetros. Todos os parâmetros devem estar definidos neste arquivo em formato json. |
|
|
Não |
int |
Quantidade de vCPUs a serem atribuídas ao enclave. Deve ser inferior ao total de vCPUs da instância. A obrigatoriedade deste parâmetro depende da especificação de
Nota
Com o hyper-threading desativado, o enclave pode usar 1 vCPU. Com o hyper-threading ativado (padrão), o enclave requer um número par de vCPUs (mínimo de 2), portanto a instância deve ter pelo menos 4 vCPUs. Execute |
|
|
Não |
int |
Lista de IDs de vCPU a serem atribuídos ao enclave. A quantidade deve ser inferior ao total de vCPUs da instância. Quando o hyper-threading estiver ativado, a contagem de vCPUs deve ser par. Consulte A obrigatoriedade deste parâmetro depende da especificação de
|
|
|
Sim |
int |
Tamanho da memória para o enclave em MiB. Valores válidos: de 64 MiB até um valor inferior à memória total da instância. Também deve atender ao requisito mínimo de tempo de execução do enclave. |
|
|
Sim |
String |
Caminho para o arquivo de imagem do enclave |
|
|
Não |
int |
CID vsock para o enclave. Deve ser no mínimo 4. Se omitido, o sistema atribui um CID disponível. |
|
|
Não |
String |
Ativa o modo de depuração. Omita para executar no modo normal. No modo de depuração, use |
Exemplo: Iniciar com parâmetros inline
Inicie um enclave a partir de sample.eif com 2 vCPUs, 1.024 MiB de memória e CID 10:
enclave-cli run-enclave --cpu-count 2 --memory 1024 --eif-path sample.eif --enclave-cid 10
Saída:
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
}
Campos de saída
|
Campo |
Descrição |
|
EnclaveID |
ID do enclave. |
|
ProcessID |
PID do processo de gerenciamento do enclave. |
|
EnclaveCID |
CID do enclave. |
|
NumberOfCPUs |
Quantidade de vCPUs. |
|
CPUIDs |
IDs das vCPUs. |
|
MemoryMiB |
Memória alocada em MiB. |
describe-enclaves
Retorna informações sobre o enclave na instância atual.
Sintaxe
enclave-cli describe-enclaves
Exemplo
enclave-cli describe-enclaves
Saída:
[
{
"EnclaveID": "12345678-1234-5678-1234-123456781234-enc1",
"ProcessID": 1234,
"EnclaveCID": 10,
"NumberOfCPUs": 2,
"CPUIDs": [
2,
3
],
"MemoryMiB": 1024,
"State": "RUNNING",
"Flags": "DEBUG_MODE"
}
]
Campos de saída
|
Campo |
Descrição |
|
EnclaveID |
ID do enclave. |
|
ProcessID |
PID do processo de gerenciamento do enclave. |
|
EnclaveCID |
CID do enclave. |
|
NumberOfCPUs |
Quantidade de vCPUs. |
|
CPUIDs |
IDs das vCPUs. |
|
MemoryMiB |
Memória alocada em MiB. |
|
State |
Estado do enclave. Valores válidos: |
|
Flags |
Sinalizador do modo de depuração. Valores válidos: |
console
Lê a saída de tempo de execução de um enclave em funcionamento para solução de problemas, incluindo logs de inicialização do kernel e saída da aplicação.
Requer que o enclave tenha sido iniciado com --debug-mode.
Sintaxe
enclave-cli console --enclave-id <enclave-id>
Parâmetros
|
Parâmetro |
Obrigatório |
Tipo |
Descrição |
|
|
Sim |
String |
ID do enclave. Obtenha-o na saída de |
Exemplo
Leia a saída de um enclave em modo de depuração com o ID 12345678-1234-5678-1234-12345678****-enc1:
enclave-cli console --enclave-id 12345678-1234-5678-1234-12345678****-enc1
Saída:
[ 1] Hello from the enclave side!
[ 2] Hello from the enclave side!
[ 3] Hello from the enclave side!
...
terminate-enclave
Encerra um enclave em execução e libera seus recursos.
Sintaxe
enclave-cli terminate-enclave --enclave-id <enclave-id>
Parâmetros
|
Parâmetro |
Obrigatório |
Tipo |
Descrição |
|
|
Sim |
String |
ID do enclave. Obtenha-o na saída de |
Exemplo
Encerre o enclave 12345678-1234-5678-1234-123456781234-enc1:
enclave-cli terminate-enclave --enclave-id 12345678-1234-5678-1234-123456781234-enc1
Saída:
Successfully terminated enclave 12345678-1234-5678-1234-123456781234-enc1.
{
"EnclaveID": "12345678-1234-5678-1234-123456781234-enc1",
"Terminated": true
}
Campos de saída
|
Campo |
Descrição |
|
EnclaveID |
ID do enclave encerrado. |
|
Terminated |
Indica se o enclave foi encerrado. Valores válidos: |
Referências
Os subcomandos da Enclave CLI podem retornar códigos de erro.