《云原生机密计算最佳实践白皮书》——06运行时底座——AMD SEV机密容器(5) https://developer.aliyun.com/article/1231024?groupCode=aliyun_linux
附录
制作一个新的加密镜像并部署
请参考指南制作一个新的加密镜像并部署。
自定义simpel KBS 的policy
• sev-snp-measure是一个实用程序,用于使用提供的 ovmf、initrd、kernel、cmdline等作为参数来计算SEV guest固件测量值。下载sev-snp-measure:
git clone https://github.com/IBM/sev-snp-measure.git cd sev-snp-measure
• 根据ovmf、kernel和initrd_path的地址设置参数。
ovmf、kernel和initrd_path的地址请参考kata 的配置文件
kata 的配置文件路径:/opt/confifidential-containers/share/defaults/kata-containers/confifiguration-qemu-sev.toml。
ovmf_path="/opt/confifidential-containers/share/ovmf/OVMF.fd" kernel_path="/opt/confifidential-containers/share/kata-containers/vmlinuz-sev.container" initrd_path="/opt/confifidential-containers/share/kata-containers/kata-containers-initrd.img"
• 计算内核的append值
duration=$((SECONDS+30)) set append while [ $SECONDS -lt $duration ]; do qemu_process=$(ps aux | grep qemu | grep append || true) if [ -n "${qemu_process}" ]; then append=$(echo ${qemu_process} \ | sed "s|.*-append \(.*$\)|\1|g" \ | sed "s| -.*$||") break fifi sleep 1 done echo "${append}"
• 使用 sev-snp-measure 来计算 SEV guest 的Launch digest。
measurement=$(./sev-snp-measure.py --mode=sev --output-format=base64 \ --ovmf "${ovmf_path}" \ --kernel "${kernel_path}" \ --initrd "${initrd_path}" \ --append "${append}" \ )
• 设置simple kbs 数据库参数
KBS_DB_USER="kbsuser" KBS_DB_PW="kbspassword" KBS_DB="simple_kbs" KBS_DB_TYPE="mysql" KBS_DB_HOST=$(docker network inspect simple-kbs_default \ | jq -r '.[].Containers[] | select(.Name | test("simple-kbs[_-]db.*")).IPv4Address' \ | sed "s|/.*$||g")
• 由于本文使用的加密镜像( docker.io/haosanzi/busybox-v1:encrypted ),是采用 simple kbs 已经存在的密钥来解密,该镜像的 enc_key 值如下。用户需要根据加密镜像按需设置enc_key。
enc_key=RcHGava52DPvj1uoIk/NVDYlwxi0A6yyIZ8ilhEX3X4=
• 将 自定义policy 注入 mysql 中。
policy的组成包括:digests、policies、api_major、api_minor、build_ids等信息。详情请参考链接。我们以digests为例子,向用户展示如何注入自定义policy 。用户可以根据需求自定义Policy。
mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${KBS_DB_HOST} -D ${KBS_DB} <<EOF REPLACE INTO secrets VALUES (10, 'key_id1', '${enc_key}', 10); REPLACE INTO keysets VALUES (10, 'KEYSET-1', '["key_id1"]', 10); REPLACE INTO policy VALUES (10, '["${measurement}"]', '[]', 0, 0, '[]', now(), NULL, 1); EOF