From 217908e1077a0c1f6a2e6825ccaa400090f474d1 Mon Sep 17 00:00:00 2001 From: hanliyang Date: Mon, 16 Dec 2024 17:55:17 +0800 Subject: [PATCH] Add the contents of the CSV2/CSV3 Kata confidential containers to the manual MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modify: sig/Hygon Arch/content/1-安全功能环境配置/0-安全功能配置要求.md sig/Hygon Arch/content/2-CSV测试文档/4-KATA-3/1-环境搭建.md sig/Hygon Arch/content/2-CSV测试文档/4-KATA-3/2-测试CSV机密容器.md sig/Hygon Arch/content/2-CSV测试文档/4-KATA-3/3-测试ASID复用.md sig/Hygon Arch/content/2-CSV测试文档/4-KATA-3/4-测试直通DCU.md sig/Hygon Arch/content/2-CSV测试文档/4-KATA-3/6-使用加密镜像来部署workload.md sig/Hygon Arch/content/2-CSV测试文档/4-KATA-3/7-使用签名镜像来部署workload.md sig/Hygon Arch/content/2-CSV测试文档/4-KATA-3/8-自定义Policy来验证Measurement.md Delete: sig/Hygon Arch/content/2-CSV测试文档/4-KATA-3/13-测试CSV2机密容器.md Signed-off-by: hanliyang --- ...15\347\275\256\350\246\201\346\261\202.md" | 17 +- ...57\345\242\203\346\220\255\345\273\272.md" | 2 + ...72\345\257\206\345\256\271\345\231\250.md" | 272 ------------------ ...72\345\257\206\345\256\271\345\231\250.md" | 81 +++++- ...50\257\225ASID\345\244\215\347\224\250.md" | 10 +- ...350\257\225\347\233\264\351\200\232DCU.md" | 6 + ...35\245\351\203\250\347\275\262workload.md" | 69 ++++- ...35\245\351\203\250\347\275\262workload.md" | 67 ++++- ...245\351\252\214\350\257\201Measurement.md" | 61 +++- 9 files changed, 250 insertions(+), 335 deletions(-) delete mode 100644 "sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/13-\346\265\213\350\257\225CSV2\346\234\272\345\257\206\345\256\271\345\231\250.md" diff --git "a/sig/Hygon Arch/content/1-\345\256\211\345\205\250\345\212\237\350\203\275\347\216\257\345\242\203\351\205\215\347\275\256/0-\345\256\211\345\205\250\345\212\237\350\203\275\351\205\215\347\275\256\350\246\201\346\261\202.md" "b/sig/Hygon Arch/content/1-\345\256\211\345\205\250\345\212\237\350\203\275\347\216\257\345\242\203\351\205\215\347\275\256/0-\345\256\211\345\205\250\345\212\237\350\203\275\351\205\215\347\275\256\350\246\201\346\261\202.md" index 97bff8ac..ea4362f2 100644 --- "a/sig/Hygon Arch/content/1-\345\256\211\345\205\250\345\212\237\350\203\275\347\216\257\345\242\203\351\205\215\347\275\256/0-\345\256\211\345\205\250\345\212\237\350\203\275\351\205\215\347\275\256\350\246\201\346\261\202.md" +++ "b/sig/Hygon Arch/content/1-\345\256\211\345\205\250\345\212\237\350\203\275\347\216\257\345\242\203\351\205\215\347\275\256/0-\345\256\211\345\205\250\345\212\237\350\203\275\351\205\215\347\275\256\350\246\201\346\261\202.md" @@ -2,14 +2,23 @@ ## 硬件配置要求 -安全功能包括CSV、TPM2.0、TCM2.0、TPCM、TDM、TKM、HCT等,这些功能依赖CPU硬件、BIOS,表1是使用安全功能的硬件配置版本要求。 +安全功能包括CSV、TPM2.0、TCM2.0、TPCM、TDM、TKM、HCT等,这些功能依赖CPU硬件、BIOS,表1是各种CPU型号所属的CPU代际信息,表2是各代际CPU使用安全功能的硬件配置版本要求。 -表 1 安全功能的硬件配置版本要求 +表 1 各CPU型号对应的海光CPU代际 + +| CPU代际 | CPU型号 | +| --- | --- | +| 海光2号 | 32XX,52XX,72XX | +| 海光C86-3G | 33XX,53XX,73XX | +| 海光C86-4G | 343X,748X,749X,548X | + +表 2 安全功能的硬件配置版本要求 | 配置 | CPU | BIOS | | --- | --- | --- | -| 1 |

海光2号,包括:32XX、52XX、72XX
海光C86-3G,包括:33XX、53XX、73XX

|

1.两种方法都可以确认bios是否支持相应的功能,方法如下
(1)PI版本为2.1.0.4或以上,通过机器型号和厂商沟通确认
(2)Bootloader 版本号为1.2.55 或以上,Bootloader 版本号可以通过bios 查看,方法在下面章节说明
2. 必须支持CSV、fTPM2.0、fTCM2.0、TPCM等安全功能
BIOS必须满足以上2点要求,如果不满足请直接联系整机厂商

| -| 2 | 海光C86-4G,包括:343X,748X,749X,548X |

1. 两种方法都可以确认bios是否支持相应的功能,方法如下
(1)PI版本为4.2.0.0或以上,通过机器型号和厂商沟通确认
(2)Bootloader版本要求,lscpu \|grep Model 查看Model 对应的值,根据具体的值确认版本要求,版本要求如下
1)4: Bootloader版本为3.5.3.1或以上
2)6: Bootloader版本为 3.7.3.37或以上
Bootloader 版本号可以通过bios 查看,方法在下面章节说明
2. 必须支持CSV、fTPM2.0、fTCM2.0、TPCM等安全功能
BIOS必须满足以上2点要求,如果不满足请直接联系整机厂商

