快速入门
以下教程将引导您了解并使用QingTian Enclave特性,包括如何启动QingTian Enclave父虚拟机,如何构建QingTian Enclave镜像文件,如何查询正在运行的QingTian Enclave,以及停止QingTian Enclave。
- 准备一台支持QingTian Enclave特性的虚拟机实例
- 在购买虚拟机时,您需要在高级选项中勾选Enclave,并选择Linux作为系统镜像。建议使用HCE2.0镜像。
- 连接到父虚拟机,请参考华为云ECS用户指南。
- 在父虚拟机中安装qt CLI工具,并在配置文件中按需设置资源隔离参数,然后启动资源隔离服务。使用qt CLI工具需要安装必要的python库,详情请见QingTian CLI(qt CLI)。
- 您可以安装qt CLI工具和其他必要rpm包:
yum install qt-enclave-bootstrap yum install virtio-qtbox yum install qingtian-tool
- 在配置文件中按需配置隔离参数,本教程内使用默认1G内存,2个vCPU。然后启动隔离服务:
systemctl start qt-enclave-env
- 您可以安装qt CLI工具和其他必要rpm包:
- 在父虚拟机中安装Docker程序,我们推荐使用二进制的方式进行Docker安装,可以在Docker官方网站下载需要版本。这里以27.0.1为例:
wget https://download.docker.com/linux/static/stable/x86_64/docker-27.0.1.tgz
对下载的压缩包进行解压操作:
tar zxf docker-27.0.1.tgz
解压完成后将docker目录下所有文件复制到/usr/bin目录下:
cp docker/* /usr/bin
启动docker服务,并将日志等级设置为error等级:
dockerd -l error --config-file ${/path/to/your/daemon.json} &
在启动dockerd时需要配置额外配置文件:${/path/to/your/daemon.json}
详细内容,请参考设置镜像加速器。
验证Docker版本:
docker version
运行hello-world容器,查看Docker是否安装正确:
docker run hello-world
- 构建QingTian Enclave镜像
本教程中,使用以下hello_enclave.sh脚本作为QingTian Enclave应用程序:
#!/bin/bash while true do echo "hello enclave!" sleep 2 done
Dockerfile内容如下:
FROM ubuntu:latest COPY hello_enclave.sh /root/hello_enclave.sh CMD ["/root/hello_enclave.sh"]
确认脚本有可执行权限:
chmod +x hello_enclave.sh
构建一个名为hello-enclave的Docker镜像:
docker build -f Dockerfile -t hello-enclave .
使用qt enclave make-img命令将Docker镜像转换为名为hello-enclave.eif的QingTian Enclave镜像:
qt enclave make-img --docker-uri hello-enclave --eif hello-enclave.eif
输出为:
# qt enclave make-img --docker-uri hello-enclave --eif hello-enclave.eif { "digest": "SHA384", "PCR0": "63bf78ece7d2388ff773d0cad2ebc9a3070359db46d567ba271ff8adfb8b0b091be4ff4d5dda3f1c83109096e3656f3b", "PCR8": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }
现在已经构建了名为hello-enclave.eif的QingTian Enclave镜像,命令包含了一系列PCR值,包括PCR0和PCR8(该例子中制作镜像时并没有指定证书和密钥,所以PCR8为0)。这些哈希值是在Enclave镜像构建时产生的测量值,它们通常作为预期的测量值(相对于证明文档中所包含的启动时测量值而言)。
qt enclave start --mem 1024 --cpus 2 --eif hello-enclave.eif --cid 4 --debug-mode
该实例运行在debug-mode,关于debug-mode详情可见qt enclave子命令介绍。
您会看到以下输出:
# qt enclave start --cpus 2 --mem 1024 --eif hello-enclave.eif --cid 4 --debug-mode Started enclave with EnclaveID : 0, EnclaveCID : 4, NumberOfCPUs : 2, MemoryMiB : 1024 { "EnclaveID": 0, "EnclaveCID": 4, "NumberOfCPUs": 2, "MemoryMiB": 1024, "LaunchMode": "debug" }
在该教程中,我们为该QingTian Enclave实例分配了2个vCPU和1024M内存,并指定其cid为4,该cid可作为QingTian Enclave实例与父虚拟机实例之间的本地套接字的IP地址。
- 查询正在运行的QingTian Enclave
按以上步骤创建完QingTian Enclave实例后,可以以下命令查询他是否在运行:
qt enclave query --enclave-id 0 # qt enclave query --enclave-id 0 [{ "EnclaveID": 0, "ProcessID": 29990, "EnclaveCID": 4, "NumberOfCPUs": 2, "MemoryMiB": 1024, "LaunchMode": "debug" }]
该命令可以用于查询QingTian Enclave相关信息,包括EnclaveID、ProcessID、EnclaveCID、vCPU数量、内存数量以及其运行模式。因为该实例是以debug模式启动的,所以可以用qt enclave console 命令查看QingTian Enclave的只读控制台输出。
hello enclave! hello enclave! hello enclave! hello enclave!
您将观察到终端每隔2秒打印一次hello enclave!。
- 停止正在运行的QingTian Enclave实例
如果您想停止运行以上的QingTian Enclave实例,可以使用以下命令:
# qt enclave stop --enclave-id 0 stop enclave 0 successfully { "EnclaveID": 0 }