《云原生机密计算最佳实践白皮书》——06运行时底座——Intel vSGX:Intel SGX虚拟化——Intel SGX虚拟机最佳实践(3) https://developer.aliyun.com/article/1231119?groupCode=aliyun_linux
步骤三:启动 SGX Guest
启动方式一:使用 QEMU 命令行启动
请输入以下 QEMU 命令来启动 SGX Guest。
/usr/libexec/qemu-kvm \ -enable-kvm \ -cpu host,+sgx-provisionkey -smp 8,sockets=1 -m 16G -no-reboot \ -drive fifile=$HOME/vsgx/AnolisOS-8.6-x86_64-ANCK.qcow2,if=none,id=disk0,format=qcow2 \ -device virtio-scsi-pci,id=scsi0,disable-legacy=on,iommu_platform=true -device scsi-hd,drive= disk0 -nographic \ -monitor pty -monitor unix:monitor,server,nowait \ -object memory-backend-epc,id=mem1,size=64M,prealloc=on \ -M sgx-epc.0.memdev=mem1,sgx-epc.0.node=0
请输入步骤二设置的用户名和密码,进入SGX Guest。
localhost login: root Password: 123456
启动方式二:使用 virsh 启动 sgx guest
virsh 是用于管理 虚拟化环境中的客户机和 Hypervisor 的命令行工具,与 virt-manager 等工具类似,它也是通过 libvirt API 来实现虚拟化的管理。virsh 是完全在命令行文本模式下运行的用户态工具,它是系统管理
员通过脚本程序实现虚拟化自动部署和管理的理想工具之一。
安装 libvirt
说明:目前 Anolis 的 libvirt 不支持 sgx 功能,需要打上 intel 的 6 个 patch。目前基于intel 提供的代
码自行打包,由 inclavare-containers repo 进行管理。
cd $HOME/vsgx && \ wget https://mirrors.openanolis.cn/inclavare-containers/bin/anolis8.6/libvirt-8.5.0/libvirt -with-vsgx-support.tar.gz && \ tar zxvf libvirt-with-vsgx-support.tar.gz && \ cd libvirt-with-vsgx-support && \ yum localinstall -y *.rpm
在 libvirt 中配置 QEMU
在 QEMU 中构建英特尔 SGX 环境,需要访问以下设备:
• /dev/sgx_enclave 启动enclave • /dev/sgx_provision 启动供应认证enclave (PCE) • /dev/sgx_vepc 分配 EPC 内存页
libvirt 默认启用的 cgroup 控制器将拒绝访问这些设备文件。编辑 /etc/libvirt/qemu.conf 并更改 cgroup_device_acl 列表已包括所有三个:
cgroup_device_acl = [ "/dev/null", "/dev/full", "/dev/zero", "/dev/random", "/dev/urandom", "/dev/ptmx", "/dev/kvm", "/dev/rtc","/dev/hpet", "/dev/sgx_enclave", "/dev/sgx_provision", "/dev/sgx_vepc" ]
QEMU 还需要读取和写入 /dev/sgx_vepc 设备,该设备由 root 拥有,文件模式为 600。这意味着您必须将 QEMU 配置为以 root 身份运行。 请编辑 /etc/libvirt/qemu.conf ,并设置用户参数。
user =“root”
进行这些更改后,您需要重新启动 libvirtd 服务:
systemctl restart libvirtd
配置 NAT 网络
重启 libvirtd 服务之后,请检查当前的网络设置。
# virsh net-list --all 名称 状态 自动开始 持久 --------------------------------------- default 活动 否 否
libvirt 默认使用了一个名为 default 的 NAT 网络,这个网络默认使用 virbr0 作为桥接接口,使用 dnsmasq 来为使用 nat 网络的虚拟机提供 dns 及 dhcp 服务。
如果您需要自定义 libvirt 虚拟网络,请参考libvirt 网络管理。
《云原生机密计算最佳实践白皮书》——06运行时底座——Intel vSGX:Intel SGX虚拟化——Intel SGX虚拟机最佳实践(5) https://developer.aliyun.com/article/1231117?groupCode=aliyun_linux