基于pre-attestation使用机密容器
本文主要为您介绍如何在kata环境中基于海光安全加密虚拟化功能CSV(China Secure Virtualization)技术,通过pre-attestaion 认证方式,启动一个租户的加密容器镜像。
前提条件
请参考《基于runtime-attestation使用机密容器》指南的前提条件一节,完成对系统环境的检查和配置。
背景信息
①②③:containerd 调用 kata-runtime创建CSV VM,kata-runtime调用 image-rs 下载加密镜像;
④⑤:kata-runtime 获取 CSV VM 的 launch_measurement发送给 gop-server;
⑥⑦:gop-server 调 用 hag 对 launch_measurement 计算和校验; 验证 gop-server 调用 hag 对 key 进行加密、形成 secret 和 secret_header,发送给 kata-runtime
⑧:kata-runtime 调用 qemu 向 CSV VM 注入 secret;CSV VM 利用固件解密 secret 获取 key 存入指定位置;
⑨:CSV VM 中的 attestation-agent 获取 key,image-rs 使用 key 解密镜像;
⑩:启动镜像运行 workload
步骤一:配置权限
请参考《基于runtime-attestation使用机密容器》指南的步骤一,完成配置权限。
步骤二:安装kata 环境
Kata Containers是一个开源的、致力于用轻量级虚拟机构建一个安全的容器运行时的实现,这些虚拟机在感觉和执行上与容器类似,但使用硬件虚拟化技术作为第二层防御,提供了更强的工作负载隔离。
关于项目的更多信息,请参见kata-container。
1. 安装kata-containers
请执行以下命令,安装kata-containers。
yum-confifig-manager --add-repo https://mirrors.openanolis.org/inclavare-containers/ano lis8.4 && \ rpm --import https://mirrors.openanolis.org/inclavare-containers/anolis8.4/RPM-GPG-KEY -rpm-sign && \ yum install -y kata-static
2. 安装qemu
pre-attestation过程中,CSV VM的measurement计算需要qemu支持kernel-hashes,在qemu 6.2.0之后开始支持kernel-hashes标志,此处提供的qemu是基于6.2.0版本构建。
yum install -y qemu-system-x86_64
3. 安装guest kernel,initrd,OVMF
ccv0-guest中包含kata运行CSV VM所需的guest kernel、initrd、OVMF、cmdline等文件。 其中:
guest的rootfs和kernel,需使用efifi_secret的内核模块以支持向文件系统中注入secret,加入AA并修改AA设置,自行构建请参考guest Rootfs and Kernel ;
这里提供的OVMF是基于f0f3f5aae7c4d346ea5e24970936d80dc5b60657 进行构建的,也可以使用edk2-stable202108后的版本自行构建,以支持CSV.
yum -y install ccv0-guest
cmdline中记录了CSV VM启动时所需的参数信息,需根据实际使用情况进行修改。可参考以下命令:
cat <<EOF | sudo tee /opt/csv/ccv0-guest/cmdline tsc=reliable no_timer_check rcupdate.rcu_expedited=1 i8042.direct=1 i8042.dumbkbd=1 i8042.nopnp=1 i8042.noaux=1 noreplace-smp reboot=k console=hvc0 console=hvc1 cryptomgr.notests net.ifnames=0 pci=lastbus=0 quiet panic=1 nr_cpus=`cat /proc/cpuinfo| grep processor | wc -l` scsi_mod.scan=none agent.confifig_fifile=/etc/agent-confifig.toml EOF
4. 安装kata-runtime
pre-attestation使用的kata-runtime,需要基于confifidential-containers 项目的 kata-containers-CCv0 的CCv0分支,并加入CCv0: SEV prelaunch attestation by jimcadden · Pull Request #3025 · kata-containers/kata-containers · GitHub上的pre-attestation 的支持patch f682220d 和 d2c3f372; 同时也需要使用修改后的CPUID 以支持Hygon CPU。
yum -y install kata-runtime
5. 配置kata-runtime
执行以下命令,配置kata 运行时。
这里修改了kata-runtime默认配置中的qemu、guest kernel && initrd && OVMF路径;
使能confifidential-guest选项并加入guest_attestation_proxy、guest_attestation_keyset、attestation-agent-confifig等配置;
将默认内存大小由2048调整为8000;
将共享文件系统由"virtio-fs"调整为"virtio-9p"。
mkdir -p /etc/kata-containers/ && \ cp /opt/kata/share/defaults/kata-containers/confifiguration.toml /etc/kata-containers/ && \ cd /etc/kata-containers/ && \ sed -i 's/opt\/kata\/bin\/qemu-system-x86_64/opt\/qemu\/bin\/qemu-system-x86_64/' confifiguration.toml && \ sed -i 's/kata\/share\/kata-containers\/vmlinux.container/csv\/ccv0-guest\ /vmlinuz-5.15.0-rc5+/' confifiguration.toml && \ sed -i 's/image = \"\/opt\/kata\/share\/kata-containers\/kata-containers/initrd = \"\/opt\/csv\/ccv0-guest\/initrd.pre/' confifiguration.toml && \ sed -i 's/\# confifidential_guest/confifidential_guest/' confifiguration.toml && \ sed -i '/confifidential_guest/a\guest_attestation = true\nguest_attestation_proxy = \"local host:50051\"\nguest_attestation_keyset = \"KEYSET-1\"' confifiguration.toml && \ sed -i 's/kernel_params = \"\"/kernel_params = \"agent.confifig_fifile=\/etc\/agent confifig.toml\"/' confifiguration.toml && \ sed -i 's/fifirmware = \"\"/fifirmware = \"\/opt\/csv\/ccv0-guest\/OVMF.fd\"/' confifiguration.toml && \ sed -i 's/default_memory = 2048/default_memory = 8000/' confifiguration.toml && \ sed -i 's/shared_fs = \"virtio-fs\"/shared_fs = \"virtio-9p\"/' confifiguration.toml && \ sed -i 's/\#service_offlfflffload/service_offlfflffload/' confifiguration.toml
步骤三:安装containerd
请参考《基于runtime-attestation使用机密容器》指南的步骤三来安装containerd。
步骤四:搭建运行环境
请参考kubernetes官方指南安装Kubernetes cluster。搭建kubenetes运行环境。
《云原生机密计算最佳实践白皮书》——06运行时底座——海光CSV机密容器——基于pre-attestation使用机密容器(2) https://developer.aliyun.com/article/1231282?groupCode=aliyun_linux