| +| 1 |

海光2号

| #**要求1**#:

1.两种方法都可以确认bios是否支持相应的功能,方法如下
(1)PI版本为2.1.0.4或以上,通过机器型号和厂商沟通确认
(2)Bootloader 版本号为1.2.55 或以上,Bootloader 版本号可以通过bios 查看,方法在下面章节说明
2. 必须支持CSV、fTPM2.0、fTCM2.0、TPCM等安全功能
BIOS必须满足以上2点要求,如果不满足请直接联系整机厂商

| +| 2 |

海光C86-3G

| 同 #**要求1**# | +| 3 | 海光C86-4G | #**要求2**#:

1. 两种方法都可以确认bios是否支持相应的功能,方法如下
(1)PI版本为4.2.0.0或以上,通过机器型号和厂商沟通确认
(2)Bootloader版本要求,lscpu \|grep Model 查看Model 对应的值,根据具体的值确认版本要求,版本要求如下
1)4: Bootloader版本为3.5.3.1或以上
2)6: Bootloader版本为 3.7.3.37或以上
Bootloader 版本号可以通过bios 查看,方法在下面章节说明
2. 必须支持CSV、fTPM2.0、fTCM2.0、TPCM等安全功能
BIOS必须满足以上2点要求,如果不满足请直接联系整机厂商


