AMD SEV机密容器
本文主要为您介绍如何基于AMD安全加密虚拟化功能SEV(AMD Secure Encrypted Virtualization)技术,通过远程证明启动一个租户的加密容器镜像。
前提条件
1. 安装Anolis 8.6 操作系统
请在支持AMD CPU的硬件设备上,参考Anolis 8.6 GA说明文档安装anolis 8.6 GA。
2. 升级内核到5.10
由于 Anlois 8.6 的默认内核版本是4.19,请升级kernel 到5.10版本。
• 添加 yum 源配置参数,添加Anolis 的 Experimental repo。
yum install yum-utils yum-confifig-manager --add-repo https://mirrors.openanolis.cn/anolis/8/kernel-5.10/x86_64 /os/
• 升级内核
yum update kernel
• 重启机器,并重新查看机器的操作系统发行编号。
reboot uname -r
• 预期结果如下:
5.10.134-13_rc2.an8.x86_64
3. 使能SEV
注意:在 Anolis 8.6 中,grub 版本默认为1:2.02-123.0.2.an8_6.8。此版本存在BUG,如果直接进行使能sev的操作,会导致机器重启后无法进入系统的情况。请采用降级grub的workround方法。
• 修改 yum 源,在 Anolis 8.5 中才有低版本的 grub。
cd /etc/yum.repos.d sed -i 's/$releasever/8.5/' AnolisOS-BaseOS.repo
• 降级 grub。
um downgrade grub2-efifi
• 查看 grub 的版本,预期结果如下:
# yum list | grep grub grub2-common.noarch 1:2.02-106.0.1.an8 @BaseOS grub2-efifi-x64.x86_64 1:2.02-106.0.1.an8 @BaseOS grub2-pc.x86_64 1:2.02-106.0.1.an8 @BaseOS grub2-pc-modules.noarch 1:2.02-106.0.1.an8 @BaseOS grub2-tools.x86_64 1:2.02-106.0.1.an8 @BaseOS grub2-tools-efifi.x86_64 1:2.02-106.0.1.an8 @BaseOS grub2-tools-extra.x86_64 1:2.02-106.0.1.an8 @BaseOS grub2-tools-minimal.x86_64 1:2.02-106.0.1.an8 @BaseOS
使能SEV和SME
默认情况下SEV和SME没有使能,请输入以下内核命令行进行使能:
grubby --update-kernel=ALL --args="mem_encrypt=on kvm_amd.sev=1"
重启机器。
reboot
重启后,请检查机器的sev使能状态。
dmesg | grep -i sev
预期结果如下:
[ 6.747923] ccp 0000:4b:00.1: sev enabled [ 6.842676] ccp 0000:4b:00.1: SEV fifirmware update successful [ 6.997400] ccp 0000:4b:00.1: SEV API:1.42 build:42 [ 7.522437] SEV supported: 255 ASIDs
最后检查 SME(Secure Memory Encryption) 的状态。
dmesg | grep -i sme
预期结果如下:
[ 1.863927] AMD Memory Encryption Features active: SME
背景信息
AMD SEV Pod 级机密容器架构基于 Kata Containers 项目,最大区别是将基于普通虚拟化技术实现的轻量级 Sandbox Pod替换为基于机密计算技术实现的轻量级 TEE Pod,目的是将特定租户的整个 Pod 以及其中的容器运行在受 CPU TEE 保护的执行环境中。除此之外,TEE Pod 内部还额外集成了 image-rs 和 attestation-agent 等组件,它们负责实现容器镜像的拉取、授权、验签、解密、远程证明以及秘密注入等安全特性。
机密容器的基本运行过程为:
• 用户使用标准工具制作一个签名和/或加密的受保护的容器镜像,并上传到容器镜像仓库中。
• 用户命令 Kubernetes 启动这个受保护的容器镜像。kubelet 会向 containerd 发起创建 Pod 的 CRI 请求,containerd 则把请求转发给 kata-runtime。
• kata runtime 与 Key broker service(simple kbs)建立安全会话,并进行基于CPU TEE 硬件的身份认证与授权。KBS基于安全可信信道发送敏感数据给kata runtime。kata runtime 调用QEMU 将秘密信息注入到guest userland中。之后再调用 QEMU 启动 Pod。
• CPU TEE 执行初始化,最终启动 kata-agent 监听后续请求。
• kubelet 向 containerd 发起 Image Pulling 的 CRI 请求,containerd 则把请求转发给 kata-runtime,最终 kata-agent 收到请求并通过 image-rs 子模块提供的容器镜像管理功能,在 TEE 内安全地执行拉取、验签、解密、unpack 以及挂载容器镜像的操作。
《云原生机密计算最佳实践白皮书》——06运行时底座——AMD SEV机密容器(2) https://developer.aliyun.com/article/1231030?groupCode=aliyun_linux