基于runtime-attestation使用签名容器
本文主要为您介绍如何在kata环境中基于海光安全加密虚拟化功能CSV(China Secure Virtualization)技术,启动一个租户的签名容器镜像。
前提条件
请参考《基于runtime-attestation使用机密容器》指南的前提条件一节,完成对系统环境的检查和配置。
背景信息
相较于Confifidential Container v0,Confifidential Container v1增加支持镜像签名和验签,并使用image-rs取代umoci和skopeo来完成镜像的相关管理功能。更多相关信息,请参考ccv1_image_security_design 。
①②③:containerd 调用 kata-runtime 启动 CSV VM;kata-runtime调用 image-rs 下载加密镜像;
④:attestation-agent 通过 vm-attestation hypercall 获取包括 attestation-report 、chip-id 等内容的 CSV VM evidence;
⑤:attestation-agent 发送 CSV VM evidence 给 verdictd server;verdictd 验证 CSV VM evidence 的证书链、签名、digest 等内容;与 attestation-agent 建立基于 rats-tls 的可信硬件环境的安全通道;
⑥⑦:attestation-agent 向verdictd server 请求验签 key和image policy,verdictd 作为 KBS 通过安全通道发送 policy 文件和验签key发送给 attestation-agent;
⑧:image-rs 使用 key 验签镜像;
⑨:启动镜像运行 workload
步骤一:配置权限
请参考《基于runtime-attestation使用机密容器》指南的步骤一,完成配置权限。
步骤二:制作签名的应用容器镜像
1.生成GPG密钥对
GPG:GNU Privacy Guard , 用于加密、签名通信内容及管理非对称密钥等。 这里假设用户名为 testing,邮箱为test@higon.cn,请按gpg2提示输入用户名、邮箱、密码等信息。
gpg2 --gen-key
上述执行完成后,执行 gpg2 --list-keys 列举生成的密钥: 可看见类似如下内容:
[root@localhost test]# gpg2 --list-keys /root/.gnupg/pubring.kbx ------------------------ pub rsa2048 2022-05-11 [SC] [expires: 2024-05-10] B0801A210472A10CC22090C8B27A004C4E80D3E5 uid [ultimate] testing <test@hygon.cn> sub rsa2048 2022-05-11 [E] [expires: 2024-05-10]
由于verdictd不支持kbx格式pubkey,还需执行如下操作生成pubring.gpg
cd /root/.gnupg/ gpg2 --armor --export --output pubring.gpg test@hygon.cn
2. 制作签名的应用容器镜像
以docker.io/library/busybox:latest这个镜像为例,假设用户名为test,则远端的个人仓库为docker.io/test/busybox。
注意:在实际操作中,应将docker.io/test更名为实际操作的用户名,docker.io/xxxx。
首先配置 /etc/containers/registries.d/default.yaml 文件内容如下:
default-docker: sigstore-staging: fifile:///var/lib/containers/sigstore
然后用skopeo copy --sign-by进行签名, 以用户test为例:执行成功后在https://hub.docker.com/r/test/busybox/tags 上可观察到sig-test的tag。
skopeo login docker.io --username <$username> --password <$password> skopeo copy --remove-signatures --sign-by test@hygon.cn \ docker://docker.io/library/busybox:latest \ docker://docker.io/test/busybox:sig-test skopeo logout docker.io/test
以用户test为例:在本地可观察到 /var/lib/containers/sigstore 目录下多出了test目录(这样就完成了签名的准备工作):
tree /var/lib/containers/sigstore /var/lib/containers/sigstore └── test └── busybox@ sha256=52f431d980baa76878329b68ddb69cb124c25efa6e206d8b0bd797a828f0528e └── signature-1
步骤三:安装kata 环境
请参考《基于runtime-attestation使用机密容器》指南的步骤二来安装kata环境,并参考以下步骤更新initrd文件和kata 配置文件。
更新initrd文件
解压initrd image
cp initrd.run.img ./initrd.img.gz gunzip initrd.img.gz mkdir initrd cd initrd/ cpio -ivmd < ../initrd.img
配置待验证镜像签名文件
将 /var/lib/containers/sigstore 目录下的所有内容 复制到initrd/var/lib/containers/sigstore:
sudo cp -rf /var/lib/containers/sigstore/* initrd/var/lib/containers/sigstore
重新打包initrd
cd initrd/ fifind . | cpio -o -H newc > ../initrd.new.img gzip ../initrd.new.img cd ../ && mv initrd.new.img.gz initrd.new.img cp initrd.new.img initrd.run.img
步骤四:安装containerd
请参考《基于runtime-attestation使用机密容器》指南的步骤三来安装containerd。
步骤五:搭建kubenetes运行环境
请参考《基于runtime-attestation使用机密容器》指南的步骤四来搭建kubenetes运行环境。
《云原生机密计算最佳实践白皮书》——06运行时底座——海光CSV机密容器——基于runtime-attestation使用签名容器(2) https://developer.aliyun.com/article/1231239?groupCode=aliyun_linux