**注意:**
如果用户希望测试`CSV3`的kernel启动hash验证和秘密注入等功能(CSV3密钥封印,CSV3全磁盘加密,CSV3机密容器 等依赖于这些功能),要求安全固件的版本号(即build id)>= `2200`。如果版本号 < `2200`,用户需要联系OEM厂商获取指定PI版本的BIOS,以`PI4.6.x`为前缀的PI版本要求>=`PI4.6.0.5`,以`PI4.2.x`为前缀的PI版本要求>=`PI4.2.0.10`。 | ## Bootloader 版本查看 海光2号配置 diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/1-\347\216\257\345\242\203\346\220\255\345\273\272.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/1-\347\216\257\345\242\203\346\220\255\345\273\272.md" index 2eb68d16..507e26ed 100644 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/1-\347\216\257\345\242\203\346\220\255\345\273\272.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/1-\347\216\257\345\242\203\346\220\255\345\273\272.md" @@ -2,6 +2,8 @@ 本文主要介绍如何搭建一套CSV机密容器环境。 +> **注意:** 运行`CSV3`机密容器需要安全固件具有较高的版本,请参考[安全功能配置要求](https://gitee.com/hanliyang/openanolis_community/blob/master/sig/Hygon%20Arch/content/1-%E5%AE%89%E5%85%A8%E5%8A%9F%E8%83%BD%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/0-%E5%AE%89%E5%85%A8%E5%8A%9F%E8%83%BD%E9%85%8D%E7%BD%AE%E8%A6%81%E6%B1%82.md)的**硬件配置要求章节**。 + ## 前提条件 ### 安装系统并更新内核 diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/13-\346\265\213\350\257\225CSV2\346\234\272\345\257\206\345\256\271\345\231\250.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/13-\346\265\213\350\257\225CSV2\346\234\272\345\257\206\345\256\271\345\231\250.md" deleted file mode 100644 index 0e9f9787..00000000 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/13-\346\265\213\350\257\225CSV2\346\234\272\345\257\206\345\256\271\345\231\250.md" +++ /dev/null @@ -1,272 +0,0 @@ -# 测试CSV2机密容器 - -## CSV2机密容器基本特性测试 - -### 一、不基于CSV2,运行一个普通容器 - -- 启动POD - -```shell -cat <<-EOF | kubectl apply -f - -apiVersion: v1 -kind: Pod -metadata: - labels: - run: nginx - name: nginx -spec: - containers: - - image: bitnami/nginx:1.22.0 - name: nginx - dnsPolicy: ClusterFirst - runtimeClassName: kata -EOF -``` - -- 预期结果: - -```shell -pod/nginx created -``` - -- 查看 pod 状态: - -```shell -kubectl get pods -``` - -- 预期结果如下,注意, STATUS 要是 Running 。 - -```shell -NAME READY STATUS RESTARTS AGE -nginx 1/1 Running 0 3m50s -``` - -### 二、运行一个CSV2机密容器 - -- 编辑 kata 配置文件: - - - 关闭pre-attestation(如果需要使用该功能,请参考本文最下面的[增强特性](#增强特性)) - - ``` - sudo sed -i -e 's/^\(guest_pre_attestation =\).*$/\1 false/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml - ``` - - - initrd指向支持offline_fs_kbc模式的initrd(其他initrd为本文最下面的[增强特性](#增强特性)所准备) - - ``` - sudo sed -i -e 's#^\(initrd\).*=.*$#\1 = \"/opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_fs_kbc\"#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml - ``` - - - 禁用sev_kbc模式 - - ``` - sudo sed -i -e 's#^\(kernel_params\).*=.*$#\1 = \"agent.https_proxy=http://ip:port agent.no_proxy=10.*.*.*,172.*.*.* agent.enable_signature_verification=false \"#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml - ``` - - 设置CSV2 policy - ``` - sudo sed -i -e 's#^\(sev_guest_policy\).*=.*$#\1 = 5#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml - - ``` - - -- 启动POD - -```shell -cat <<-EOF | kubectl apply -f - -apiVersion: v1 -kind: Pod -metadata: - labels: - run: test-csv2 - name: test-csv2 -spec: - containers: - - image: docker.io/library/busybox:latest - name: test-csv2 - imagePullPolicy: Always - dnsPolicy: ClusterFirst - restartPolicy: Never - runtimeClassName: kata-qemu-csv -EOF -``` - -- 查看 pod 是否启动成功: - -```shell -kubectl get pods -``` - -- 预期结果如下: - -```shell -NAME READY STATUS RESTARTS AGE -test-csv2 1/1 Running 0 146m -``` - -#### 三、验证CSV2内存加密 - -- 检查CSV2已被使能 - - ``` - kubectl exec -it test-csv2 -- dmesg | grep "active: CSV CSV2" - ``` - -- 预期结果如下: - - ``` - [ 0.039126] HYGON Memory Encryption Features active: CSV CSV2 - ``` - -- dump内存确认内存已加密 - - ``` - sudo /opt/hygon/csv/dump-kata-memory.sh crictl test-csv2 - ``` - -- 预期结果如下: - - ``` - dd if=/proc/139404/mem bs=4096 count=1 skip=(0x7fe83be00000/4096) | hexdump - dd: /proc/139404/mem: cannot skip to specified offset - 1+0 records in - 1+0 records out - 4096 bytes (4.1 kB, 4.0 KiB) copied, 7.6193e-05 s, 53.8 MB/s - 00000000 a7 d2 41 29 83 46 59 66 40 49 d5 c5 92 18 69 00 |..A).FYf@I....i.| - 00000010 f4 1a 63 f1 08 00 c6 50 81 c0 51 2d 40 d4 95 f9 |..c....P..Q-@...| - 00000020 18 03 c2 78 e9 e4 db c2 c5 90 92 93 d7 d2 fa 9e |...x............| - 00000030 18 03 c2 78 e9 e4 db c2 c5 90 92 93 d7 d2 fa 9e |...x............| - 00000040 c4 3f 45 c0 5b 0e a3 8b 4e b9 b3 6f 8d 39 9d ac |.?E.[...N..o.9..| - 00000050 c4 3f 45 c0 5b 0e a3 8b 4e b9 b3 6f 8d 39 9d ac |.?E.[...N..o.9..| - 00000060 c4 3f 45 c0 5b 0e a3 8b 4e b9 b3 6f 8d 39 9d ac |.?E.[...N..o.9..| - 00000070 c4 3f 45 c0 5b 0e a3 8b 4e b9 b3 6f 8d 39 9d ac |.?E.[...N..o.9..| - 00000080 62 f4 46 ea 22 03 92 ec 06 be 3c 20 78 2d 1e 8f |b.F.".....< x-..| - 00000090 62 f4 46 ea 22 03 92 ec 06 be 3c 20 78 2d 1e 8f |b.F.".....< x-..| - 000000a0 62 f4 46 ea 22 03 92 ec 06 be 3c 20 78 2d 1e 8f |b.F.".....< x-..| - 000000b0 62 f4 46 ea 22 03 92 ec 06 be 3c 20 78 2d 1e 8f |b.F.".....< x-..| - 000000c0 d9 a9 3a c1 19 5e 69 29 de d7 b7 c1 80 cf 43 e2 |..:..^i)......C.| - 000000d0 d9 a9 3a c1 19 5e 69 29 de d7 b7 c1 80 cf 43 e2 |..:..^i)......C.| - ``` - -#### 四、测试Runtime Attestation功能 - -- 编译attestation应用程序(如果执行过[1-安装CSV2软件](https://openanolis.cn/sig/Hygon-Arch/doc/824231186925682541)中的步骤,此步可跳过) - - ``` - cd /opt/hygon/csv/ - git clone -b master https://github.com/guanzhi/GmSSL.git - sudo ./build_devkit.sh - ``` - -- 部署CSV2机密容器,把`attestation应用程序`和`csv-guest驱动`mount到容器中 - - ``` - cat <<-EOF | kubectl apply -f - - apiVersion: v1 - kind: Pod - metadata: - labels: - run: test-attestation - name: test-attestation - spec: - containers: - - image: docker.io/library/ubuntu:latest - name: test-attestation - imagePullPolicy: Always - volumeMounts: - - mountPath: /root/attestation - name: attestation - - mountPath: /dev - name: dev - volumes: - - name: attestation - hostPath: - path: /opt/hygon/csv/attestation - - name: dev - hostPath: - path: /dev - dnsPolicy: ClusterFirst - restartPolicy: Never - runtimeClassName: kata-qemu-csv - EOF - ``` - -- 查看 pod 是否启动成功: - - ``` - kubectl get pods - ``` - -- 预期结果如下: - - ``` - NAME READY STATUS RESTARTS AGE - test-attestation 1/1 Running 0 65s - ``` - - - -- 获取attestation report:ioctl-get-attestation执行会在其所在目录生成认证报告report.cert - - ``` - kubectl exec -it test-attestation -- bash - cd /root/attestation/ - ./ioctl-get-attestation - # 退出pod - exit - ``` - - 预期结果如下: - - ``` - get attestation report & save to ./report.cert - user data: 0x561a739f86b0 - data: - 75736572206461746100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - mnonce: - 67c6697351ff4aec29cdbaabf2fbe346 - hash: - cd01d9775f66a2fc94aa2df90441e66b233b4a2205d1ea54e8246df6792c7d7c - data: user data - mem.va: 561a739f86b0 - done - ``` - -- 验证attestation report:可以在任意设备上验证,验证report时会首先验证证书链,而证书链需要联网下载 - - ``` - cd /opt/hygon/csv/attestation - sudo chmod 666 report.cert - sudo ./verify-attestation true - ``` - - 预期结果如下: - - ``` - verify attestation report - load attestation report from ./report.cert - verify report - report.userdata: - 75736572206461746100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - report.mnonce: - 67c6697351ff4aec29cdbaabf2fbe346 - report.measure: - e4ea9eea6db32e45c331efe50683fc94bf83d296f5b1b74e75dc6ab126e343fb - report.sn: - 4e5a4139543032303832363035000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - verify: do verify - Signature: - r=6F88F8CB981C2DAB4262F7B2AA642655746C9D61B7CAE1D79AC7994A2452203E - s=D3A8EFE32979074D7E4C3EDEE90E35F5DB2AC5063F0CCF8663F8205A515B6D1E - SM2_do_verify success! - verify success - ``` - - verify-attestation会使用PEK公钥验证认证报告的签名,并且从证书服务器下载证书链验证HRK->HSK->CEK->PEK证书的签名。 - -复位 policy -``` -sudo sed -i -e 's#^\(sev_guest_policy\).*=.*$#\1 = 3#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml - -``` - diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/2-\346\265\213\350\257\225CSV\346\234\272\345\257\206\345\256\271\345\231\250.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/2-\346\265\213\350\257\225CSV\346\234\272\345\257\206\345\256\271\345\231\250.md" index 37c88446..f9ee432f 100644 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/2-\346\265\213\350\257\225CSV\346\234\272\345\257\206\345\256\271\345\231\250.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/2-\346\265\213\350\257\225CSV\346\234\272\345\257\206\345\256\271\345\231\250.md" @@ -42,19 +42,39 @@ NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 3m50s ``` -### 二、运行一个CSV机密容器 +### 二、运行一个CSV/CSV2/CSV3机密容器 +**该实践支持情况如下:** +| 机密容器类型 | 是否支持 | +| --- | --- | +| CSV | 是 | +| CSV2 | 是 | +| CSV3 | 是 | - 编辑 kata 配置文件: - - 关闭pre-attestation(如果需要使用该功能,请参考本文最下面的[增强特性](#增强特性)) + - 设置机密容器为`CSV`、`CSV2`、`CSV3`的其中一种。 + + ```shell + # 对于CSV机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 3/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + # 对于CSV2机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 7/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + + # 对于CSV3机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 71/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + sudo sed -i -e 's/^\(vcpu_model\) = .*$/\1 = \"Dhyana\"/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` + + - 关闭pre-attestation(如果需要使用该功能,请参考本文最下面的[增强特性](#增强特性)) + + ```shell sudo sed -i -e 's/^\(guest_pre_attestation =\).*$/\1 false/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` - initrd指向支持offline_fs_kbc模式的initrd(其他initrd为本文最下面的[增强特性](#增强特性)所准备) - ``` + ```shell sudo sed -i -e 's#^\(initrd\).*=.*$#\1 = \"/opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_fs_kbc\"#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` @@ -62,7 +82,7 @@ nginx 1/1 Running 0 3m50s `agent.https_proxy=http://ip:port agent.no_proxy=10.*.*.*,172.*.*.*` **不要直接拷贝,仔细阅读下面说明** - ``` + ```shell sudo sed -i -e 's#^\(kernel_params\).*=.*$#\1 = \"agent.https_proxy=http://ip:port agent.no_proxy=10.*.*.*,172.*.*.* agent.enable_signature_verification=false \"#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` @@ -108,23 +128,49 @@ NAME READY STATUS RESTARTS AGE test-csv 1/1 Running 0 146m ``` -#### 三、验证CSV内存加密 +- 检查CSV/CSV2/CSV3已被使能: -- 检查CSV已被使能 + ```shell + # 对于CSV机密容器 + kubectl exec -it test-csv -- dmesg | grep "HYGON.* CSV" - ``` - kubectl exec -it test-csv -- dmesg | grep "active: CSV" + # 对于CSV2机密容器 + kubectl exec -it test-csv -- dmesg | grep "HYGON.* CSV2" + + # 对于CSV3机密容器 + kubectl exec -it test-csv -- dmesg | grep "HYGON.* CSV3" ``` - 预期结果如下: ``` + # 对于CSV机密容器,预期为: [ 0.036854] HYGON Memory Encryption Features active: CSV + 或 + [ 0.036854] HYGON CSV + + # 对于CSV2机密容器,预期为: + [ 0.036854] HYGON Memory Encryption Features active: CSV CSV2 + 或 + [ 0.036854] HYGON CSV2 + + # 对于CSV3机密容器,预期为: + [ 0.036854] HYGON Memory Encryption Features active: CSV CSV2 CSV3 + 或 + [ 0.036854] HYGON CSV3 ``` +#### 三、验证CSV/CSV2内存加密 +**该实践支持情况如下:** +| 机密容器类型 | 是否支持 | 说明 | +| --- | --- | --- | +| CSV | 是 | - | +| CSV2 | 是 | - | +| CSV3 | 是 | CSV3验证内存加密的方法与CSV/CSV2有所区别,直接参考[测试CSV3内存隔离](https://gitee.com/anolis/community/blob/master/sig/Hygon%20Arch/content/2-CSV%E6%B5%8B%E8%AF%95%E6%96%87%E6%A1%A3/3-%E8%99%9A%E6%8B%9F%E6%9C%BA/9-%E6%B5%8B%E8%AF%95CSV3%E5%86%85%E5%AD%98%E9%9A%94%E7%A6%BB.md)即可。 | + - dump内存确认内存已加密 - ``` + ```shell sudo /opt/hygon/csv/dump-kata-memory.sh crictl test-csv ``` @@ -153,8 +199,14 @@ test-csv 1/1 Running 0 146m ``` #### 四、测试Runtime Attestation功能 +**该实践支持情况如下:** +| 机密容器类型 | 是否支持 | +| --- | --- | +| CSV | 是 | +| CSV2 | 是 | +| CSV3 | 是 | -- 部署CSV机密容器,把`attestation应用程序`和`csv-guest驱动`mount到容器中 +- 部署CSV/CSV2/CSV3机密容器,把`attestation应用程序`和`csv-guest驱动`mount到容器中 ``` cat <<-EOF | kubectl apply -f - @@ -264,10 +316,11 @@ test-csv 1/1 Running 0 146m #### 一、CSV独有的增强特性 -以下特性为相对于SEV、TDX,CSV机密容器所独有的特性: - -1. 通过复用ASID,支持一台设备部署更多的机密容器,具体参考[3-测试ASID复用](https://openanolis.cn/sig/Hygon-Arch/doc/865622239407380268); -2. 将DCU直通进机密容器,加速机密运算,具体参考[4-测试直通DCU](https://openanolis.cn/sig/Hygon-Arch/doc/865622241026381614)。 +**以下特性为相对于SEV、TDX,CSV机密容器所独有的特性:** +| 特性 | 特性说明 | 限制 | +| --- | --- | --- | +| 复用ASID | 通过复用ASID,支持一台设备部署更多的机密容器,具体参考[3-测试ASID复用](https://openanolis.cn/sig/Hygon-Arch/doc/865622239407380268);| 1)只有海光2号和海光C86-3G支持;
2)**海光C86-4G支持500个虚拟机密钥,不支持该功能;**| +| 机密容器直通DCU | 将DCU直通进机密容器,加速机密运算,具体参考[4-测试直通DCU](https://openanolis.cn/sig/Hygon-Arch/doc/865622241026381614)。| 1)CSV/CSV2机密容器支持DCU直通;
2)**CSV3机密容器暂不支持DCU直通;** | #### 二、社区的增强特性 diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/3-\346\265\213\350\257\225ASID\345\244\215\347\224\250.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/3-\346\265\213\350\257\225ASID\345\244\215\347\224\250.md" index da746e1a..3df0f938 100644 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/3-\346\265\213\350\257\225ASID\345\244\215\347\224\250.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/3-\346\265\213\350\257\225ASID\345\244\215\347\224\250.md" @@ -2,8 +2,14 @@ **麒麟系统不支持** ## 功能描述 - -2号、3号CPU最多支持15个CSV ASID,而每个CSV 机密容器需要占用1个ASID。为了满足同一台设备上同时运行超过15个CSV机密容器的需求,引入了ASID复用的功能。 +**该实践支持情况如下:** +| 机密容器类型 | 是否支持 | 特殊限制 | +| --- | --- | --- | +| CSV | 是 | **自海光C86-4G开始,不支持ASID复用** | +| CSV2 | 是 | **自海光C86-4G开始,不支持ASID复用** | +| CSV3 | **否** | - | + +海光2号、C86-3G CPU最多支持15个CSV ASID,而每个CSV机密容器需要占用1个ASID。为了满足同一台设备上同时运行超过15个CSV机密容器的需求,引入了ASID复用的功能。 该功能可以让同一个用户的多个CSV机密容器复用同一个ASID,虽然这种情况下,多个CSV机密容器共用同一个ASID索引的内存加密密钥,但是这些机密容器从属于同一个用户,不存在安全性问题。 diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/4-\346\265\213\350\257\225\347\233\264\351\200\232DCU.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/4-\346\265\213\350\257\225\347\233\264\351\200\232DCU.md" index f91f9f8c..144ae5e7 100644 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/4-\346\265\213\350\257\225\347\233\264\351\200\232DCU.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/4-\346\265\213\350\257\225\347\233\264\351\200\232DCU.md" @@ -1,4 +1,10 @@ # 测试直通DCU +**该实践支持情况如下:** +| 机密容器类型 | 是否支持 | +| --- | --- | +| CSV | 是 | +| CSV2 | 是 | +| CSV3 | **否** | ## 前提条件 diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/6-\344\275\277\347\224\250\345\212\240\345\257\206\351\225\234\345\203\217\346\235\245\351\203\250\347\275\262workload.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/6-\344\275\277\347\224\250\345\212\240\345\257\206\351\225\234\345\203\217\346\235\245\351\203\250\347\275\262workload.md" index eb79af91..07e20963 100755 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/6-\344\275\277\347\224\250\345\212\240\345\257\206\351\225\234\345\203\217\346\235\245\351\203\250\347\275\262workload.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/6-\344\275\277\347\224\250\345\212\240\345\257\206\351\225\234\345\203\217\346\235\245\351\203\250\347\275\262workload.md" @@ -1,38 +1,63 @@ # 使用加密镜像部署workload +**该实践支持情况如下:** +| 机密容器类型 | 是否支持 | +| --- | --- | +| CSV | 是 | +| CSV2 | 是 | +| CSV3 | 是 | ## 关于Attestation Agent及KBC -attestation agent 支持三种CSV平台相关的KBC:[offline_fs_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/offline_fs_kbc), [offline_sev_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/offline_sev_kbc) 和 [online_sev_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/online_sev_kbc)。 - -- offline fs KBC 事先把密钥放置在initrd中,用于验签容器镜像。缺点是每次更新密钥或policy,需要重新制作initrd。 -- offline sev KBC 在**运行时**不会与 Simple KBS 进行通信,而是使用在**VM Boot时期**通过QEMU注入的secret。该机制的缺点是对注入的 secret 长度有限制。 -- online sev KBC 在offline sev KBC的基础上,支持在**运行时**发出请求。online sev KBC 在VM Boot时期通过QEMU注入connection。注入的connection包含一个对称密钥,用于加密和验证 KBC 发出的在线请求。 该连接受 CSV秘密注入过程保护,该过程提供机密性、完整性并防止重放攻击。 simple-kbs 为每个连接生成一个新的对称密钥。 KBC 要求每个在线secret都带有随机 guid 以防止重放攻击。 +**attestation agent 支持三种CSV平台相关的KBC,见下表:** +| KBC模式 | 说明 | +| --- | --- | +| [offline_fs_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/offline_fs_kbc) | offline fs KBC 事先把密钥放置在initrd中,用于验签容器镜像。缺点是每次更新密钥或policy,需要重新制作initrd。 | +| [offline_sev_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/offline_sev_kbc) | offline sev KBC 在**运行时**不会与 Simple KBS 进行通信,而是使用在**VM Boot时期**通过QEMU注入的secret。该机制的缺点是对注入的 secret 长度有限制。 | +| [online_sev_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/online_sev_kbc) | online sev KBC 在offline sev KBC的基础上,支持在**运行时**发出请求。online sev KBC 在VM Boot时期通过QEMU注入connection。注入的connection包含一个对称密钥,用于加密和验证 KBC 发出的在线请求。 该连接受 CSV秘密注入过程保护,该过程提供机密性、完整性并防止重放攻击。 simple-kbs 为每个连接生成一个新的对称密钥。 KBC 要求每个在线secret都带有随机 guid 以防止重放攻击。 | ## 使用已知的加密镜像部署workload +**各KBC模式对于加密镜像的支持如下表所示:** +| KBC模式 | 是否支持加密镜像 | +| --- | --- | +| online_sev_kbc | 是 | +| offline_sev_kbc | 是 | +| offline_fs_kbc | **否** | 本文提供了一个简单的加密镜像( docker.io/pawsonfang/busybox:encrypted ),该镜像使用 simple kbs 已经存在的密钥来解密,同时对 policy 不进行校验。此加密镜像只作为测试使用,如您想用于自己的生产用例中,请参考文档[9-制作一个新的加密镜像并部署](https://openanolis.cn/sig/Hygon-Arch/doc/865622249784088376)。 -有两种KBC模式支持加密镜像:online_sev_kbc、offline_sev_kbc。下面分别进行测试。 - ### 基于online_sev_kbc运行加密容器 - 编辑 kata 配置文件: - - 打开pre-attestation + - 设置机密容器为`CSV`、`CSV2`、`CSV3`的其中一种。 + + ```shell + # 对于CSV机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 3/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + + # 对于CSV2机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 7/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + # 对于CSV3机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 71/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + sudo sed -i -e 's/^\(vcpu_model\) = .*$/\1 = \"Dhyana\"/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` + + - 打开pre-attestation + + ```shell sudo sed -i -e 's/^\(guest_pre_attestation =\).*$/\1 true/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` - initrd指向支持online_sev_kbc的initrd - ``` + ```shell sudo sed -i -e 's#^\(initrd\).*=.*$#\1 = \"/opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.online_sev_kbc\"#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` - 设置kbs_mod为online模式 - ``` + ```shell sudo sed -i -e 's/^\(guest_pre_attestation_kbs_mode\).*=.*$/\1=\"online\"/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` @@ -40,7 +65,7 @@ attestation agent 支持三种CSV平台相关的KBC:[offline_fs_kbc](https://g 由于国内网络目前访问不了dockerhub 需要使用代理,代理参数agent.https_proxy=http://ip:port agent.no_proxy=10.*.*.*,172.*.*.* http://ip:port 为代理地址 - ``` + ```shell sudo sed -i -e 's#^\(kernel_params\).*=.*$#\1 = \"agent.https_proxy=http://ip:port agent.no_proxy=10.*.*.*,172.*.*.* agent.config_file=/etc/agent-config.toml agent.enable_signature_verification=false \"#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` @@ -82,27 +107,41 @@ test-en-online 1/1 Running 0 146m - 编辑 kata 配置文件: - - 打开pre-attestation + - 设置机密容器为`CSV`、`CSV2`、`CSV3`的其中一种。 + + ```shell + # 对于CSV机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 3/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + # 对于CSV2机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 7/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + + # 对于CSV3机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 71/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + sudo sed -i -e 's/^\(vcpu_model\) = .*$/\1 = \"Dhyana\"/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` + + - 打开pre-attestation + + ```shell sudo sed -i -e 's/^\(guest_pre_attestation =\).*$/\1 true/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` - initrd指向支持offline_sev_kbc的initrd - ``` + ```shell sudo sed -i -e 's#^\(initrd\).*=.*$#\1 = \"/opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_sev_kbc\"#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` - 设置kbs_mod为offline模式 - ``` + ```shell sudo sed -i -e 's/^\(guest_pre_attestation_kbs_mode\).*=.*$/\1=\"offline\"/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` - 设置AA module 配置文件路径 - ``` + ```shell sudo sed -i -e 's#^\(kernel_params\).*=.*$#\1 = \"agent.https_proxy=http://ip:port agent.no_proxy=10.*.*.*,172.*.*.* agent.config_file=/etc/agent-config.toml agent.enable_signature_verification=false \"#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/7-\344\275\277\347\224\250\347\255\276\345\220\215\351\225\234\345\203\217\346\235\245\351\203\250\347\275\262workload.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/7-\344\275\277\347\224\250\347\255\276\345\220\215\351\225\234\345\203\217\346\235\245\351\203\250\347\275\262workload.md" index 1f57de53..cecfc4fc 100755 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/7-\344\275\277\347\224\250\347\255\276\345\220\215\351\225\234\345\203\217\346\235\245\351\203\250\347\275\262workload.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/7-\344\275\277\347\224\250\347\255\276\345\220\215\351\225\234\345\203\217\346\235\245\351\203\250\347\275\262workload.md" @@ -1,44 +1,69 @@ # 使用签名镜像部署workload +**该实践支持情况如下:** +| 机密容器类型 | 是否支持 | +| --- | --- | +| CSV | 是 | +| CSV2 | 是 | +| CSV3 | 是 | ## 关于Attestation Agent及KBC -attestation agent 支持三种CSV平台相关的KBC:[offline_fs_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/offline_fs_kbc), [offline_sev_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/offline_sev_kbc) 和 [online_sev_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/online_sev_kbc)。 - -- offline fs KBC 事先把密钥放置在initrd中,用于验签容器镜像。缺点是每次更新密钥或policy,需要重新制作initrd。 -- offline sev KBC 在**运行时**不会与 Simple KBS 进行通信,而是使用在**VM Boot时期**通过QEMU注入的secret。该机制的缺点是对注入的 secret 长度有限制。 -- online sev KBC 在offline sev KBC的基础上,支持在**运行时**发出请求。online sev KBC 在VM Boot时期通过QEMU注入connection。注入的connection包含一个对称密钥,用于加密和验证 KBC 发出的在线请求。 该连接受 CSV秘密注入过程保护,该过程提供机密性、完整性并防止重放攻击。 simple-kbs 为每个连接生成一个新的对称密钥。 KBC 要求每个在线secret都带有随机 guid 以防止重放攻击。 +**attestation agent 支持三种CSV平台相关的KBC,见下表:** +| KBC模式 | 说明 | +| --- | --- | +| [offline_fs_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/offline_fs_kbc) | offline fs KBC 事先把密钥放置在initrd中,用于验签容器镜像。缺点是每次更新密钥或policy,需要重新制作initrd。 | +| [offline_sev_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/offline_sev_kbc) | offline sev KBC 在**运行时**不会与 Simple KBS 进行通信,而是使用在**VM Boot时期**通过QEMU注入的secret。该机制的缺点是对注入的 secret 长度有限制。| +| [online_sev_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/online_sev_kbc) | online sev KBC 在offline sev KBC的基础上,支持在**运行时**发出请求。online sev KBC 在VM Boot时期通过QEMU注入connection。注入的connection包含一个对称密钥,用于加密和验证 KBC 发出的在线请求。 该连接受 CSV秘密注入过程保护,该过程提供机密性、完整性并防止重放攻击。 simple-kbs 为每个连接生成一个新的对称密钥。 KBC 要求每个在线secret都带有随机 guid 以防止重放攻击。 | ## 使用已知的签名镜像部署workload +**各KBC模式对于签名镜像的支持如下表所示:** +| KBC模式 | 是否支持签名镜像 | +| --- | --- | +| online_sev_kbc | 是 | +| offline_sev_kbc | **否** | +| offline_fs_kbc | 是 | 本文提供了一个简单的签名镜像( docker.io/pawsonfang/mybusybox ),该镜像可以使用已知的cosign公钥进行验签,同时对 policy 不进行校验。此签名镜像只作为测试使用,如您想用于自己的生产用例中,请参考文档[10-制作一个新的签名镜像并部署](https://openanolis.cn/sig/Hygon-Arch/doc/865622235909330728)。 -有两种KBC模式支持签名镜像:online_sev_kbc、offline_fs_kbc。下面分别进行测试。 - #### 基于online_sev_kbc运行签名容器 - 编辑 kata 配置文件: - - 打开pre-attestation + - 设置机密容器为`CSV`、`CSV2`、`CSV3`的其中一种。 + + ```shell + # 对于CSV机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 3/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + + # 对于CSV2机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 7/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + # 对于CSV3机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 71/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + sudo sed -i -e 's/^\(vcpu_model\) = .*$/\1 = \"Dhyana\"/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` + + - 打开pre-attestation + + ```shell sudo sed -i -e 's/^\(guest_pre_attestation =\).*$/\1 true/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` - initrd指向支持online_sev_kbc的initrd - ``` + ```shell sudo sed -i -e 's#^\(initrd\).*=.*$#\1 = \"/opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.online_sev_kbc\"#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` - 设置kbs_mod为online模式 - ``` + ```shell sudo sed -i -e 's/^\(guest_pre_attestation_kbs_mode\).*=.*$/\1=\"online\"/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` - 使能验签功能 - ``` + ```shell sudo sed -i -e 's#^\(kernel_params\).*=.*$#\1 = \"agent.https_proxy=http://ip:port agent.no_proxy=10.*.*.*,172.*.*.* agent.config_file=/etc/agent-config.toml agent.enable_signature_verification=true \"#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` @@ -82,21 +107,35 @@ test-sign-online 1/1 Running 0 31h - 编辑 kata 配置文件: - - 关闭pre-attestation + - 设置机密容器为`CSV`、`CSV2`、`CSV3`的其中一种。 + + ```shell + # 对于CSV机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 3/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + # 对于CSV2机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 7/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + + # 对于CSV3机密容器,执行以下语句 + sudo sed -i -e 's/^\(sev_guest_policy\) = .*$/\1 = 71/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + sudo sed -i -e 's/^\(vcpu_model\) = .*$/\1 = \"Dhyana\"/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` + + - 关闭pre-attestation + + ```shell sudo sed -i -e 's/^\(guest_pre_attestation =\).*$/\1 false/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` - initrd指向支持offline_fs_kbc的initrd - ``` + ```shell sudo sed -i -e 's#^\(initrd\).*=.*$#\1 = \"/opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_fs_kbc\"#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` - 使能验签功能,并更新kbc模式为offline_fs_kbc - ``` + ```shell sudo sed -i -e 's#^\(kernel_params\).*=.*$#\1 = \"agent.https_proxy=http://ip:port agent.no_proxy=10.*.*.*,172.*.*.* agent.aa_kbc_params=offline_fs_kbc::null agent.enable_signature_verification=true \"#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml ``` diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/8-\350\207\252\345\256\232\344\271\211Policy\346\235\245\351\252\214\350\257\201Measurement.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/8-\350\207\252\345\256\232\344\271\211Policy\346\235\245\351\252\214\350\257\201Measurement.md" index 1ba38e9d..f9315b21 100755 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/8-\350\207\252\345\256\232\344\271\211Policy\346\235\245\351\252\214\350\257\201Measurement.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/8-\350\207\252\345\256\232\344\271\211Policy\346\235\245\351\252\214\350\257\201Measurement.md" @@ -1,16 +1,31 @@ # 自定义policy来验证Guest Firmware Mesurement +**该实践支持情况如下:** +| 机密容器类型 | 是否支持 | +| --- | --- | +| CSV | 是 | +| CSV2 | 是 | +| CSV3 | 是 | + ## 关于policy +**各KBC模式对于自定义policy验证Guest Firmware Measurement的支持情况见下表:** +| KBC模式 | 是否支持自定义policy验证Guest Firmware Measurement | +| --- | --- | +| online_sev_kbc | 是 | +| offline_sev_kbc | 是 | +| offline_fs_kbc | **否** | + - policy是在pre-attestation阶段进行校验的,offline_sev_kbc和online_sev_kbc两种模式都支持自定义policy,且方法相同。 - policy的组成包括:digests、policies、api_major、api_minor、build_ids等信息。详情请参考[链接](https://github.com/confidential-containers/simple-kbs/blob/main/db/db-mysql.sql#L73)。 - 本文以digests为例子,向用户展示如何注入自定义policy 。用户可以根据需求自定义Policy。 -## 获取cmdline +## 获取cmdline和Kata机密虚拟机vCPU个数 > 获取内核的append值(需要先启动一个offline_sev_kbc或online_sev_kbc的pod) ```shell +nr_vcpus=0 duration=$((SECONDS+30)) set append @@ -20,6 +35,8 @@ while [ $SECONDS -lt $duration ]; do append=$(echo ${qemu_process} \ | sed "s|.*-append \(.*$\)|\1|g" \ | sed "s| -.*$||") + nr_vcpus=$(echo ${qemu_process} \ + | sed "s|.* -smp \([0-9]*\).*|\1|") break fi sleep 1 @@ -28,9 +45,9 @@ done echo "${append}" > cmdline_file ``` -## 计算CSV Guest Firmware Measurement +## 计算CSV/CSV2/CSV3 Guest Firmware Measurement -> csv-measure.py是一个计算固件度量值的脚本,可以使用提供的 ovmf、initrd、kernel、cmdline等作为参数来计算 CSV guest固件测量值。 +> csv-measure.py是一个计算固件度量值的脚本,可以使用提供的 ovmf、initrd、kernel、cmdline等作为参数来计算 CSV/CSV2 guest固件测量值;对于CSV3 guest来说,除了需要提供 ovmf、initrd、kernel、cmdline,还需要提供虚拟机vCPU模型和vcpu个数作为参数来计算 guest固件度量值。 - 根据ovmf、kernel、initrd_path和cmdline_file的地址设置参数。 - ovmf、kernel和initrd_path的地址请参考kata 的配置文件 @@ -44,18 +61,34 @@ initrd_path="/opt/confidential-containers/share/kata-containers/kata-containers- cmdline_path=${PWD}/cmdline_file ``` -- 使用csv-measure.py 来计算 CSV guest 的Launch digest。 - +- 使用csv-measure.py 来计算 CSV/CSV2/CSV3 guest 的Launch digest。 + + - 针对CSV/CSV2 guest计算固件度量值的方法如下。 + ```shell + # 计算measurement + measurement=$(/opt/hygon/csv/confidential-containers/scripts/csv-measure.py \ + --ovmf "${ovmf_path}" \ + --kernel "${kernel_path}" \ + --initrd "${initrd_path}" \ + --cmdline "${cmdline_path}" \ + ) + ``` + - 针对CSV3 guest计算固件度量值的方法如下。 + ```shell + # 计算measurement + measurement=$(/opt/hygon/csv/confidential-containers/scripts/csv-measure.py \ + --ovmf "${ovmf_path}" \ + --kernel "${kernel_path}" \ + --initrd "${initrd_path}" \ + --cmdline "${cmdline_path}" \ + --csv3 \ + --vcpumodel "Dhyana" \ + --smp ${nr_vcpus} + ) + ``` + +- 确认measurement计算成功 ```shell - # 计算measurement - measurement=$(/opt/hygon/csv/confidential-containers/scripts/csv-measure.py \ - --ovmf "${ovmf_path}" \ - --kernel "${kernel_path}" \ - --initrd "${initrd_path}" \ - --cmdline "${cmdline_path}" \ -) - -# 确认measurement计算成功 echo $measurement ``` -- Gitee