更新时间:2024-12-19 GMT+08:00
分享

快速入门

以下教程将引导您了解并使用QingTian Enclave特性,包括如何启动QingTian Enclave父虚拟机,如何构建QingTian Enclave镜像文件,如何查询正在运行的QingTian Enclave,以及停止QingTian Enclave。

  1. 准备一台支持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
  2. 在父虚拟机中安装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
  3. 构建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镜像构建时产生的测量值,它们通常作为预期的测量值(相对于证明文档中所包含的启动时测量值而言)。

    • 运行QingTian Enclave实例

      现在可以使用以下命令来运行QingTian 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
    }

相关文档