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 647bf4f420405ab3dc9928e6b2077689c08f9739..65f891ed5d3d9a52aa2a119b0fbc4036b4c20ca3 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" @@ -141,5 +141,3 @@ Advanced -> HYGON CBS -> NBIO Common Options 效果如下图: ![enable-iommu](../../assets/enable-iommu_4.png) - -sssaa diff --git a/sig/beautiful1103/README.en.md b/sig/beautiful1103/README.en.md new file mode 100644 index 0000000000000000000000000000000000000000..4e87e88616eef9b8a43cbe3e8fd479d7e0f41513 --- /dev/null +++ b/sig/beautiful1103/README.en.md @@ -0,0 +1,12 @@ + +## SIG Mission +Watching the moon rise up + +## SIG Members +zhangsan + +## Meetings +12132222121 + +## Chat GROUP +123 \ No newline at end of file diff --git a/sig/beautiful1103/README.md b/sig/beautiful1103/README.md new file mode 100644 index 0000000000000000000000000000000000000000..a65d0e0de4b197b64596e8bb640f02e27001202a --- /dev/null +++ b/sig/beautiful1103/README.md @@ -0,0 +1,14 @@ +## SIG目标 + 看月亮爬上来 +## SIG详细介绍 + 我们一起看月亮爬上来 ,就不来啊啊33333 +## SIG成员 + 张三 +## 联系方式 +12132222121 + +## 项目清单 +4444455如人 + +## 钉钉群 +123 \ No newline at end of file diff --git "a/sig/beautiful1103/assets/SIG\344\276\213\344\274\232/41b4.jpg" "b/sig/beautiful1103/assets/SIG\344\276\213\344\274\232/41b4.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..db8c457993711ccb18574903f4b10bb2001d16bd Binary files /dev/null and "b/sig/beautiful1103/assets/SIG\344\276\213\344\274\232/41b4.jpg" differ diff --git "a/sig/beautiful1103/assets/SIG\344\276\213\344\274\232/img_0.png" "b/sig/beautiful1103/assets/SIG\344\276\213\344\274\232/img_0.png" new file mode 100644 index 0000000000000000000000000000000000000000..8e463b096dfb28b1ad1697b2ee4ea21fbc80e846 Binary files /dev/null and "b/sig/beautiful1103/assets/SIG\344\276\213\344\274\232/img_0.png" differ diff --git "a/sig/beautiful1103/content/0-\346\265\267\345\205\211\350\265\204\350\256\257/1-\346\265\267\345\205\211\345\256\211\345\205\250\350\265\204\350\256\257.md" "b/sig/beautiful1103/content/0-\346\265\267\345\205\211\350\265\204\350\256\257/1-\346\265\267\345\205\211\345\256\211\345\205\250\350\265\204\350\256\257.md" new file mode 100644 index 0000000000000000000000000000000000000000..d7acbb51873ebdabffa66fda2ec4c12f3a2d65f8 --- /dev/null +++ "b/sig/beautiful1103/content/0-\346\265\267\345\205\211\350\265\204\350\256\257/1-\346\265\267\345\205\211\345\256\211\345\205\250\350\265\204\350\256\257.md" @@ -0,0 +1,66 @@ +## 综合资讯 + +- [海光亮相龙蜥安全会议,打破芯片加密“不可能三角”](https://www.toutiao.com/article/7412563357133193728/) +- [海光信息亮相外滩大会,构筑云计算数据安全底座](https://www.toutiao.com/article/7413933810120753673/) +- [每日一芯 | 海光CPU处理器](https://mp.weixin.qq.com/s/EQ-Cf4WXWdB44C_IkW9xmw) +- [海光信息:把好国产处理器安全大关](http://www.semiinsights.com/s/microprocessor/26/48437.shtml) +- [开放合作“芯”生态:海光信息国产C86芯片亮相2024世界计算大会](http://hn.people.com.cn/n2/2024/0926/c356884-40990136.html) +- [海光信息:为国产处理器筑牢信息安全底线](https://www.eet-china.com/news/202409297546.html) +- [从指令集和微架构底层创新开始,构建国产CPU的国密级别硬件安全](https://www.toutiao.com/article/7423288947109610038/) +- [【深度观察】融合多项创新技术 海光处理器将安全进行到底](https://mp.weixin.qq.com/s/aOL3X5YWPGVyr9eGonLYwA) +- [海光:构筑国产处理器安全新高地](https://www.eefocus.com/article/1759461.html) +- [“第39次全国计算机安全学术交流会—网络综合治理分论坛”在西安顺利召开](https://mp.weixin.qq.com/s/4kHnm8C4cMQ_ZMDVG5-FxA) +- [发布两款产品!安恒信息亮相“第二届海光安全技术高峰论坛”](https://mp.weixin.qq.com/s/N4S6m8MLRJ2jdIbVJzSnTQ) +- [成本可控、产业可落地 数据流通迎来密态时代](https://baijiahao.baidu.com/s?id=1813758838188748430&wfr=spider&for=pc) +- [芯片安全,信创选型第一道难关!](https://mp.weixin.qq.com/s/VdQUPikcWZ-qO34_LY10jA) +- [国产计算安全再突破,海光C86颠覆式创新](https://mp.weixin.qq.com/s/nW62HqEn1GAQFfBGBWQ_yA) +- [海光信息推动芯片安全技术进阶 联手构筑全场景安全生态](https://finance.sina.com.cn/jjxw/2024-11-16/doc-incwfyah5329729.shtml) +- [芯片安全事件频发,这家国产芯片向漏洞Say No](https://mp.weixin.qq.com/s/NtgBfvQbI3BqZobwT7qT9g) +- [国产≠安全!CPU安全标准如何定义?](https://mp.weixin.qq.com/s/9QZiOtgfYUpJZKu5AKOxIA) +- [信创芯片选型难?安全性能全都要!](https://mp.weixin.qq.com/s/obFPYo5yX9KU2UoAE620jg) +- [从底层创新探索国产CPU的国密级别安全之路](https://mp.weixin.qq.com/s/fXWBnVQjDTQC2juOIaov_g) +- [2024信创:一文看懂国产芯片格局](https://mp.weixin.qq.com/s/Kfudv0qIaGP7-uD0B-W95Q) +- [医疗信创四大关,国产CPU怎么过?](https://mp.weixin.qq.com/s/-nuXVcxBMMGzGn6oGfa2HA) + +## 隐私计算 + +- [携手中科海光,龙蜥社区正式上线首个 CSV 机密容器解决方案](https://mp.weixin.qq.com/s/m_jrA0nWNszJ5u--0_SCrw) +- [海光公司与安恒信息联合发布安全岛隐私计算一体机](https://mp.weixin.qq.com/s/vnaooR8y1E-caRTOZVrbUA) +- [集智达携手海光,推出多款网安产品,为信息安全保驾护航](https://mp.weixin.qq.com/s/UVD2dDT9VX1rixQ5tKVKng) +- [绿盟科技与海光公司联合发布新产品:“数安湖”隐私计算平台](https://mp.weixin.qq.com/s/fu1lNdK2_jIqa1B4-v6WLw) +- [星河案例ㅣ中国电信 X 冲量在线:基于智算中心的隐私计算应用实践](https://mp.weixin.qq.com/s/WAvMKlrzn1GpB_0qdQVtFg) +- [冲量在线亮相警博会,携手海光打造最前沿警务数据安全共享流通平台,护航新时代!](https://mp.weixin.qq.com/s/ZAb7fh3NQiiHCMhyEzgKkw) +- [富数科技Avatar可信隐私计算一体机亮相第二届海光安全技术高峰论坛](https://mp.weixin.qq.com/s/3X5FH4KCO__5a0T4sXkdRA) +- [带你读《云原生机密计算最佳实践白皮书》——海光CSV:海光安全虚拟化技术](https://developer.aliyun.com/article/1231608) +- [海光CSV:海光安全虚拟化技术](https://mp.weixin.qq.com/s/OvbDwbo1gzLyOx6Lm0qnYg) +- [获奖方案|冲量在线打通隐私计算“最后一公里”](https://mp.weixin.qq.com/s/7Y-RsBQybQQ2Gh5Yajc-Dg) +- [技术解读:CSV 机密计算技术栈和解决方案 | 龙蜥技术](https://mp.weixin.qq.com/s/2zNtcBAVtUnovl_DJxwsWQ) +- [数据由裸奔到穿衣,再到钢铁护甲过程中,安全加密架构到底哪个是钢铁护甲?](https://mp.weixin.qq.com/s/V4csTZY06xV4CP84vlHiOw) +- [官宣丨基于海光TEE的数据安全解决方案正式发布(附详细方案)](https://mp.weixin.qq.com/s/2QIBCTuA9N-wy0pfGp7eXg) +- [前沿 | 机密计算在金融数据安全存储中的应用探索](https://mp.weixin.qq.com/s/50SduP7-DyAK03mByuayFA) +- [墙裂推荐!云上机密计算,阿里云上体验了一下海光内存加密和远程认证](https://blog.csdn.net/s445320/article/details/141403121) +- [墙裂推荐!云上机密计算,试试海光CSV虚拟机](https://www.toutiao.com/article/7405521921015595574) +- [综述 | (冯登国院士团队)基于动态完整性度量的机密计算运行时监控方案](https://mp.weixin.qq.com/s/swZYCUzRWsaC9A2GSo5AFQ) +- [【携手向前】冲量在线受邀参与由海光信息主导围绕计算安全的国产C86技术成果与应用闭门研讨会](https://mp.weixin.qq.com/s/YfSDm7svHtldLijwuE6AfQ) + +## 可信计算 + +- [通俗理解什么是:“可信计算”及其实现原理](https://mp.weixin.qq.com/s/Ni02_l2qvJld80EltlZsBw) +- [行业动态 | 从“安全可靠”迈向“安全可信”](https://mp.weixin.qq.com/s/uXCUfrKNposWAJzfPxgiyw) +- [信息安全的基石,要靠国产处理器解决](https://www.toutiao.com/article/7413652455877018139) + +## 密码技术 + +- [【商密动态】新一代商用密码产品和密码服务](https://mp.weixin.qq.com/s/JJAYa2M5RRiAgZzPXWVTmw) +- [超融合国产加密技术适配验证与用户实践](https://mp.weixin.qq.com/s/wCer-OkvMWoBLBOa3y-O7A) +- [全栈超融合,开始卷其他赛道了](https://mp.weixin.qq.com/s/Vvj0d2YDSZ57qMUgoqTTGQ) +- [海光CPU,为国产硬件筑起安全屏障](https://mp.weixin.qq.com/s/5XoRKOfM-GI06o-kHWdvQw) +- [高速密码处理器,为什么海光的CPU更有优势?](https://www.eeworld.com.cn/qrs/eic679812.html) +- [海光在通用CPU上内置安全功能模块,可更好替代外置加密卡](https://www.cena.com.cn/semi/20240924/124799.html) +- [海光CPU:五大密码技术优势傍身 安芯守护信息安全](https://mp.weixin.qq.com/s/MXWUKDIXxnBMgegElGlZQQ) +- [用“芯”筑安全,协“密”更高效 | 格尔软件积极探索国产计算安全实践路径](https://mp.weixin.qq.com/s/fge53daKmyICHRw_1LShDw) +- [信创趋势下的商密变革,国产CPU内生安全最关键!](https://mp.weixin.qq.com/s/Vo162PQvB87IGnpI1gfS3w) + +## 漏洞防御 + +- [国外芯片漏洞频发 国产CPU替代加速](https://finance.sina.com.cn/roll/2024-11-17/doc-incwincs1407818.shtml) diff --git "a/sig/beautiful1103/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/beautiful1103/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" new file mode 100644 index 0000000000000000000000000000000000000000..65f891ed5d3d9a52aa2a119b0fbc4036b4c20ca3 --- /dev/null +++ "b/sig/beautiful1103/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" @@ -0,0 +1,143 @@ +# 安全功能配置要求 + +## 硬件配置要求 + +安全功能包括CSV、TPM2.0、TCM2.0、TPCM、TDM、TKM、HCT等,这些功能依赖CPU硬件、BIOS。 +- 表1是各种CPU型号所属的CPU代际信息。 +- 表2是各代际CPU使用安全功能的硬件配置版本要求。 +- 表3是各代际CPU的机密计算硬件能力细分说明。 + +表 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号

| #**要求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.6`,以`PI4.2.x`为前缀的PI版本要求>=`PI4.2.0.10`。 | + +表 3 机密计算硬件能力细分说明 + +| CPU | CSV支持情况 | +| --- | --- | +|

海光2号

| CSV1,支持15个不同虚拟机加密密钥1 | +|

海光C86-3G

| CSV1,支持15个不同虚拟机加密密钥1,2
CSV2,支持15个不同虚拟机加密密钥1,2 | +|

海光C86-4G

| CSV1,支持500个不同虚拟机加密密钥3
CSV2,支持500个不同虚拟机加密密钥3
CSV3,支持500个不同虚拟机加密密钥3,4 | +- 1. 海光支持ASID复用扩展启动的CSV1/2虚拟机个数 +- 2. CSV1/2共用15个密钥 +- 3. CSV1/2/3共用500个密钥 +- 4. 海光C86-4G的54xx、74xx支持CSV3,34xx不支持CSV1/2/3 + +## Bootloader 版本查看 +海光2号配置 +``` +Setup Utility -> Advanced -> PSP Firmware Versions +``` +如下图: + +![bootloader_info1](../../assets/bootloader_info1.jpg) + +![bootloader_info2](../../assets/bootloader_info2.jpg) + +海光C86-4G配置 +``` +Chipset -> PSP Firmware Versions +``` +如下图: + +![bootloader_info1](../../assets/bootloader_info_4.jpg) +## 国产OS安全功能支持情况 + +> 您可根据表格中OS的版本,支持的CPU型号,及支持的安全功能;选择您需要的OS。推荐使用版本更高的OS,其支持的安全功能更为完善。 +> +> 备注: 表格中,如果TPM2-TOOLS版本低于5.5(不包含5.5),则TCM有两个命令不支持:ecc encrypt/decrypt + +表 4 国产OS安全功能支持情况 + +| 厂商 |

OS版本
内核版本

| 支持的CPU型号 |

机密
计算

|

可信
计算

|

密码
技术

| 软件版本 | +| :---------- | :------------------------------------------------- | :------------------------------------------- | :------------------- | :---------------------------------- | :------------------------------------------- | :----------------------------------------------------------- | +| 龙蜥 |

8.8
kernel:5.10

|

海光2号
海光C86-3G

|

CSV
1

|

TPM
TPCM
TDM

| |

qemu:6.2.0
edk2:20220126
tpm2-tools:4.1.1
tpm2-tss:2.3.2
grub2:2.02
tpm2-abrmd: 2.3.3

| +| |

8.9
kernel:5.10

|

海光2号
海光C86-3G
海光C86-4G

|

CSV
1,2,3

|

TPM
TPCM
TDM
TCM

|

TKM
HCT

| 同上 | +| |

23.1
kernel:5.10

|

海光2号
海光C86-3G
海光C86-4G

|

CSV
1,2,3

|

TPM
TPCM
TDM
TCM

|

TKM
HCT

|

qemu: 8.2.0
edk2:202302
tpm2-tools:5.5
tpm2-tss:4.0.1
grub2:2.06
tpm2-abrmd: 3.0.0

| +| |

23.1 GA
kernel:6.6

|

海光2号
海光C86-3G
海光C86-4G

|

CSV
1,2,3

|

TPM
TPCM
TDM
TCM

|

CCP
TKM

|

qemu: 8.2
edk2:202402
tpm2-tools:5.5
tpm2-tss:4.0.1
grub2:2.12
tpm2-abrmd: 3.0.0

| +| 麒麟 |

服务器V10
SP3 2303
kernel:4.19

|

海光2号
海光C86-3G

|

CSV
1

|

TPM
TPCM
TDM

| CCP |

qemu: 4.1.0
edk2:202002
tpm2-tools:5.0
tpm2-tss:3.0.3
grub2:2.04
tpm2-abrmd: 2.3.3

| +| |

服务器V10
SP3 2403
kernel:4.19

|

海光2号
海光C86-3G
海光C86-4G

|

CSV
1,2,3

|

TPM
TPCM
TDM
TCM

|

TKM
HCT

| 同上 | +| |

服务器V11
kernel:6.6

|

海光2号
海光C86-3G
海光C86-4G

|

CSV
1,2,3

|

TPM
TPCM
TDM
TCM

|

TKM
HCT

|

qemu: 8.2
edk2:202311
tpm2-tools:5.5.1
tpm2-tss:4.0.1
grub2:2.12
tpm2-abrmd: 3.0.0

| +| |

桌面V10
SP1 2303
kernel:
5.4.18

|

海光2号
海光C86-3G

|

CSV
1

|

TPM
TPCM
TDM

|

CCP
TKM
HCT
需update2以上

|

qemu: 4.2.1
edk2:201911

| +| |

桌面V10
SP1 2403
kernel:
5.4.18

|

海光2号
海光C86-3G
海光C86-4G

|

CSV
1,2

|

TPM
TPCM
TDM

|

TKM
HCT

| 同上 | +| |

桌面V11
kernel:6.6

|

海光2号
海光C86-3G
海光C86-4G

|

CSV
1,2,3

|

TPM
TPCM
TDM
TCM

|

TKM
HCT

|

qemu: 8.2
edk2:202402
tpm2-tools:5.6
tpm2-tss:4.0.1
grub2:2.12
tpm2-abrmd: 3.0.0

| +| 统信 |

服务器
1060
kernel:
4.19.90

|

海光2号
海光C86-3G

|

CSV
1

|

TPM
TPCM
TDM

| CCP |

qemu: 4.1.0
edk2:202002
tpm2-tools:5.0
tpm2-tss:3.0.3
grub2:2.04
tpm2-abrmd: 2.3.3

| +| |

服务器
1070
kernel:
4.19.90

|

海光2号
海光C86-3G
海光C86-4G

|

CSV
1,2,3

|

TPM
TPCM
TDM
TCM

|

TKM
HCT

|

qemu: 6.2.0
其他同上

| +| |

桌面
1060
kernel:
4.19.90

|

海光2号
海光C86-3G

|

CSV
1

|

TPM
TPCM
TDM

| CCP |

qemu: 3.1.3
edk2:201811
tpm2-tools:3.1.3
tpm2-tss:2.1.0
grub2:2.04
tpm2-abrmd: 2.1.0

| +| |

桌面
1070
kernel:
4.19.90

|

海光2号
海光C86-3G
海光C86-4G

|

CSV
1,2

|

TPM
TPCM
TDM
TCM

|

TKM
HCT

|

qemu: 3.1.3
edk2:201811
tpm2-tools:5.4
tpm2-tss:3.2.2
grub2:2.04
tpm2-abrmd: 3.0.0

| +| 方德 |

服务器
V3.0
kernel:
4.19.113

|

海光2号
海光C86-3G

|

CSV
1

|

TPM
TPCM
TDM

| CCP |

qemu: 2.12.0
edk2:201903
tpm2-tools:4.1.1
tpm2-tss:2.3.2
grub2:2.02

| +| |

服务器
V4.0
kernel:
4.19.113

|

海光2号
海光C86-3G
海光C86-4G

|

CSV
1,2,3

|

TPM
TPCM
TDM
TCM

|

TKM
HCT

|

qemu: 4.2.0/7.2
edk2:201903
tpm2-tools:5.6
tpm2-tss:4.0.1
grub2:2.04
tpm2-abrmd: 2.3.3

| +| |

桌面
V5.0
kernel:
5.4.100

|

海光2号
海光C86-3G

|

CSV
1

|

TPM
TPCM
TDM

| CCP |

grub2:2.04
tpm2-tools:4.1.1
tpm2-tss:2.3.2

| +| 腾讯信创 |

kernel:
4.19.278

|

海光2号
海光C86-3G
海光C86-4G

|

CSV
1,2,3

|

TPM
TPCM
TDM

|

TKM
HCT

|

qemu: 6.2.0
edk2:202111
tpm2-tools:4.1.1
tpm2-tss:2.3.2
grub2:2.04
tpm2-abrmd: 2.3.3

| +| 麒麟信安 |

kernel:
4.19.90

|

海光2号
海光C86-3G
海光C86-4G

|

CSV
1,2,3

|

TPM
TPCM
TDM

|

TKM
HCT

|

qemu: 4.1.0
edk2:202202
tpm2-tools:5.0
tpm2-tss:3.0.3
grub2:2.04
tpm2-abrmd: 2.3.3

| +| OpenCloudOS |

9.2
kernel:
6.6

|

海光2号
海光C86-3G
海光C86-4G

|

CSV
1,2,3

|

TPM
TPCM
TDM
TCM

|

TKM
HCT

|

qemu: 8.2
edk2:20230524
tpm2-tools:5.5
tpm2-tss:4.0.1
grub2:2.12
tpm2-abrmd: 2.4.1

| +| 浪潮云 |

kernel:
4.19.91

|

海光2号
海光C86-3G

| | TPCM | | grub2:2.02 | +| 曙光云 |

kernel:
5.10.134

|

海光2号
海光C86-3G

|

CSV
1,2

| |

TKM
HCT

| qemu:3.1.1/7.2 | +| BC-Linux |

kernel:
5.10.0-182

|

海光2号
海光C86-3G

|

CSV
1,2

| | | | +| 新华三 |

kernel:
5.10.0-136

|

海光2号
海光C86-3G

|

CSV
1,2

| | |

qemu: 5.0
libvirt: 6.3

| + +## BIOS安装及设置要求 + +### 1. 加密虚拟化功能 + +要使用HYGON加密虚拟化功能(CSV,CSV2,CSV3),必须进入BIOS设置,通过以下路径打开SMEE功能,并设置SEV-ES ASID Space Limit为1。 +*注:PI2104以上的版本,不需要设置SEV-ES ASID Space Limit为* + +#### CPU BIOS配置参考 +**BIOS界面因厂家不同各有区别,如果找不到对应选项请联系厂家确认** + +海光2号配置 + +``` +HYGON CBS -> Moksha Common Options +``` +``` +Setup Utility -> Advanced -> HYGON CBS -> Core Common Options +``` +效果如下图: + +![enable-smee](../../assets/enable-smee.png) + +海光C86-4G配置 +``` +Advanced -> HYGON CBS -> Core Common Options +``` +效果如下图: + +![enable-smee](../../assets/enable-smee_4.png) +### 2. DCU直通功能 + +要使用DCU直通功能,必须进入BIOS设置,通过以下路径打开IOMMU功能。 + +#### CPU BIOS配置参考 +海光2号配置 +``` +HYGON CBS -> NBIO Common Options -> NB Configuration -> IOMMU +``` +``` +Setup Utility -> Advanced -> HYGON CBS -> NBIO Common Options +``` + +效果如下图: + +![enable-iommu](../../assets/enable-iommu.png) + +海光C86-4G配置 +``` +Advanced -> HYGON CBS -> NBIO Common Options +``` +效果如下图: + +![enable-iommu](../../assets/enable-iommu_4.png) diff --git "a/sig/beautiful1103/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/1-\345\256\211\350\243\205\346\223\215\344\275\234\347\263\273\347\273\237\345\222\214\345\206\205\346\240\270.md" "b/sig/beautiful1103/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/1-\345\256\211\350\243\205\346\223\215\344\275\234\347\263\273\347\273\237\345\222\214\345\206\205\346\240\270.md" new file mode 100644 index 0000000000000000000000000000000000000000..b43b034ffcb00dc2e60837be8509eba3b4f7cea1 --- /dev/null +++ "b/sig/beautiful1103/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/1-\345\256\211\350\243\205\346\223\215\344\275\234\347\263\273\347\273\237\345\222\214\345\206\205\346\240\270.md" @@ -0,0 +1,34 @@ +测试过程中需要下载源代码和软件,请确保网络连接稳定。 + +## 安装开源操作系统 +从下面的镜像中任选一个,下载并完成安装。 + +1. http://mirrors.openanolis.org/anolis/8.4/isos/GA/x86_64/AnolisOS-8.4-x86_64-dvd.iso (**该系统安装时内核可以选择,在Kernel Selection 选项中选择4.19版本的内核安装**) + +2. https://releases.ubuntu.com/20.04/ubuntu-20.04.6-live-server-amd64.iso + +3. 麒麟server V10 SP3 2403,向麒麟确认获取 + +**注:不同版本可能存在差异,可以根据实际情况调整。** +## 下载测试代码仓库 + +如果仓库较大clone困难,可以加参数 --depth 1 进行精简clone 。 +**如果客户将仓库作为zip压缩包下载下来,要将zip包传输到目标机器上再解压,不要解压后再传到目标机器,容易出现文件丢失。** + +``` +$ sudo chmod a+w /opt +$ cd /opt/ +$ git clone https://gitee.com/anolis/hygon-devkit.git +$ mv hygon-devkit hygon +$ sudo cp /opt/hygon/bin/hag /usr/bin +``` + +## 更新内核 + +``` +$ git clone https://gitee.com/anolis/hygon-cloud-kernel.git +$ cd hygon-cloud-kernel/ +$ sudo /opt/hygon/build_kernel.sh +``` + +更新完成后重启,选择新安装的内核进入系统,**麒麟系统不会安装主机内核,使用系统自带内核,但仍然需要重启使配置生效**。 diff --git "a/sig/beautiful1103/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/2-\345\257\274\345\205\245\351\200\232\347\224\250\345\256\211\345\205\250\350\257\201\344\271\246.md" "b/sig/beautiful1103/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/2-\345\257\274\345\205\245\351\200\232\347\224\250\345\256\211\345\205\250\350\257\201\344\271\246.md" new file mode 100644 index 0000000000000000000000000000000000000000..2e0e63e5832226bcbba70aae2076f0d3b63dd9b3 --- /dev/null +++ "b/sig/beautiful1103/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/2-\345\257\274\345\205\245\351\200\232\347\224\250\345\256\211\345\205\250\350\257\201\344\271\246.md" @@ -0,0 +1,152 @@ + +通用安全证书导入后,会写入安全flash,不重新烧录bios的情况下,无需重新导入。以下操作都无需重新导入证书:重启机器、升级安全固件。 + +## 安装依赖 +说明: 从https网站下载文件,需要依赖ssl证书,可以使用以下方法安装: + +Ubuntu: +``` +$ sudo apt-get install -y ca-certificates +``` +Centos: +``` +$ sudo yum install -y ca-certificates +``` + +### 下载hag + +``` +# 如果已经根据 1-安装操作系统和内核部分安装了hygon-devkit,可以在以下目录找到hag +$ ls -l /opt/hygon/bin/hag +# 如果没有安装hygon-devkit,可以使用以下命令下载 +$ mkdir -p /opt/hygon/bin/ +$ cd /opt/hygon/bin/ +$ wget https://gitee.com/anolis/hygon-devkit/raw/master/bin/hag +$ chmod +x hag +``` + +## 导入通用安全证书 + +> 说明:通用安全证书支持在线导入和离线导入两种方式。 +> +> 注意:要在C86-4G上使用`TKM`功能的客户,请参见`导入升级版通用安全证书` + +### 在线导入 + +``` +$ cd /opt/hygon/bin/ +$ sudo ./hag general hgsc_import +``` +图 1 在线导入通用安全证书 + +![](../../assets/img2-1.png) + +### 离线导入 + +(1) 获取芯片的chip ID和证书版本号 +``` +$ cd /opt/hygon/bin +$ sudo ./hag general get_id +$ sudo ./hag general hgsc_version +``` +图 2 获取芯片chip ID + +![](../../assets/img2-2.png) + +图 3 获取证书版本号 + +![](../../assets/img2-3.png) + +(2) 网站下载证书 +说明:在可以连接互联网的机器上,访问 https://cert.hygon.cn/hgsc, 如下图所示,输入您的服务器的Chip ID、证书版本号,以及您的公司信息。 + +注意:授权码请不要填写 + +图 4 网站下载证书 + +![](../../assets/hgsc_download1.png) + +(3) 导入证书 + +``` +$ cd /opt/hygon/bin +$ sudo ./hag general hgsc_import -offline -in /realpath/to/hgsc_certchain +``` + +说明:将下载的证书拷贝到对应的服务器,证书名称类似为hygon-hgsc-certchain-v1.0-NZA9T02082605.bin。如下图,使用hag离线导入该证书。 + +图 5 离线导入证书 + +![](../../assets/img2-5.png) + +## 导入升级版通用安全证书 + +### 获取`授权码` + +在C86-4G上使用TKM功能,需要导入升级版通用安全证书,该证书需要使用授权码下载和导入,请联系securitytech@hygon.cn获取授权码,邮件中需提供以下信息。 + +``` +1.您的公司名称 +2.您的公司邮箱地址 +3.您购买的CPU型号 +4.您购买的CPU数量 +``` + +获取授权码后,即可使用`在线导入`或`离线导入`方式导入证书。 + +### 在线导入 + +``` +$ cd /opt/hygon/bin/ +# -authcode后面跟获取到的授权码 +$ sudo ./hag general hgsc_import -authcode xxxxx-xxxxx-xxxxx +``` + +图 6 在线导入升级版通用安全证书 + +![](../../assets/hgsc_import.png) + +### 离线导入 + +(1) 获取芯片的chip ID和证书版本号 + +``` +$ cd /opt/hygon/bin +$ sudo ./hag general get_id +$ sudo ./hag general hgsc_version +``` + +图 7 获取芯片chip ID和证书版本号 + +![](../../assets/hgsc_version2.png) + +(2) 网站下载证书 +说明:在可以连接互联网的机器上,访问 https://cert.hygon.cn/hgsc, 如下图所示,输入您的服务器的Chip ID、证书版本号,您的公司信息,以及获取的授权码。 + +图 4 网站下载证书 + +![](../../assets/hgsc_download2.png) + +(3) 导入证书 + +``` +$ cd /opt/hygon/bin +$ sudo ./hag general hgsc_import -offline -in /realpath/to/hgsc_certchain +``` + +说明:将下载的证书拷贝到对应的服务器,证书名称类似为hygon-hgsc-certchain-v2.0-KPA64911201107.bin。如下图,使用hag离线导入该证书。 + +图 5 离线导入证书 + +![](../../assets/img2-5.png) + +## 确认证书导入成功 + +``` +$ cd /opt/hygon/bin +$ sudo ./hag csv platform_status +``` + +图 6 确认证书导入成功 + +![](../../assets/img2-6.png) \ No newline at end of file diff --git "a/sig/beautiful1103/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/3-\346\243\200\346\237\245\350\275\257\347\241\254\344\273\266\347\211\210\346\234\254.md" "b/sig/beautiful1103/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/3-\346\243\200\346\237\245\350\275\257\347\241\254\344\273\266\347\211\210\346\234\254.md" new file mode 100644 index 0000000000000000000000000000000000000000..9412e3a28f916187de7e0c093546f3727bcc59c8 --- /dev/null +++ "b/sig/beautiful1103/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/3-\346\243\200\346\237\245\350\275\257\347\241\254\344\273\266\347\211\210\346\234\254.md" @@ -0,0 +1,35 @@ +## 查看CPU型号 + +``` +$ lscpu |grep "Model name" +Model name: Hygon C86 7280 32-core Processor +``` +第2位数字代表CPU型号,7280表示是2号CPU,类似地7180代表1号CPU,7380代表3号CPU。 + +## 查看hag版本 + +``` +$ cd /opt/hygon/bin +$ ./hag general version +Version: 1820 (release) +``` + +## 查看固件版本 + +``` +$ cd /opt/hygon/bin +$ sudo ./hag csv platform_status +api_major: 1 +api_minor: 3 +platform_state: CSV_STATE_INIT +owner: PLATFORM_STATE_SELF_OWN +chip_secure: SECURE +fw_enc: ENCRYPTED +fw_sign: SIGNED +CSV: CSV CSV2 CSV3 +build id: 1805 +guest_count: 0 +is HGSC imported: YES +supported csv guest:11 +platform_status command successful +``` \ No newline at end of file diff --git "a/sig/beautiful1103/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/9-FAQ/1-BIOS.md" "b/sig/beautiful1103/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/9-FAQ/1-BIOS.md" new file mode 100644 index 0000000000000000000000000000000000000000..aba460267b2d34ff2b063927f16803653194ce90 --- /dev/null +++ "b/sig/beautiful1103/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/9-FAQ/1-BIOS.md" @@ -0,0 +1,6 @@ +# BIOS FAQ + +#### Q: 文档中提到bios必须支持CSV、fTPM2.0、fTCM2.0、TPCM,如何查看我的机器的BIOS是否已支持 + +A: 使用`sudo ./hag general check`检查是否已支持;如果不支持把这个要求发送给`OEM`厂商 + diff --git "a/sig/beautiful1103/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/9-FAQ/2-Linux_Kernel.md" "b/sig/beautiful1103/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/9-FAQ/2-Linux_Kernel.md" new file mode 100644 index 0000000000000000000000000000000000000000..70de3ea8fcaa3d6bf96b2867a96fafac13f10171 --- /dev/null +++ "b/sig/beautiful1103/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/9-FAQ/2-Linux_Kernel.md" @@ -0,0 +1,8 @@ +# Linux Kernel FAQ + +#### Q: C86-4G上,ccp模块卸载时提示:`rmmod: ERROR: Module ccp is in use` + +A: C86-4G平台上,需要把ccp设置为DMA_PRIVATE,才能让ccp的引用计数变得正常,有以下两种方式: + +1. `echo 'options ccp dma_chan_attr=1' | tee -a /etc/modprobe.d/ccp.conf` , 然后重启设备,之后ccp模块都可以被正常卸载 +2. 手动insmod时,也需要添加参数:`insmod ccp.ko dma_chan_attr=1` \ No newline at end of file diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/1-\345\256\211\350\243\205CSV\350\275\257\344\273\266.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/1-\345\256\211\350\243\205CSV\350\275\257\344\273\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..935b902d35afe031da91c1a77032ad6ff7f6c543 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/1-\345\256\211\350\243\205CSV\350\275\257\344\273\266.md" @@ -0,0 +1,68 @@ + +安装CSV软件之前,请先准备系统环境并导入通用安全证书。 + +请参考[1-1-安装操作系统和内核](https://openanolis.cn/sig/Hygon-Arch/doc/865622272844371792)准备系统环境。 + +请参考[1-2-导入通用安全证书](https://openanolis.cn/sig/Hygon-Arch/doc/865622274698254162)导入通用安全证书。 + +## 安装依赖软件 + +``` +$ sudo /opt/hygon/csv/install_csv_sw.sh +``` + +## 安装qemu +**麒麟系统不需要该步骤,使用系统自带即可,kata 测试不需要该步骤*** +``` +$ git clone https://gitee.com/anolis/hygon-qemu.git +$ cd hygon-qemu/ +$ sudo /opt/hygon/csv/build_qemu.sh +``` + + +## 安装grub +**麒麟系统不需要该步骤,使用系统自带即可,kata 测试不需要该步骤*** +``` +$ wget https://ftp.gnu.org/gnu/grub/grub-2.06.tar.gz +$ tar -xvf grub-2.06.tar.gz +$ cd grub-2.06/ +$ sudo /opt/hygon/csv/build_grub.sh +``` + +## 安装edk2 +**麒麟系统不需要该步骤,使用系统自带即可,kata 测试不需要该步骤** + +**编译依赖安装grub章节** +``` +$ git clone https://gitee.com/anolis/hygon-edk2.git +$ cd hygon-edk2/ +$ git submodule update --init +$ sudo /opt/hygon/csv/build_edk2.sh +``` + +## 安装devkit + +``` +$ cd /opt/hygon/csv/ +$ sudo ./make_vm_img.sh +$ git clone -b master https://github.com/guanzhi/GmSSL.git +$ sudo ./build_devkit.sh +``` +## 安装虚拟机内核 + +**kata 测试不需要该步骤** + +### 运行虚拟机 +``` +$ sudo qemu-system-x86_64 -name csv-vm --enable-kvm -cpu host -m 6114 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:2222,server,nowait -vnc 0.0.0.0:0 -object sev-guest,id=sev0,policy=0x1,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 -netdev bridge,br=virbr0,id=net0 -device virtio-net-pci,netdev=net0,romfile= -nographic +``` +### 安装虚拟机内核 +虚拟机内核使用主机编译好的内核,登录虚拟机,虚拟机账号为root,密码为root。 +``` +# dhclient +# scp host@hostip:/opt/hygon/kernel.tgz ./ +# scp host@hostip:/opt/hygon/csv/vm_kernel_install.sh ./ +# chmod +x vm_kernel_install.sh +# ./vm_kernel_install.sh +# poweroff +``` diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/1-CSV3\345\212\240\345\257\206\350\231\232\346\213\237\346\234\272\346\236\266\346\236\204\346\246\202\350\246\201\344\273\213\347\273\215.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/1-CSV3\345\212\240\345\257\206\350\231\232\346\213\237\346\234\272\346\236\266\346\236\204\346\246\202\350\246\201\344\273\213\347\273\215.md" new file mode 100644 index 0000000000000000000000000000000000000000..465207fb0b3b5636726ee5e0305a3c5dbb0636f2 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/1-CSV3\345\212\240\345\257\206\350\231\232\346\213\237\346\234\272\346\236\266\346\236\204\346\246\202\350\246\201\344\273\213\347\273\215.md" @@ -0,0 +1,48 @@ +测试之前,请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + +## CSV3加密虚拟机架构概要介绍 +海光第三代安全虚拟化技术(CSV3)在前二代技术的基础上继续增强,在CPU内部实现了虚拟机数据的安全隔离,禁止主机操作系统读写CSV3虚拟机内存,
+禁止主机操作系统读写虚拟机嵌套页表,保证了虚拟机数据的完整性,实现了CSV3虚拟机数据机密性和完整性的双重安全。 + + ![](../../../assets/csv3-arch2.png) + + +#### 安全内存隔离单元 +安全内存隔离单元是海光第三代安全虚拟化技术的专用硬件,是实现虚拟机数据完整性的硬件基础。
+该硬件集成于CPU内部,放置于CPU核心访问内存控制器的系统总线路径上。
+该硬件可获取CSV3虚拟机安全内存的信息,包括内存物理地址,虚拟机VMID,及相关的权限等。
+CPU在访问内存时,访问请求先经过安全内存隔离单元做合法性检查,若访问允许,继续访问内存,否则访问请求被拒绝。
+ +以CSV3架构图为例,在CSV3虚拟机运行过程中读取或写入内存时,先经过页表翻译单元完成虚拟机物理地址(GPA, Guest Physical Address)
+到主机物理地址(HPA, Host Physical Address)的转换,再向地址总线发出内存访问请求。
+访问请求中除了包含读写命令、内存地址(HPA),还必须同时发出访问者的VM ID。
+ +当CPU读取内存数据时,若安全内存隔离单元判断内存读取请求者的VMID错误,返回固定模式的数据。
+当CPU写入内存数据时,若安全内存隔离单元判断内存写入请求者的VMID错误,丢弃写入请求。 + +#### 安全处理器 +安全内存隔离单元是海光第三代安全虚拟化保护虚拟机内存完整性的核心硬件,
+对此硬件单元的配置必须保证绝对安全,无法被主机操作系统修改。
+ +海光安全处理器是SoC内独立于主CPU之外的处理器,是CPU的信任根。
+安全处理器在CPU上电后,通过内置验签密钥验证固件的完整性,并加载执行。
+安全处理器具有独立硬件资源和封闭的运行环境,是CPU内最高安全等级硬件,管理整CPU的安全。
+安全内存隔离单元的内容仅安全处理器有权限配置和管理,主机操作系统无权读写。
+ +在虚拟机启动时,主机操作系统向安全处理器发送请求,安全处理器对安全内存隔离单元做初始配置。
+虚拟机运行期间,安全处理器固件更新安全内存隔离单元。
+虚拟机退出后,安全处理器清除安全内存隔离单元的配置。
+安全处理器会检查主机发来的配置请求是否合法,主机向安全处理器发起的任何非法配置请求,都会被拒绝。
+ +虚拟机整生命周期内,安全内存隔离单元都在安全处理器的管理控制之下,保证了其配置的安全性。
+ +#### Virtual Machine Control Block(VMCB)保护 +Virtual Machine Control Block(VMCB)是虚拟机的控制信息块,保存了虚拟机ID(VMID),虚拟机页表基地址,虚拟机寄存器页面基地址等控制信息,
+主机操作系统通过修改虚拟机控制信息能够影响并更改虚拟机内存数据。 + +CSV3增加了对虚拟机控制信息的保护,安全处理器负责创建VMCB,并配置于安全内存隔离单元的硬件保护之下。
+主机操作系统无法更改CSV3虚拟机VMCB的内容。 + +为更好的与主机操作系统的软件配合,CSV3创建了真实VMCB与影子VMCB页面。主机操作系统创建影子VMCB,填入控制信息,传递给安全处理器。
+安全处理器创建真实VMCB页面,复制影子VMCB中除虚拟机ID,虚拟机页表基地址,虚拟机寄存器页面基地址等关键信息之外的控制信息,并自行添加关键控制信息。
+虚拟机使用真实VMCB页面启动和运行,阻止了主机操作系统对虚拟机VMCB的攻击。
diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/2-CSV\350\277\234\347\250\213\350\256\244\350\257\201\346\212\200\346\234\257\344\273\213\347\273\215.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/2-CSV\350\277\234\347\250\213\350\256\244\350\257\201\346\212\200\346\234\257\344\273\213\347\273\215.md" new file mode 100644 index 0000000000000000000000000000000000000000..2a238823568288556188f12569936d1d83f2f939 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/2-CSV\350\277\234\347\250\213\350\256\244\350\257\201\346\212\200\346\234\257\344\273\213\347\273\215.md" @@ -0,0 +1,105 @@ +测试之前,请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + +## 概要 +CSV 虚拟机具有远程认证功能,从CSV 虚拟机中获取报告,将报告发送到认证方进行认证,从而确保机密信息是运行在客户可信的平台上。 + +## 证书链 +为保证认证报告的真实性、完整性和不可否认性,认证报告中包含对报告中部分字段项的签名值。签名密钥为PEK私钥,PEK(Platform Endorsement Key) 是一组 SM2公私钥对,由CSV 固件使用硬件真随机数发生器产生。PEK证书可以被芯片密钥CEK 和硬件所有者密钥 OCA同时签名,以建立起可信证书链。 + +### 秘钥介绍 + +#### Platform Diffie-Hellman Key +Platform Diffie-Hellman key (PDH)是国密SM2公私钥对,用于CSV固件和虚拟机使用者之间进行密钥协商。CSV固件使用硬件真随机数发生器产生PDH,PDH私钥保存于CSV固件中,PDH公钥可从CSV固件中导出,供虚拟机使用者使用。 +虚拟机使用者随机生成主密钥(master secret),并使用PDH公钥对主密钥加密后传递给CSV固件,CSV固件使用PDH私钥解密得到主密钥,后续CSV固件可使用主密钥派生出其他密钥。 +PDH被PEK签名,如果PEK改变,必须生成新的PDH。PDH在平台的生命周期内不变。 +#### Platform Endorsement Key +Platform Endorsement Key(PEK)是国密SM2公私钥对,作为平台的身份标识签名PDH证书,同时PEK证书被CEK和OCA签名,这样建立起可信证书链保证PDH证书是合法的。 +CSV固件使用硬件真随机数发生器产生PEK。PEK在平台的生命周期内不变。 +#### Chip Endorsement Key +Chip Endorsement Key(CEK)是国密SM2公私钥对,作为芯片标识签名PEK证书。CEK由保存在芯片安全fuse中的数据派生,每颗芯片的CEK都不相同,在芯片的生命周期内不变。 +#### Hygon CSV Signing Key +Hygon CSV Signing Key(HSK) 是国密SM2公私钥对,签名CEK证书。HSK私钥保存在海光专用的HSK签名服务器上。 +#### Hygon Root Key +Hygon Root Key(HRK) 是国密SM2公私钥对,签名HSK证书。HRK私钥保存在海光专用的HRK签名服务器上。 +#### Owner Certificate Authority +Owner Certificate Authority(OCA) 是国密SM2公私钥对,是平台所有者的身份标识,签名PEK证书。平台所有者可以是CSV固件或者硬件所有者,如果CSV固件是平台所有者,OCA由CSV固件使用硬件真随机数发生器产生;否则平台所有者将OCA证书导入到CSV固件。 + +### 证书链构建流程 +CSV 固件初始化时,CSV固件是平台所有者,OCA由CSV固件使用硬件真随机数发生器产生,平台初始化时CEK 和OCA 私钥对PEK 进行签名,构建一套默认和客户无关的海光证书链,由海光确保证书链可信。 + +如果虚拟机使用者想使用自己的私钥对相关的证书链签名,可使用以下流程:
+![](../../../assets/attestation_2.png) + +1、生成OCA公私钥对,使用公私钥对构造OCA自签名证书。
+2、生成PEK证书的签名请求,签名请求中包含PEK 公钥以及其他平台相关信息。
+3、使用OCA私钥将签名请求签名生成PEK证书。
+4、将签名后的PEK和OCA 证书文件导入到固件平台。
+CSV 固件利用芯片密钥CEK对PEK证书进行再次签名。此时PEK证书中包含PEK公钥和2个签名(CEK私钥签名和OCA私钥签名),实现包含用户私钥签名的可信证书链建立。PEK证书在生成认证报告时被传入报告中。 + + + +## 远程认证报告生成校验 + + ![](../../../assets/attestation_1.png) +### 远程认证报告生成 +#### 虚拟机摘要值生成 +为了保证系统程序及其运行环境的完整性,虚拟机启动过程中,安全处理器需要对OVMF.fd、虚拟机内核文件和虚拟机内存文件(initrd)进行度量。
+1、将服务程序放入initrd文件中。
+2、对initrd文件、OVMF.fd和虚拟机内核镜像文件,利用SM3算法计算虚拟机文件摘要值。
+3、在虚拟机启动时提供虚拟机文件和摘要值,CPU中的安全处理器利用 SM3 算法计算虚拟机文件的摘要并进行完整性检验。
+4、完整性信息校验通过,虚拟机成功启动,在生成认证报告时将此摘要值作为虚拟机摘要值写入认证报告中。
+#### 生成认证报告 +认证报告生成包含如下步骤:
+1、固件将 CSV 虚拟机启动时传入的虚拟机的 ID、版本号信息填入认证报告。
+2、将DH公钥的摘要值以及 MNONCE 填入认证报告,公钥摘要值用来确定启动虚拟机的用户身份, MNONCE用来确保认证报告的唯一性。
+3、将虚拟机摘要值、虚拟机规则、签名密钥、签名算法、PEK证书等信息填入认证报告中。
+4、固件会生成随机数并填写到认证报告的ANONCE 字段,由 ANONCE 对认证报告的00h-BBh和150h-9B3h范围分别进行异或。
+5、利用PEK私钥对认证报告中异或后的部分字段签名并填写到SIG1字段。
+6、利用MNONCE对认证报告中异或后的部分字段计算HMAC并写入到 MAC字段。
+### 远程认证报告校验 +用户端在获取到认证报告后,随即对PEK证书链进行验证,验证通过后进行验签,并校验报告中的其他字段项。 +#### 证书链校验 +PEK证书中包含CEK签名和客户私钥签名两个签名值,CEK证书被HSK(Hygon CSV Signing Key)密钥签名,HSK证书被HRK(Hygon Root Key)密钥签名。用户端需分别对两个签名值的证书链进行校验。
+CEK签名证书链校验流程:
+1、根据认证报告中芯片ID的值,从海光证书服务器下载对应的CEK证书、HSK证书和HRK证书。
+2、使用 HRK 公钥验证 HSK 证书,使用 HSK公钥验证 CEK 证书,使用 CEK 公钥验证 PEK 证书。
+3、验签通过说明PEK证书是由合法的海光芯片中的密钥颁发的。
+同样地,用户端可以使用客户OCA证书中公钥对PEK验签,验证OCA证书链,从而证明该 PEK 证书是由客户可信证书链保证的。 +#### 报告内容校验 +用户在完成PEK证书证书链校验后,对获取到的认证报告内容进行校验,校验过程如下:
+1、获取认证报告中的ANONCE字段值,利用ANONCE字段值对报告的00h-BBh范围进行异或。
+2、利用PEK证书中的公钥完成对认证报告中SIG1值的验签。
+3、根据提前获取到的虚拟机信息、虚拟机摘要值、USERDATA、MNONCE等信息对报告中的相应字段完成校验。校验通过说明是在可信的CSV虚拟机中。 + + +### 报告格式 + +报告输入数据的格式,客户可以定制下面字段的内容 + +| 偏移 | 比特位 | 输入/输出 | 名称 | 描述 | +|----- |-------| ---------|---------|------| +|00h | 511:0| In | USERDATA| 用户自定义数据 | +|40h | 127:0| In | MNONCE | 一次性随机数 | +|50h | 255:0| In | HASH |SM3(USERDATA \|\| MNONCE)| + +报告输出数据的格式 + +| 偏移 | 比特位 | 输入/输出 | 名称 | 描述 | +|-----|--------|----------|---------------|--------------| +|00h |255:0 | Out | PUBKEY_DIGEST | DH公钥的SM3摘要值,用于确认启动虚拟机的用户身份。DH密钥由虚
拟机用户生成,用于对虚拟机启动参数进行签名。| +|20h |127:0 | Out | ID |虚拟机ID,虚拟机用户自定义。| +|30h |127:0 | Out |Version |虚拟机版本号,虚拟机用户自定义。| +|40h |511:0 | Out |USERDATA |用户自定义数据| +|80h |127:0 | Out |MNONCE |一次性随机数,用于区别报告内容防重放攻击,由虚拟机用户生成。| +|90h |255:0 | Out |DIGEST |虚拟机的启动摘要,虚拟机initrd文件、OVMF.fd和虚拟机内核
镜像文件的SM3摘要值。| +|B0h |31:0 | Out |POLICY |虚拟机规则| +|B4h |31:0 | Out |SIG_USAGE |签名密钥用途 PEK| +|B8h |31:0 | Out |SIG_ALGO |签名算法 SM2| +|BCh |31:0 | Out |ANONCE |固件产生的随机数,用于对报告进行混淆处理,防止主机攻击。| +|C0h |1151:0 | Out |SIG1 |PEK签名| +|150h |16671:0 | Out |PEK_CERT |平台的PEK证书| +|974h |511:0 | Out |CHIP_ID |芯片ID,字符串| +|9B4h |255:0 | Out |Reserved2 |保留字段| +|9D4h |255:0 | Out |MAC |MNONCE完整性保护PEK_CERT \|\| CHIP_ID \|\| Reserved2生成的HMAC| + + diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/3-CSV\347\247\230\351\222\245\345\260\201\345\215\260\346\212\200\346\234\257\344\273\213\347\273\215.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/3-CSV\347\247\230\351\222\245\345\260\201\345\215\260\346\212\200\346\234\257\344\273\213\347\273\215.md" new file mode 100644 index 0000000000000000000000000000000000000000..dcc2cff590dcc11fc911d8dab3f77e1652dd1ca6 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/3-CSV\347\247\230\351\222\245\345\260\201\345\215\260\346\212\200\346\234\257\344\273\213\347\273\215.md" @@ -0,0 +1,65 @@ +测试之前,请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + +## 概要 +CSV虚拟机可以从海光安全固件中获取由机器根密钥和虚拟机相关信息派生出的密钥。该key不需要存储,只能通过账号密码登录或访问虚拟机中服务等方式从虚拟机内部获取,没有泄漏风险,key绑定了虚拟机和主机的相关信息,可信唯一,该密钥可以被客户用于任何目的,例如加密磁盘中的敏感数据,通过派生出的密钥对磁盘中存储的数据进行加密,确保即使攻击者访问存储介质,也无法读取数据,虚拟机启动后从虚拟机中获取该key并用其对磁盘中的敏感数据进行解密。 + +## 原理介绍 +![](../../../assets/sealing-key.png) + +1、海光安全固件通过硬件派生出的root-key 、固件中csv-sealing-key 字符串、虚拟机| policy | user_pubkey_digest | user_vm_digest | vm_id | vm_version | 内容派生出sealing key,该key 只能从虚拟机内部获取,确保了key的可信,在相同的主机上使用相同的虚拟机参数和虚拟机相关文件启动虚拟机,虚拟机中的key保持不变,key绑定了虚拟机和主机的相关信息,确保了key的唯一性。 + +2、虚拟机通过相应的接口获取海光安全固件中产生的sealing key。 + +3、虚拟机中用户应用程序使用获取的sealing key 进行一定场景的业务应用。 + +### 派生sealing key组件描述 + +| 组件 | 描述 | +|----- |-------| +|root-key|海光安全固件通过硬件派生出的root-key,每台机器唯一且固定不变。| +|csv-sealing-key|海光安全固件提供的字符串,固定不变,作为派生秘钥的参数之一。| +|policy|csv虚拟机的启动策略,用户通过 hag csv generate_policy --nodebug 生成默认的配置,csv generate_policy --help 可以查看详细配置说明,qemu 启动虚拟机的policy 参数配置需要和hag 设置的一致。| +|user_pubkey_digest|DH公钥的SM3摘要值,用于确认启动虚拟机的用户身份。DH证书在使用hag csv generate_launch_blob -build $build_id -bios OVMF.fd -kernel vmlinuz -initrd initramfs.img 计算虚拟机组件摘要时候自动生成,证书中包含DH公钥,DH证书文件为guest_owner_dh.cert,作为qemu的参数传入。| +|user_vm_digest|虚拟机组件启动摘要,通常由ovmf,内核image,文件系统initrd组成,通过hag csv generate_launch_blob -build $build_id -bios OVMF.fd -kernel vmlinuz -initrd initramfs.img 命令生成launch_blob.bin文件,该文件中包含虚拟机启动摘要,文件作为qemu 启动参数传入。| +|vm_id|虚拟机id,用户自己定义,hag csv generate_launch_blob --help 中 通过-id 参数传入,字段默认都为0。| +|vm_version|虚拟机版本号,用户自己定义,hag csv generate_launch_blob --help 中 通过-version 参数传入,字段默认都为0。| + +### sealing key qemu启动参数介绍 + +1、获取安全固件build_id +``` +build_id=`sudo hag csv platform_status |grep "build id"` +``` +2、导出证书链 +``` +hag csv export_cert_chain +``` +3、生成 policy 文件 +``` +hag csv generate_policy --nodebug +``` +4、生成launch_blob.bin、guest_owner_dh.cert +``` +hag csv generate_launch_blob -build $build_id -bios OVMF.fd -kernel vmlinuz -initrd initramfs.img +``` +guest_owner_dh.cert 为用户dh证书,对应的私钥对launch_blob.bin中的字段进行签名,dh证书和私钥都由hag中 generate_launch_blob 命令自动生成,guest_owner_dh.cert 作为qemu的参数传入,海光安全固件获取证书中的公钥,对launch_blob.bin 中的内容进行验签。 +launch_blob.bin作为qemu启动参数传入,launch_blob.bin内容对应为SESSION的数据结构,内容如下: + + +| 偏移 | 比特位 | 输入/输出 | 名称 | 描述 | +|----- |-------| ---------|---------|------| +|00h | 127:0| In | NONCE| 一次性随机数,用户随机生成 | +|10h | 255:0| In | WRAP_TK | KEK对 TEKTIK 加密形成WRAP_TK,TEKTIK 用户随机生成 ,KEK 由主密钥派生出来| +|30h | 127:0| In | WRAP_IV |加密TEKTIK使用的IV,加密参数之一| +|40h | 255:0| In | WRAP_MAC |使用KIK作为key 对WRAP_TK,WRAP_IV 进行hmac计算生成WRAP_MAC进行完整性保护,KIK 由主密钥派生出来| +|60h | 255:0| In | SESSION_MAC |使用TIK对policy\|\|session data(0x124 - 0x2C3)进行hmac计算生成SESSION_MAC对数据进行完整性保护| +|80h | 1311:0| In | - |保留字段,0| +|124h | 2047:0| In | Menc |主密钥,用户随机生成,被PDH公钥加密后为Menc,KEKKIK 由主密钥派生,海光安全固件中使用PDH私钥对Menc进行解密得到主密钥,使用主密钥派生出KEKKIK,使用KIK对WRAP_TK、WRAP_IV 进行完整性验证,KEK解密WRAP_TK 得到TEKTIK,使用KIK对policy\|\|session data(0x124 - 0x2C3)重新进行hmac计算和SESSION_MAC进行对比,实现数据完整性保护| +|224h | 255:0| In | DIGEST |虚拟机摘要,使用虚拟机组件计算生成,虚拟机组件如 OVMF.fd、 vmlinuz 、initramfs.img,安全固件中会对其进行重新计算和用户计算出的DIGEST进行对比,从而实现可信度量启动| +|244h | 255:0| In | - |保留字段,0| +|264h | 127:0| In | VM_ID |虚拟机id,用户自己定义,hag csv generate_launch_blob --help 中 通过-id 参数传入| +|274h | 127:0| In | VM_VERSION |虚拟机版本号,用户自己定义,hag csv generate_launch_blob --help 中 通过-version 参数传入| +|284h | 511:0| In | USERDATA |用户自定义数据| +|2C4h | 511:0| In | SIG |用户DH私钥对SESSION数据的签名| + +### 测试用例参考 [2-3-2-测试密钥封印](https://openanolis.cn/sig/Hygon-Arch/doc/865622217613776670?lang=zh) diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/4-CSV\347\243\201\347\233\230\345\212\240\345\257\206\346\212\200\346\234\257\344\273\213\347\273\215.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/4-CSV\347\243\201\347\233\230\345\212\240\345\257\206\346\212\200\346\234\257\344\273\213\347\273\215.md" new file mode 100644 index 0000000000000000000000000000000000000000..39334b0b491c7a04119a07148e3ddb4017c2950f --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/4-CSV\347\243\201\347\233\230\345\212\240\345\257\206\346\212\200\346\234\257\344\273\213\347\273\215.md" @@ -0,0 +1,75 @@ +测试之前,请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + +## 概要 +普通虚拟机磁盘加密技术只能对虚拟机数据分区进行加密,且秘钥管理是一个问题,秘钥放在boot分区存在泄漏的风险,CSV虚拟机提供了全磁盘加密技术,可以同时对boot分区和数据分区进行加密,boot分区的秘钥加密后通过 +虚拟机qemu启动参数动态注入到虚拟机内存中,秘钥只能虚拟机启动后从虚拟机内存获取,实现磁盘的解密启动,虚拟机boot分区中不保存boot分区的加密秘钥,秘钥具有很强的安全性,虚拟机磁盘中的数据在主机上为密文形式存储,确保数据安全不被泄漏。 + +## 原理介绍 + +### 磁盘加密 + +![](../../../assets/disk_encryption1.png) + +1、使用iso镜像安装虚拟机,安装时选择对磁盘的数据分区进行加密,虚拟机安装完毕,关机。 + +2、使用安装好的磁盘镜像启动虚拟机,输入安装时的加密数据分区的秘钥,虚拟机启动成功。 + +3、对虚拟机的boot分区加密,设置加密秘钥,该秘钥后续会作为qemu 的参数传入注入到虚拟机内存中。 + +4、安装支持磁盘加密的grub,使能grub 的磁盘加密配置。 + +5、生成秘钥,秘钥放到initrd文件系统中,生成的密钥文件添加到数据分区的一个新的 LUKS 密钥槽中,LUKS 支持多个密钥槽,每个密钥槽可存储一个解锁加密磁盘的密钥,每个密钥槽中的密钥都可以独立解锁加密分区,更新/etc/crypttab配置,使得系统可以在启动时通过密钥文件自动解锁数据分区,该秘钥和iso安装虚拟机时加密磁盘的秘钥是相互独立的,都可以对磁盘进行解密,它们分别属于不同的秘钥槽。 + +6、设置完成,虚拟机关机。 + + +### 打包秘钥 + +![](../../../assets/disk_encryption2.png) + +1、将加密boot 分区的秘钥进行加密打包,使用TEK 和IV 对数据进行加密,后续会将该秘钥注入到虚拟机内存中,用于解密boot分区,TEK由hag 命令generate_launch_blob 随机产生并写入到文件中,后续由hag 加密打包命令package_secret使用,IV 由hag 打包命令随机生成。 + +2、将加密后的数据写入文件,该文件为秘钥文件。 + +3、将文件内容进行base64 编码处理,使内容为base64 编码的格式存储在秘钥文件中,该文件会作为qemu参数传入。 + +4、将秘钥头的结构数据写入到秘钥头文件中。 + + 秘钥头参数 + + | 参数 | 描述 | + |----- |-------| + |FLAGS|FLAGS.REUSE=0时,MEASURE 是LAUNCH_MEASURE命令返回的MEASURE值。FLAGS.REUSE=1时,MEASURE=0。| + |IV|加密秘钥数据的参数之一,随机产生| + |HMAC|对(0x01 \|\| FLAGS \|\| IV \|\| GUEST_LENGTH \|\| TRANS_LENGTH \|\| DATA \|\|MEASURE\|\| TIK)进行hmac 计算,用于保护数据的完整性,GUEST_LENGTH为虚拟机密钥的长度,16的整数倍,不超过16K,TRANS_LENGTH为源数据的长度,DATA 为加密后的秘钥,MEASURE 为虚拟机的MEASURE,TIK为完整性保护用的KEY,由hag 命令generate_launch_blob 随机产生并写入到文件中,后续由hag 加密打包命令package_secret使用| + +5、将秘钥头文件内容进行base64编码转换,该文件会作为qemu参数传入。 + +### 注入秘钥,解密磁盘加密分区 + +![](../../../assets/disk_encryption3.png) + +1、将上面步骤打包好的秘钥头文件和秘钥数据文件作为qemu参数传入启动虚拟机。 + +2、qemu 找到虚拟机中可以注入秘钥的内存地址。 + +3、将需要注入的数据还原成原有格式,即将base64 的数据格式恢复成原始的格式。 + +4、调用秘钥注入接口函数将秘钥注入。 + +5、海光安全固件中重新将(0x01 || FLAGS || IV || GUEST_LENGTH || TRANS_LENGTH || DATA ||MEASURE||TIK)进行计算和传下来的秘钥头结构中的mac 进行对比,实现完整性保护。 + +6、使用TEK对加密数据进行解密。 + +7、使用虚拟机ASID 对应的VEK 对秘钥数据加密。 + +8、将加密后的数据放到qemu寻找到的内存地址中,完成秘钥注入,秘钥数据是被虚拟机VEK 加密的,主机上是看不到明文,只有在虚拟机中才能获取明文秘钥。 + +9、启动虚拟机,虚拟机grub 从秘钥注入的内存读取秘钥,解密boot分区。 + +10、grub 引导boot 分区中的内核和initrd 内存文件系统启动。 + +11、使用initrd 中的key 自动解密数据分区,完成整个加密磁盘的解密启动。 + + +### 测试用例参考 [2-3-3-测试全盘加密](https://openanolis.cn/sig/Hygon-Arch/doc/865622219333441312?lang=zh) diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/2-\346\265\213\350\257\225\344\270\273\346\234\272\345\206\205\345\255\230\345\212\240\345\257\206.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/2-\346\265\213\350\257\225\344\270\273\346\234\272\345\206\205\345\255\230\345\212\240\345\257\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..73a4aee8507b1f1811ec9cd1acfefc4e79a3ac12 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/2-\346\265\213\350\257\225\344\270\273\346\234\272\345\206\205\345\255\230\345\212\240\345\257\206.md" @@ -0,0 +1,28 @@ +测试之前,请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + +## 功能描述 +主机内存加密技术用来加密主机内存,主机写内存数据时,如果页表项的加密位C bit为1,CPU会自动对数据加密后再写入内存;如果页表项的C bit为0,CPU不会进行加密。主机操作系统通过将重要数据的页表项C bit设置为1,可以实现数据加密后保存在内存中,保护数据的安全性。 + +## 测试主机内存加密功能 + +### 运行测试程序 +测试程序的执行过程分为 3 步: +1. 分配内存并将内存中的数据初始化为 0xab,通过 clflush 指令将数据从缓存写入内存,默认情况下页表中的 C bit=1,因此内存中的数据是被加密后的数据。 +2. 调用系统函数set_memory_decrypted将内存的 C bit 设置为0然后读出,发现不是0xab而是加密的数据。 +3. 调用系统函数set_memory_encrypted将内存的C bit设置为1然后读出,发现数据被恢复成 0xab。 + +``` +$ cd /opt/hygon/csv/sme_test +$ sudo insmod sme_test.ko +$ dmesg +``` + + 图 1 主机内存加密测试结果 + + ![](../../assets/csv2-1.png) + +### 卸载测试程序 + +``` +$ sudo rmmod sme_test +``` diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/1-\346\265\213\350\257\225\345\206\205\345\255\230\345\212\240\345\257\206.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/1-\346\265\213\350\257\225\345\206\205\345\255\230\345\212\240\345\257\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..85a63391d70ee25a8d8f8705f07d63f1425bb14b --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/1-\346\265\213\350\257\225\345\206\205\345\255\230\345\212\240\345\257\206.md" @@ -0,0 +1,114 @@ +测试之前,请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + +## 功能描述 +CSV技术通过加密虚拟机的内存来保护虚拟机数据的安全性,每个CSV虚拟机使用不同的密钥,主机和其他虚拟机都不能访问当前CSV虚拟机的内存数据,本文描述了测试CSV虚拟机功能的方法。 + +## 测试内存加密功能 + +### 查看普通虚拟机的内存数据 +运行普通虚拟机。 + +``` +$ sudo qemu-system-x86_64 -name normal-vm --enable-kvm -cpu host -m 2048 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:1111,server,nowait -vnc 0.0.0.0:0 -nographic +``` + +虚拟机启动后,登陆虚拟机,用户名为root,密码为root。 + +打开新终端,保存虚拟机的内存数据到文件。 + +``` +$ telnet 127.0.0.1 1111 +$ { "execute" : "qmp_capabilities" } +$ { "execute": "pmemsave", "arguments": {"val": 0, "size": 256, "filename": "normal.txt"} } +``` + +按下Ctrl+]退回到终端,查看文件中的内存数据。 + +``` +$ quit +$ hexdump -v normal.txt +``` +**normal.txt 文件在运行虚拟机命令的目录下** + +普通虚拟机的内存数据如下图,数据是明文。 + +图 1 普通虚拟机的内存数据 + + ![](../../../assets/csv3-1.png) + +关闭普通虚拟机。 + +### 查看CSV虚拟机的内存数据 +运行CSV虚拟机。 + +``` +$ sudo qemu-system-x86_64 -name csv-vm --enable-kvm -cpu host -m 2048 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:2222,server,nowait -vnc 0.0.0.0:1 -object sev-guest,id=sev0,policy=0x1,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 -nographic +``` + +虚拟机启动后,登陆虚拟机,用户名为root,密码为root。 + +保打开新终端,保存虚拟机的内存数据到文件。 + +``` +$ telnet 127.0.0.1 2222 +$ { "execute" : "qmp_capabilities" } +$ { "execute": "pmemsave", "arguments": {"val": 0, "size": 256, "filename": "csv.txt"} } +``` + +按下Ctrl+]退回到终端,查看文件中的内存数据。 + +``` +$ quit +$ hexdump -v csv.txt +``` +**csv.txt 文件在运行虚拟机命令的目录下** + +CSV虚拟机的内存数据如下图,数据是密文。 + +图 2 CSV虚拟机的内存数据 + + ![](../../../assets/csv3-2.png) + +关闭CSV虚拟机。 + +## 测试远程认证功能 + +### 生成认证报告 +运行CSV虚拟机。 + +``` +$ sudo qemu-system-x86_64 -name csv-vm --enable-kvm -cpu host -m 2048 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:2222,server,nowait -vnc 0.0.0.0:1 -object sev-guest,id=sev0,policy=0x1,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 -netdev bridge,br=virbr0,id=net0 -device virtio-net-pci,netdev=net0,romfile= -nographic +``` + +虚拟机启动后,登陆虚拟机,用户名为root,密码为root。 + +在虚拟机中使用scp命令从主机拷贝远程认证测试程序,假设主机的用户名是user,host_ip 为主机ip,在虚拟机中运行测试程序get-attestation生成认证报告。 + +``` +# dhclient +# scp user@${host_ip}:/opt/hygon/csv/attestation/get-attestation ./ +# ./get-attestation +``` + +测试程序get-attestation产生mnonce和userdata作为认证报告的输入,生成的认证报告使用PEK私钥签名,并且包含mnonce和userdata,认证方需要检查认证报告的签名、mnonce、userdata。 + +### 验证认证报告 +可以在任意机器上验证认证报告,这里使用主机作为示例,验证程序需要联网从芯片证书服务器下载芯片证书验证认证报告的证书链。 + +在虚拟机中使用scp命令将认证报告拷贝到主机。 + +``` +# scp report.cert test@192.168.122.1:/opt/hygon/csv/attestation/ +``` + +在主机中运行验证程序verify-attestation。 + +``` +$ cd /opt/hygon/csv/attestation +$ sudo chmod 666 report.cert +$ ./verify-attestation true +``` + +验证程序verify-attestation从芯片证书服务器下载HRK、HSK、CEK芯片证书,使用PEK公钥验证认证报告的签名,并且验证HRK->HSK->CEK->PEK证书链的签名。 + +关闭CSV虚拟机。 diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/2-\346\265\213\350\257\225\345\257\206\351\222\245\345\260\201\345\215\260.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/2-\346\265\213\350\257\225\345\257\206\351\222\245\345\260\201\345\215\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..103a4f23e57ab3a64c4d183d750681e8433cb755 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/2-\346\265\213\350\257\225\345\257\206\351\222\245\345\260\201\345\215\260.md" @@ -0,0 +1,53 @@ +测试之前,请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + +**注:麒麟系统不支持** + +## 功能描述 +CSV虚拟机支持密钥封印功能,CSV虚拟机可以请求安全处理器固件生成一个与虚拟机绑定的密钥,虚拟机重启后该密钥保持不变,本文描述了测试CSV虚拟机密钥封印功能的方法。 + +## 测试密钥封印功能 + +### 准备测试文件 + +``` +$ cd /opt/hygon/csv +$ sudo ./sealing_key.sh +``` +注:**如果机器不能联网**,需要将sealing_key.sh 中hag csv export_cert_chain 步骤注释掉,然后使用[2-3-5-测试CSV虚拟机迁移](https://openanolis.cn/sig/Hygon-Arch/doc/944532750000611833) 中 **离线导出证书** 章节步骤进行制作证书,制作完执行cp -f /opt/hygon/bin/*cert /opt/hygon/csv/ 命令将证书拷贝到对应目录,再重新运行sudo ./sealing_key.sh 脚本 + +### 启动CSV虚拟机 +**该功能支持需要使用hygon-edk2 编译出的OVMF.fd 文件而不是OVMF_CODE.fd 文件** +``` +$ sudo qemu-system-x86_64 --enable-kvm -cpu host -smp 4 -m 4G -kernel /opt/hygon/csv/vmlinuz -initrd /opt/hygon/csv/initramfs.img -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF.fd,readonly=on -object sev-guest,id=sev0,policy=1,cbitpos=47,reduced-phys-bits=5,kernel-hashes=on,session-file=launch_blob.bin,dh-cert-file=guest_owner_dh.cert -machine memory-encryption=sev0 -vnc 0.0.0.0:1 -netdev bridge,br=virbr0,id=net0 -device virtio-net-pci,netdev=net0 +``` +### 连接CSV虚拟机 +**linux 端登录** + +*0.0.0.0*替换为虚拟机所在物理机的ip,本机登录不需要替换 + +``` +$ vncviewer 0.0.0.0:1 +``` +**windows端登录** + +*192.168.1.66* 替换为虚拟机所在物理机的ip + +![](../../../assets/vncviewer.png) + +**dhclient 可以获取虚拟机ip** +### 在CSV虚拟机中获取封印密钥 + +``` +# cd / +# ./get_key +sealing key: +1460ca87d513047c01729272fe0247d29f53e28895113f962c6a8ffbc7218ff5 +# reboot +虚拟机重启完毕,重新登录虚拟机 +# cd / +# ./get_key +sealing key: +1460ca87d513047c01729272fe0247d29f53e28895113f962c6a8ffbc7218ff5 + +可以看出,虚拟机重启后,封印秘钥不变 +``` diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/3-\346\265\213\350\257\225\345\205\250\347\233\230\345\212\240\345\257\206.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/3-\346\265\213\350\257\225\345\205\250\347\233\230\345\212\240\345\257\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..ceac62f91e6a75bea41eee8ecdfd16fc73941d4a --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/3-\346\265\213\350\257\225\345\205\250\347\233\230\345\212\240\345\257\206.md" @@ -0,0 +1,36 @@ +测试之前,请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + +**注:麒麟系统不支持** + +## 功能描述 +操作系统使用的磁盘包含启动分区和数据分区,全盘加密是指将启动分区和数据分区全部加密,保证系统的所有文件都不会被窃取或者篡改,本文描述了CSV虚拟机使用全盘加密的方法。 + +## 测试全盘加密功能 + +### 制作全盘加密的虚拟机镜像 + +使用ISO镜像安装虚拟机,安装过程选择选择磁盘加密加密/dev/sda3,使用abc作为示例密码。 + +``` +$ cd /opt/hygon/csv/ +$ wget http://mirrors.163.com/ubuntu-releases/18.04/ubuntu-18.04.6-desktop-amd64.iso +$ qemu-img create -f qcow2 ubuntu.qcow2 10g +$ sudo qemu-system-x86_64 -enable-kvm -cpu host -smp 4 -m 4096 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -hda ./ubuntu.qcow2 -boot d -cdrom ./ubuntu-18.04.6-desktop-amd64.iso -vnc 0.0.0.0:1 +``` +安装完成后重启虚拟机,安装过程中加密了虚拟机的数据分区/dev/sda3,接下来加密启动分区/dev/sda2并替换虚拟机中的grub。 +由于虚拟机的分区/dev/sda3已经被加密,启动过程中需要输入密码abc进行解密,启动后在虚拟机中使用scp命令将主机中的文件拷贝到虚拟机,这里假设主机的用户名为test,IP地址为192.168.122.1。 + +``` +$ scp test@192.168.122.1:/opt/hygon/csv/setup-encrypt.sh ./ +$ scp test@192.168.122.1:/opt/hygon/csv/grub.tar.gz ./ +$ sudo ./setup-encrypt.sh +``` +脚本setup-encrypt.sh执行过程中,请按提示输入YES(大写)和密码abc,执行完成后关闭虚拟机,此时虚拟机的启动分区和数据分区都已经被密码abc加密 + +### 使用加密的镜像启动CSV虚拟机 +disk_encryption.sh默认使用abc,如果密码正确,虚拟机会正常启动,否则会提示输入密码。 +``` +$ cd /opt/hygon/csv +$ sudo ./disk_encryption.sh +``` +vncviewer 0.0.0.0:1 登录虚拟机看虚拟机能否正常启动 diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/4-\346\265\213\350\257\225CSV\350\231\232\346\213\237\346\234\272\347\233\264\351\200\232DCU.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/4-\346\265\213\350\257\225CSV\350\231\232\346\213\237\346\234\272\347\233\264\351\200\232DCU.md" new file mode 100644 index 0000000000000000000000000000000000000000..03447182a92289920fe13e4faa65e1cf7df8e460 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/4-\346\265\213\350\257\225CSV\350\231\232\346\213\237\346\234\272\347\233\264\351\200\232DCU.md" @@ -0,0 +1,118 @@ +测试之前,请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + +## 功能描述 +某些应用场景需要在CSV虚拟机中运行图像识别、机器学习等算法,这些场景下使用DCU加速卡可以极大地提高计算性能,CSV虚拟机支持设备直通,可以将DCU卡直通给CSV虚拟机使用。 + +## 测试CSV虚拟机使用DCU卡 + +### 运行CSV虚拟机 +``` +$ sudo qemu-system-x86_64 -name csv-vm --enable-kvm -cpu host -m 6114 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:2222,server,nowait -vnc 0.0.0.0:1 -object sev-guest,id=sev0,policy=0x1,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 -netdev bridge,br=virbr0,id=net0 -device virtio-net-pci,netdev=net0,romfile= -nographic +``` + +### 在虚拟机中安装DCU软件栈 +``` +# dhclient +# scp host@hostip:/opt/hygon/csv/dcu/vm_dcu_sw_deploy.sh ./ +# ./vm_dcu_sw_deploy.sh +# poweroff +``` + +### 将DCU卡分配给VFIO +找到DCU设备的设备标识、Device Id和Vendor Id + +``` +$ lspci -nn | grep Display +``` +命令的执行效果如下图,该设备的VendorID为1d94, Device Id为53b7。 + + ![](../../../assets/csv8-1.png) + +将DCU设备与VFIO模块关联 +``` +$ sudo modprobe vfio +$ sudo modprobe vfio-pci +$ sudo echo 0000:03:00.0 > /sys/bus/pci/devices/0000:03:00.0/driver/unbind +$ sudo -s +# echo 1d94 53b7 > /sys/bus/pci/drivers/vfio-pci/new_id +``` +命令说明:示例中用到的设备标识、VendorID、DeviceID,请替换成上一步自己获取到的信息。对于第三条命令(unbind),如果PCI设备已经与宿主机绑定,则需要执行;如未绑定,将不存在unbind文件,则无需执行。 + +### 运行直通DCU卡的CSV虚拟机 + +``` +$ sudo qemu-system-x86_64 -name csv-vm --enable-kvm -cpu host -m 10240 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:2222,server,nowait -vnc 0.0.0.0:1 -object sev-guest,id=sev0,policy=0x1,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 -device vfio-pci,host=03:00.0 -fw_cfg name=opt/ovmf/X-PciMmio64Mb,string=65536 -netdev bridge,br=virbr0,id=net0 -device virtio-net-pci,netdev=net0,romfile= -nographic +``` + +### 在CSV虚拟机中运行DCU测试程序 + +``` +# git clone https://github.com/ROCm-Developer-Tools/HIP-Examples.git +# source /opt/dtk/env.sh +# cd HIP-Examples/vectorAdd +# make clean;make +# ./vectoradd_hip.exe +``` +## 测试 DCU Attestation 功能 (DCU远程身份认证功能) +### 背景 +从深算二号(K100-AI)开始,海光DCU开始支持Attestation(身份认证)功能。
+(DCU驱动版本 rock-kernel-refactory-rock-5.7.1-6.2.26-V1.5.aio.run +https://cancon.hpccube.com:65024/6/main/latest%E9%A9%B1%E5%8A%A8),
+DCU Attestation的目的是向DCU加速器的使用者证明,正在使用中的DCU设备具有真实身份,
+其芯片ID、固件版本、硬件环境等相关数据皆为真实可信,用户可将机密数据下发到DCU中计算,无需担心数据被恶意的加速器窃取。 +### 机制 + + ![](../../../assets/dcu_attestation_arch.png) + + 每一颗DCU芯片拥有唯一的芯片ID(ChipID),在芯片生产时烧入,以后无法更改。
+芯片内置一SM2密钥对(DCEK, DCU Chip Endorsement Key),私钥作为DCU芯片的身份象征,只保存在DCU芯片,永不外泄。
+公钥被HDSK(海光DCU签名密钥)/HRK(海光根密钥)签名后,存放于海光证书系统中,可公开下载。
+ +步骤一:当CSV虚拟机启动完毕后,用户加载DCU驱动识别DCU卡。用户运行Attestation App通过DCU驱动向DCU卡请求远程认证报告。
+DCU卡生成远程认证报告,内容包含DCU芯片ID,固件版本等信息,并使用DCEK私钥签名,返回给用户。
+步骤二:用户从远程认证报告中取出DCU芯片ID,向海光证书系统请求该芯片的DCEK/HDSK/HRK公钥证书。
+步骤三:用户依次验证HRK->HDSK->DCEK证书链的签名,并使用DCEK证书中的公钥验证远程认证报告的签名。
+全部验证过程正确可认为该DCU芯片为真实的海光芯片,报告中的数据真实可信。
+验证过程中任一步失败,则验证过程失败。 + +海光提供了Attestation App demo,演示了CSV虚拟机用户向DCU请求认证报告、获取认证报告、下载证书链、
+验证远程报告、验证证书链的全过程。该demo程序仅做展示,用户可根据需要修改或重新编写。
+ +### 测试过程 +假设CSV中直通DCU的环境已经搭建完毕,CSV虚拟机能够访问DCU。
+(请依据[4-测试CSV虚拟机直通DCU](https://openanolis.cn/sig/Hygon-Arch/doc/865622222638552866?lang=zh) 搭建环境 ) + +拷贝主机中的测试程序(/opt/hygon/csv/attestation/)到CSV虚拟机中
+目录中的dcu_attestation_demo文件为演示DCU远程证明的示例程序。 + +1)如果您的CSV虚拟机能够直接连接海光证书服务器(https://cert.hygon.cn/)
请直接运行 +``` +$./dcu_attestation_demo +``` +示例程序将自动完成DCU认证过程。 + +2)如果您的CSV虚拟机无法连接海光证书服务器,则需要手动下载证书后,放置于dcu_attestation_demo程序的所在的目录下,步骤如下:
+2.1)运行demo程序,获取DCU ChipID +``` +$./dcu_attestation_demo +``` +该程序会打印出DCU ChipID,并打印证书下载失败的日志后退出。 +
![](../../../assets/dcu_attestation_chip.png)
+该DCU的ChipID为”T6N6980002080601” + +2.2)在相同目录下,手动下载该芯片的HSK_CEK证书 +``` +$ curl -s -f -o hsk_cek.cert https://cert.hygon.cn/hsk_cek?snumber=T6N6980002080601 +``` +完成后,在运行程序的目录下,生成hsk_cek.cert文件,文件包含HSK证书和CEK证书
+ +2.3)在相同目录下,手动下载HRK证书 +``` +curl -s -f -o ./hrk.cert https://cert.hygon.cn/hrk +``` +完成后,在运行程序的目录下,生成hrk.cert
+ +2.4)再次运行attestation demo程序,完成DCU身份验证过程 +``` +$./dcu_attestation_demo +``` \ No newline at end of file diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/5-\346\265\213\350\257\225CSV\350\231\232\346\213\237\346\234\272\350\277\201\347\247\273.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/5-\346\265\213\350\257\225CSV\350\231\232\346\213\237\346\234\272\350\277\201\347\247\273.md" new file mode 100644 index 0000000000000000000000000000000000000000..c70393e8bec4b455ba9aad5e295fe10a5b71d278 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/5-\346\265\213\350\257\225CSV\350\231\232\346\213\237\346\234\272\350\277\201\347\247\273.md" @@ -0,0 +1,137 @@ +测试之前,请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + +## 功能描述 +CSV 虚拟机支持在线迁移,本文档描述CSV虚拟机迁移测试步骤 +## 测试CSV虚拟机迁移 +### 迁移源端启动虚拟机 +``` +sudo qemu-system-x86_64 \ + -name csv_send \ + --enable-kvm \ + -cpu host \ + -m 4096 \ + -smp 2 \ + -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on \ + -object sev-guest,id=sev0,policy=0x1,cbitpos=47,reduced-phys-bits=5 \ + -machine q35,memory-encryption=sev0 \ + -vnc 0.0.0.0:0 \ + -device virtio-blk-pci,scsi=off,drive=drive0,disable-legacy=on,iommu_platform=on \ + -drive file=/opt/hygon/csv/vm.qcow2,if=none,id=drive0 \ + -qmp tcp:localhost:4444,server,nowait \ + -nographic + +``` +### 迁移目标端启动虚拟机 +``` +sudo qemu-system-x86_64 \ + -name csv_receive \ + --enable-kvm \ + -cpu host \ + -m 4096 \ + -smp 2 \ + -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on \ + -object sev-guest,id=sev0,policy=0x1,cbitpos=47,reduced-phys-bits=5 \ + -machine q35,memory-encryption=sev0 \ + -vnc 0.0.0.0:1 \ + -device virtio-blk-pci,scsi=off,drive=drive0,disable-legacy=on,iommu_platform=on \ + -drive file=/opt/hygon/csv/vm.qcow2,if=none,id=drive0 \ + -qmp tcp:localhost:4445,server,nowait \ + -incoming tcp:127.0.0.1:6666 \ + -nographic + +``` +注:这里测试是本机迁移,设置ip为**127.0.0.1**,跨机迁移ip需要设置对应机器的ip地址 + +此时,迁移源端可以正常登录操作,迁移目标端处于等待接收迁移数据的状态。 + +send端: + + ![](../../../assets/csv3-6-1.png) + +receive端: + + ![](../../../assets/csv3-6-2.png) + +图 VNCViewer连接迁移源端和迁移目标端 +### 迁移目标端设置迁移参数 +``` +$ cd /opt/hygon/bin +$ sudo ./hag csv export_cert_chain +$ cat hsk.cert hrk.cert > vendor_cert.bin && \ + cat pek.cert oca.cert cek.cert > plat_cert.bin && \ + cat pdh.cert > pdh.bin && \ + base64 -w 0 vendor_cert.bin > vendor_cert.base64 && \ + base64 -w 0 plat_cert.bin > plat_cert.base64 && \ + base64 -w 0 pdh.bin > pdh.base64 +$ sudo chmod 666 *.base64 +$ sudo cp -a *.base64 /tmp +$ sudo socat - tcp:localhost:4445 +{"QMP": {"version": {"qemu": {"micro": 1, "minor": 2, "major": 4}, "package": "v4.2.1-42-g6e701de2d0-dirty"}, "capabilities": ["oob"]}} +{"execute":"qmp_capabilities"} +{"return": {}} +{"execute":"migrate-set-parameters","arguments":{"sev-pdh":"/tmp/pdh.base64","sev-plat-cert":"/tmp/plat_cert.base64","sev-amd-cert":"/tmp/vendor_cert.base64"}} +{"return": {}} +``` +#### 离线导出证书 +如果机器不能连接外网,提供离线方式,如下方式是对上面步骤 +*sudo ./hag csv export_cert_chain*的替换 + +获取芯片chip ID + +![](../../../assets/img2-2.png) + +网站下载HSK,CEK证书 + +![](../../../assets/csv3-6-3.png) + +将证书文件hygon-hsk-cek-cert-NZA9T02082605.bin +拷贝到机器上的 /opt/hygon/bin/目录,生成hsk.cert,cek.cert +``` +$ dd if=hygon-hsk-cek-cert-NZA9T22092805.bin bs=1 count=832 of=hsk.cert +$ dd if=hygon-hsk-cek-cert-NZA9T22092805.bin bs=1 skip=832 count=2084 of=cek.cert +``` +下载HRK证书,拷贝hrk.cert 到/opt/hygon/bin 目录 +``` +$ wget -O hrk.cert https://cert.hygon.cn/hrk +$ scp hrk.cert user@your_machine_ip:/opt/hygon/bin/ +``` +生成pdh.cert,pek.cert,oca.cert +``` +$ cd /opt/hygon/bin +$ sudo ./hag csv pdh_cert_export +$ dd if=cert_chain.cert bs=1 count=2084 of=pek.cert +$ dd if=cert_chain.cert bs=1 skip=2084 count=2084 of=oca.cert +``` + +### 迁移源端发起迁移 +``` +$ sudo socat - tcp:localhost:4444 +{"QMP": {"version": {"qemu": {"micro": 1, "minor": 2, "major": 4}, "package": "v4.2.1-42-g6e701de2d0-dirty"}, "capabilities": ["oob"]}} +{"execute":"qmp_capabilities"} +{"return": {}} +{"execute":"migrate","arguments":{"uri":"tcp:127.0.0.1:6666"}} +{"return": {}} + +``` + +### 等待迁移结束 +在迁移完成时,迁移源端提示STOP;迁移目标端提示RESUME + +|迁移源端|迁移目标端| +|--------|----------| +|$ sudo socat - tcp:localhost:4444 |$ sudo socat - tcp:localhost:4445
| +|{"QMP": {"version": ……: ["oob"]}}
|{"QMP": {"version": ……: ["oob"]}}
| +|{"execute":"qmp_capabilities"}
|{"execute":"qmp_capabilities"}
| +|{"return": {}}
|{"return": {}}
| +|{"execute":"migrate","……tcp:127.0.0.1:6666"}}
|{"execute":"migrate-set-param……vendor_cert.base64"}}
| +|{"return": {}}
|{"return": {}}
| +|__{"timestamp": {"seconds": 1686879657, "microseconds": 25486}, "event": "STOP"}__|__{"timestamp": {"seconds": 1686879658, "microseconds": 783299}, "event": "RESUME"}__
| + + +此时VNCViewer看到迁移源端的虚拟机已经停止响应;而迁移目的端的虚拟机沿着迁移源端停止的状态继续运行,并响应用户操作。 + +receive端: + + ![](../../../assets/csv3-6-1.png) + +图 迁移目标端继续运行迁移过来的虚拟机 diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/6-\346\265\213\350\257\225CSV2\350\231\232\346\213\237\346\234\272\347\233\264\351\200\232DCU.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/6-\346\265\213\350\257\225CSV2\350\231\232\346\213\237\346\234\272\347\233\264\351\200\232DCU.md" new file mode 100644 index 0000000000000000000000000000000000000000..0d8a99653d828dee5e1b00e39a768e978f4266c9 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/6-\346\265\213\350\257\225CSV2\350\231\232\346\213\237\346\234\272\347\233\264\351\200\232DCU.md" @@ -0,0 +1,55 @@ +测试之前,请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + +## 功能描述 +某些应用场景需要在CSV2虚拟机中运行图像识别、机器学习等算法,这些场景下使用DCU加速卡可以极大地提高计算性能,CSV2虚拟机支持设备直通,可以将DCU卡直通给CSV2虚拟机使用。 + +## 测试CSV2虚拟机使用DCU卡 + +### 运行CSV2虚拟机 +``` +$ sudo qemu-system-x86_64 -name csv-vm --enable-kvm -cpu host -m 6114 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:2222,server,nowait -vnc 0.0.0.0:1 -object sev-guest,id=sev0,policy=0x5,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 -netdev bridge,br=virbr0,id=net0 -device virtio-net-pci,netdev=net0,romfile= -nopraghic +``` + +### 在虚拟机中安装DCU软件栈 +``` +# dhclient +# scp host@hostip:/opt/hygon/csv/dcu/vm_dcu_sw_deploy.sh ./ +# ./vm_dcu_sw_deploy.sh +# poweroff +``` + +### 将DCU卡分配给VFIO +找到DCU设备的设备标识、Device Id和Vendor Id + +``` +$ lspci -nn | grep Display +``` +命令的执行效果如下图,该设备的VendorID为1d94, Device Id为53b7。 + + ![](../../../assets/csv8-1.png) + +将DCU设备与VFIO模块关联 +``` +$ sudo modprobe vfio +$ sudo modprobe vfio-pci +$ sudo echo 0000:03:00.0 > /sys/bus/pci/devices/0000:03:00.0/driver/unbind +$ sudo -s +# echo 1d94 53b7 > /sys/bus/pci/drivers/vfio-pci/new_id +``` +命令说明:示例中用到的设备标识、VendorID、DeviceID,请替换成上一步自己获取到的信息。对于第三条命令(unbind),如果PCI设备已经与宿主机绑定,则需要执行;如未绑定,将不存在unbind文件,则无需执行。 + +### 运行直通DCU卡的CSV2虚拟机 + +``` +$ sudo qemu-system-x86_64 -name csv-vm --enable-kvm -cpu host -m 10240 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:2222,server,nowait -vnc 0.0.0.0:1 -object sev-guest,id=sev0,policy=0x5,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 -device vfio-pci,host=03:00.0 -fw_cfg name=opt/ovmf/X-PciMmio64Mb,string=65536 -netdev bridge,br=virbr0,id=net0 -device virtio-net-pci,netdev=net0,romfile= -nopraghic +``` + +### 在CSV2虚拟机中运行DCU测试程序 + +``` +# git clone https://github.com/ROCm-Developer-Tools/HIP-Examples.git +# source /opt/dtk/env.sh +# cd HIP-Examples/vectorAdd +# make clean;make +# ./vectoradd_hip.exe +``` diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/7-\345\220\257\345\212\250CSV3\345\212\240\345\257\206\350\231\232\346\213\237\346\234\272.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/7-\345\220\257\345\212\250CSV3\345\212\240\345\257\206\350\231\232\346\213\237\346\234\272.md" new file mode 100644 index 0000000000000000000000000000000000000000..51bab9e1c87045a0486062ca6d2edfdf86d1f752 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/7-\345\220\257\345\212\250CSV3\345\212\240\345\257\206\350\231\232\346\213\237\346\234\272.md" @@ -0,0 +1,36 @@ +测试之前,请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + + +## 启动CSV3加密虚拟机 + +从4号CPU开始,支持CSV3安全虚拟化功能。 + +##### 配置主机系统kernel启动参数 +``` +$ sudo /opt/hygon/setup_csv3_memory.sh +``` +> setup_csv3_memory.sh脚本会在kernel启动参数cmdline中配置“csv_mem_percentage=50“,表示系统内存的50%可用于CSV3安全内存,CSV3虚拟机内存总量不能超过主机预留的CMA内存量。 +> 当需要启动的所有CSV3虚拟机内存总量较大时,可以调整kernel启动参数cmdline中csv_mem_percentage值大小,csv_mem_percentage最大为80,表示最多配置主机80%的内存作为CMA内存。 + +重新重启主机系统。 + + +#### 运行CSV3加密虚拟机。 +``` +$ sudo qemu-system-x86_64 -name csv3-vm --enable-kvm -cpu host -m 6114 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:2222,server,nowait -vnc 0.0.0.0:0 -object sev-guest,id=sev0,policy=0x45,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 -nographic +``` +虚拟机启动后,登陆虚拟机,用户名为root,密码为root。 + +在虚拟机终端运行 +``` +# dmesg | grep "HYGON CSV" +``` +会看到 +``` +# dmesg | grep "HYGON CSV" + HYGON CSV + HYGON CSV2 + HYGON CSV3 +``` +表示虚拟机为CSV3加密虚拟机。 +关闭虚拟机。 diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/8-\346\265\213\350\257\225CSV2\345\257\204\345\255\230\345\231\250\345\212\240\345\257\206.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/8-\346\265\213\350\257\225CSV2\345\257\204\345\255\230\345\231\250\345\212\240\345\257\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..6bc11c5b855c3894e93d0964eee965b120a521e7 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/8-\346\265\213\350\257\225CSV2\345\257\204\345\255\230\345\231\250\345\212\240\345\257\206.md" @@ -0,0 +1,94 @@ +测试之前,请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + +## 功能描述 +3号CPU开始支持CSV2安全虚拟化功能,在CSV技术加密虚拟机内存的基础上,CSV2技术增加了虚拟机寄存器加密的功能,主机不能访问或者篡改CSV2虚拟机的寄存器。 + +## 测试CSV2虚拟机的寄存器加密功能 + +### 升级主机内核 +``` +$ wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.17.tar.gz  +$ tar -xvf linux-5.17.tar.gz +$ cd linux-5.17/ +$ sudo /opt/hygon/csv/build_csv2_kernel.sh  +``` +修改/etc/selinux/config ,设置SELINUX=disabled,完成后重启,内核选择5.17.0-csv2 + +### 运行普通虚拟机 + +运行普通虚拟机。 +``` +$ sudo qemu-system-x86_64 -name normal-vm --enable-kvm -cpu host -m 2048 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:1111,server,nowait -vnc 0.0.0.0:0 -netdev bridge,br=virbr0,id=net0 -device virtio-net-pci,netdev=net0,romfile= -nopraghic +``` +虚拟机启动后,登陆虚拟机,用户名为root,密码为root。 + +### 升级虚拟机内核 +假设主机的用户名为user +``` +# dhclient +# scp user@${host_ip}:/opt/hygon/csv/kernel.tgz ./ +# scp user@${host_ip}:/opt/hygon/csv/vm_kernel_install.sh ./ +# ./vm_kernel_install.sh  +``` +安装完成后,选择安装的内核重启虚拟机 + +### 普通虚拟机运行寄存器测试程序 +假设主机的用户名为user + +``` +# dhclient +# scp user@${host_ip}:/opt/hygon/csv/csv2-reg-test/csv2_reg_test ./ +# chmod 777 csv2_reg_rest +# ./csv2_reg_rest +``` +测试程序循环执行设置虚拟机rbx 值为100并打印rbx。 + +图1 普通虚拟机修改寄存器打印 + + ![](../../../assets/csv10-1.png) + +打开主机攻击程序,主机修改虚拟机rbx寄存器为200,虚拟机中打印rbx变为200。 +``` +$ sudo -s +# echo 1 >/sys/module/kvm/parameters/vm_reg_test +``` + +图2 主机修改普通虚拟机寄存器打印 + + ![](../../../assets/csv10-2.png) + +关闭主机攻击程序,虚拟机中打印rbx恢复为100。 +``` +$ sudo -s +# echo 0 >/sys/module/kvm/parameters/vm_reg_test +``` + +### 运行CSV2虚拟机 + +``` +$ sudo qemu-system-x86_64 -name csv2-vm --enable-kvm -cpu host -m 2048 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:2222,server,nowait -vnc 0.0.0.0:1 -object sev-guest,id=sev0,policy=0x5,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 -nopraghic +``` +虚拟机启动后,登陆虚拟机。 + + +### 运行CSV2虚拟机寄存器测试程序 + +``` +$ ./csv2_reg_rest +``` + +图3 CSV2虚拟机修改寄存器打印 + + ![](../../../assets/csv10-3.png) + +打开主机攻击程序,主机修改虚拟机rbx寄存器为200,CSV2虚拟机无法继续执行,CSV2虚拟机可以阻止主机篡改虚拟机的寄存器。 +``` +$ sudo -s +# echo 1 >/sys/module/kvm/parameters/vm_reg_test +``` + +图4 主机修改CSV2虚拟机寄存器打印 + + ![](../../../assets/csv10-4.png) + + diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/9-\346\265\213\350\257\225CSV3\345\206\205\345\255\230\351\232\224\347\246\273.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/9-\346\265\213\350\257\225CSV3\345\206\205\345\255\230\351\232\224\347\246\273.md" new file mode 100644 index 0000000000000000000000000000000000000000..9a15fec0d9cfd66f0b30dd74315dc47e90f84387 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/9-\346\265\213\350\257\225CSV3\345\206\205\345\255\230\351\232\224\347\246\273.md" @@ -0,0 +1,116 @@ +测试之前,请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + +## 功能描述 +海光4号CPU支持CSV3安全虚拟化功能,在CSV/CSV2技术加密虚拟机内存和加密虚拟机寄存器的基础上,CSV3技术增加了虚拟机安全内存隔离、关键控制信息保护、嵌套页表完整性保护等功能。 + +本文演示读写CSV3虚拟机安全内存,展示内存访问隔离效果。 + +## 测试方案说明 + +### CSV3虚拟机内存物理地址 +CSV3虚拟机所使用的安全内存由主机操作系统从系统内存中分配,并不映射到用户态地址空间,无法直接从用户进程中获取。 +因此需要从主机操作系统内核中获取并打印出分配给CSV3虚拟机使用的内存地址,用于CSV3虚拟机内存读写测试。 + +### 测试用例说明 +首先启动CSV3安全虚拟机,获取主机操作系统为CSV3虚拟机分配的内存物理地址;然后执行测试用例,对CSV3虚拟机内存执行读写测试。 + +测试用例主要包括用户层测试用例程序和内核层驱动程序两部分。如图1所示,csv3_test为用户层测试用例程序,用于接收用户输入的CSV3虚拟机内存物理地址,并将该地址传递给内核层驱动,打印测试结果;csv3_dev.ko为内核层驱动程序,用于对用户层传递的内存物理地址建立页表映射,进行内存读写,并将读取的内存数据返回给用户层。 + +![](../../../assets/csv3-test-memory-1.png) + +
图1 测试用例框图
+ +## 测试过程 +### 获取CSV3虚拟机内存地址 +可以通过以下两种方式获取CSV3虚拟机内存地址,两种方式选择一种即可。 + +推荐使用方式一。 + +#### 方式一、通过bpftrace工具获取 +该方式获取的优点为不需要修改和替换主机操作系统内核。 + +1: 安装bpftrace + +在操作系统linux发行版中安装bpftrace工具: +``` +$ sudo yum install bpftrace +``` +或 +``` +$ sudo apt install bpftrace +``` + +2: 使用bpftrace工具探测CSV3虚拟机的内存物理地址 + +在启动CSV3虚拟机前执行以下命令,开始探测: +``` +$ sudo bpftrace -e 'kretprobe:csv_alloc_from_contiguous { printf("address 0x%llx \n", retval); }' +``` + +3: 启动CSV3虚拟机 + +参考 [7-启动CSV3加密虚拟机](https://openanolis.cn/sig/Hygon-Arch/doc/984441308636882971) + +4: CSV3虚拟机启动完成后,bpftrace打印出探测到的内存地址。 + +bpftrace工具打印出CSV3虚拟机内存地址区间如下所示: +![](../../../assets/csv3-test-memory-2.png) + +#### 方式二、通过修改操作系统内核源码打印获取 +1: 在Linux内核源码arch/x86/kvm/svm/csv.c中添加打印,CSV3虚拟机启动过程中,打印出CSV3虚拟机使用的全部内存地址。 + +参考[csv3-memory-address-kernel-patch](https://gitee.com/anolis/hygon-cloud-kernel/commit/40d1732d942bebf4fc2281c06ea2f1ea46cb9341)提交修改内核源码; + +或者 + +直接使用 [anolis/hygon-cloud-kernel](https://gitee.com/anolis/hygon-cloud-kernel)仓库中的内核源码编译内核。 + +2: 重新编译并更新操作系统内核 + +参考[1-安装操作系统和内核](https://openanolis.cn/sig/Hygon-Arch/doc/865622272844371792) + +3: 开启csv.c文件debug级别log的动态打印 +``` +$ su root +# echo 'file csv.c +p' > /sys/kernel/debug/dynamic_debug/control +``` + +4: 启动CSV3虚拟机 + +参考 [7-启动CSV3加密虚拟机](https://openanolis.cn/sig/Hygon-Arch/doc/984441308636882971) + +5: 通过打印获取CSV3虚拟机安全内存地址 + +CSV3虚拟机启动完成后,在主机操作系统中执行dmesg ,并搜索“csv3 guest memory region”关键字,获取CSV3虚拟机安全内存区地址列表。 +``` +$ dmesg | grep -A 10 "csv3 guest memory region" +``` +具体需要显示地址区域的个数取决于CSV3虚拟机启动参数中定义的内存大小。 +![](../../../assets/csv3-test-memory-3.png) + + +### 获取测试用例代码 +测试用例代码在/opt/hygon/csv/csv3-memory-rw-test目录下 + +### 编译测试代码、安装测试内核驱动module + +``` +$ cd /opt/hygon/csv +$ sudo ./build_devkit.sh +$ cd /opt/hygon/csv/csv3-memory-rw-test/host-module +$ sudo insmod csv3_dev.ko +``` +编译完成的测试程序为/opt/hygon/csv/csv3-memory-rw-test/csv3_test目录下的csv3_test + +### 执行读取CSV3虚拟机内存地址测试 + +使用第一步骤中获取的CSV3虚拟机的内存地址,选取其中的一段内存区间进行内存读取测试。 + +例如选取CSV3虚拟机内存的第一段内存区间0x8c0000000,执行测试程序,尝试读取CSV3虚拟机内存。 +``` +$ sudo ./csv3_test --read_mem 0x8c0000000 --size 0x100 +``` +打印出读取到的数据全部为”FF”。 +![](../../../assets/csv3-test-memory-4.png) + +说明:第一步骤中获取的地址区间为分配给CSV3虚拟机使用的全部内存地址,其中部分地址在虚拟机启动和运行过程中可能会被作为共享内存使用,因此可能存在读取部分地址时,能够读取到内存中的数据,不显示为全FF的情况;可以忽略这块内存区间,换用其他地址区间测试。 diff --git "a/sig/beautiful1103/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/beautiful1103/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" new file mode 100644 index 0000000000000000000000000000000000000000..6124ede34f543d9d95461d0f49a8a165e5a16ec3 --- /dev/null +++ "b/sig/beautiful1103/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" @@ -0,0 +1,291 @@ +# 环境搭建 + +本文主要介绍如何搭建一套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)的**硬件配置要求章节**。 + +## 前提条件 + +### 安装系统并更新内核 + +请参考[2-1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994?lang=zh)准备软件环境。 + +## 安装机密容器组件 + +### 运行一键安装脚本 + +``` +sudo su root +cd /opt/hygon/csv/confidential-containers/scripts +./iso_install_for_k8s.sh +``` + +> 1. 关于该安装脚本的详细介绍请参考本文最下面的[附录](#附录); +> 2. 如何从源码编译并安装机密容器的各组件,包括kata-containers、qemu、Guest kernel等,请参考[5-源码编译机密容器各组件](https://openanolis.cn/sig/Hygon-Arch/doc/865622243115145008); + +## 部署机密容器测试环境 + +### 运行一键部署脚本 + +``` +cd /opt/hygon/csv/confidential-containers/scripts +sudo ./post_iso_install.sh +``` + +> 关于该部署脚本的详细介绍请参考[附录](#附录); + +### kubectl访问cluster权限设置 + +- 对于普通用户 + +``` +rm -rf $HOME/.kube +mkdir -p $HOME/.kube +sudo cp -f /etc/kubernetes/admin.conf $HOME/.kube/config +sudo chown $(id -u):$(id -g) $HOME/.kube/config +``` + +- 对于root用户 + +``` +export KUBECONFIG=/etc/kubernetes/admin.conf +``` + +## 附录 + +### 一、一键安装脚本的介绍 + +#### 1.1 加载必要的模块 + +将以下模块设置为系统预加载 + +``` +echo "br_netfilter" > /etc/modules-load.d/br_netfilter.conf +echo "vfio-pci" > /etc/modules-load.d/vfio.conf + +tee /etc/modules-load.d/vhost.conf < /etc/containerd/config.toml +sed -i 's#registry.k8s.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g' etc/containerd/config.toml + +mkdir -p /etc/systemd/system/containerd.service.d +cat >>/etc/systemd/system/containerd.service.d/containerd-for-cc-override.conf<>/etc/containerd/config.toml< cert_chain.cert +sudo mv cert_chain.cert /opt/csv/ +``` + +#### 2.7 运行simple-kbs + +``` +cd /opt/simple-kbs +sudo docker compose up -d +麒麟系统docker 版本较低,命令如下: +sudo docker-compose up -d +``` + diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/10-\345\210\266\344\275\234\344\270\200\344\270\252\346\226\260\347\232\204\347\255\276\345\220\215\351\225\234\345\203\217\345\271\266\351\203\250\347\275\262.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/10-\345\210\266\344\275\234\344\270\200\344\270\252\346\226\260\347\232\204\347\255\276\345\220\215\351\225\234\345\203\217\345\271\266\351\203\250\347\275\262.md" new file mode 100644 index 0000000000000000000000000000000000000000..a68ffecd814b528942ff3b87956d0d1b09e035b6 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/10-\345\210\266\344\275\234\344\270\200\344\270\252\346\226\260\347\232\204\347\255\276\345\220\215\351\225\234\345\203\217\345\271\266\351\203\250\347\275\262.md" @@ -0,0 +1,152 @@ +# 制作一个新的签名镜像并部署 + +本文主要为您介绍如何制作一个新的签名镜像,并部署pod。 + +## 准备镜像 + +> 示例中使用docker.io存放签名镜像 + +``` +# 使用自己的账号、密码登录 +sudo docker login +# 以busybox为例 +sudo docker pull busybox +# YOUR_USER替换为自己的用户名,YOUR_IMAGE替换为自己想要命名的image name +sudo docker image tag busybox docker.io/YOUR_USER/YOUR_IMAGE +sudo docker push docker.io/YOUR_USER/YOUR_IMAGE +``` + +## 使用cosign签名镜像 + +``` +cosign generate-key-pair +# 输入密码,密码是用来加密私钥的 +cosign login docker.io --username YOUR_USER +sudo cosign sign --key cosign.key docker.io/YOUR_USER/YOUR_IMAGE +``` + +## 自定义policy.json + +> 创建一个新的policy.json,自定义image的pull规则,如下面示例所示,注意keyPath对应的位置用于索引公钥。 + +``` +{ + "default": [{"type": "insecureAcceptAnything"}], + "transports": { + "docker": { + "docker.io/pawsonfang/mybusybox": [ + { + "type": "sigstoreSigned", + "keyPath": "kbs:///default/cosign-public-key/test" + } + ], + "docker.io/pawsonfang/busybox_signed": [ + { + "type": "sigstoreSigned", + "keyPath": "kbs:///default/cosign-public-key/test2" + } + ] + } + } +} +``` + +## 根据kbc_mod更新公钥和policy + +> 对于online_sev_kbc,将公钥和policy添加到数据库; +> +> 对于offline_fs_kbc,将公钥和policy更新到initrd中。 + +### online_sev_kbc + +- 获取simple-kbs的container id + + ``` + KBS_CID=$(sudo docker ps -aqf "name=^simple-kbs-server") + ``` + + + +- 更新policy文件和公钥文件到simple-kbs + + ``` + cd /opt/simple-kbs/resources + sudo docker cp /path/to/policy.json ${KBS_CID}:/usr/local/bin/resources/image_pull_policy.json + sudo docker cp /path/to/cosign.pub ${KBS_CID}:/usr/local/bin/resources/cosign2.pub + ``` + +- 设置数据库参数 + + ``` + KBS_DB_USER="kbsuser" + KBS_DB_PW="kbspassword" + KBS_DB="simple_kbs" + KBS_DB_TYPE="mysql" + KBS_DB_HOST=$(sudo docker network inspect simple-kbs_default \ + | jq -r '.[].Containers[] | select(.Name | test("simple-kbs[_-]db.*")).IPv4Address' \ + | sed "s|/.*$||g") + ``` + + 插入新的公钥keyid:resource_path信息到数据库中 + + ``` + mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${KBS_DB_HOST} -D ${KBS_DB} < ../initrd.new.img +gzip ../initrd.new.img +cd ../ && mv initrd.new.img.gz initrd.new.img +cp initrd.new.img /opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_fs_kbc +``` + +#### 使用新的image启动pod,此处以online_sev_kbc为例 + +> YOUR_USER/YOUR_IMAGE替换为自己的镜像地址 + +``` +cat <<-EOF | kubectl apply -f - +apiVersion: v1 +kind: Pod +metadata: + labels: + run: test-sign-online2 + name: test-sign-online2 +spec: + containers: + - image: docker.io/YOUR_USER/YOUR_IMAGE + name: test-sign-online2 + imagePullPolicy: Always + dnsPolicy: ClusterFirst + restartPolicy: Never + runtimeClassName: kata-qemu-csv +EOF +``` + diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/11-\344\275\277\347\224\250\350\272\253\344\273\275\351\252\214\350\257\201\344\277\241\346\201\257\344\270\213\350\275\275\351\225\234\345\203\217.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/11-\344\275\277\347\224\250\350\272\253\344\273\275\351\252\214\350\257\201\344\277\241\346\201\257\344\270\213\350\275\275\351\225\234\345\203\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..557459da1807e3f88f0e1559ad7236bc194b0b15 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/11-\344\275\277\347\224\250\350\272\253\344\273\275\351\252\214\350\257\201\344\277\241\346\201\257\344\270\213\350\275\275\351\225\234\345\203\217.md" @@ -0,0 +1,88 @@ +# 使用身份验证信息下载镜像 + +> 对于一些私人仓库,身份验证信息通过后,才能下载镜像,所以需要添加账号的credential信息到kbs或initrd中。 +> + +## 添加您的账号信息到docker_auth_config.json + +- 首先获取账户名密码的base64编码 + +**下面的账号密码只是作为示例,请替换成客户自己的实际账号密码** + +``` +$ echo "pawsonfang:Passw0rd123" | base64 +cGF3c29uZmFuZzpQYXNzdzByZDEyMwo= +``` + +- 将base64编码更新到docker_auth_config.json + +``` +{ + "auths": { + "https://index.docker.io/v1/": { + "auth": "bGl1ZGFsaWJqOlBhc3N3MHJkIXFhego=" + }, + "quay.io": { + "auth": "bGl1ZGFsaWJqOlBhc3N3MHJkIXFhego=" + }, + "docker.io": { + "auth": "cGF3c29uZmFuZzpQYXNzdzByZDEyMwo=" + } + } +} +``` + +## 更新信息到kbs或initrd + +> 对于online_sev_kbc,更新信息到kbs中; +> +> 对于offline_fs_kbc,更新信息到initrd; +> +> offline_sev_kbs不支持该功能。 + +#### online_sev_kbc + +- 获取simple-kbs的container id + +``` +KBS_CID=$(sudo docker ps -aqf "name=^simple-kbs-server") +``` + +- 更新json文件到simple-kbs + +``` +cd /opt/simple-kbs/resources +sudo docker cp docker_auth_config.json ${KBS_CID}:/usr/local/bin/resources/docker_auth_config.json +``` + +#### offline_fs_kbc + +- 解包initrd + +``` +sudo su root +cp /opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_fs_kbc ./initrd.img.gz +gunzip initrd.img.gz +mkdir initrd +cd initrd/ +cpio -ivmd < ../initrd.img +``` + +- 将新的json文件的base64更新到initrd中 + +``` +cat /path/to/docker_auth_config.json | base64 --wrap=0 +# 把输出更新到etc/aa-offline_fs_kbc-resources.json的default/credential/test字段 +``` + +- 打包initrd + +``` +sudo su root +cd initrd/ +find . | cpio -o -H newc > ../initrd.new.img +gzip ../initrd.new.img +cd ../ && mv initrd.new.img.gz initrd.new.img +cp initrd.new.img /opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_fs_kbc +``` + diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/12-\351\235\236\345\212\240\345\257\206kata\347\233\264\351\200\232DCU.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/12-\351\235\236\345\212\240\345\257\206kata\347\233\264\351\200\232DCU.md" new file mode 100644 index 0000000000000000000000000000000000000000..34c90c4da9b184c557ae6ebf6a1691a343e8921f --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/12-\351\235\236\345\212\240\345\257\206kata\347\233\264\351\200\232DCU.md" @@ -0,0 +1,318 @@ +# 非加密kata直通DCU + +## 版本要求 + +`kata-containers` 只兼容使用`unix socket`的`containerd`,所以对于`containerd`有以下版本要求 + +| 版本 | 原因 | +| --------- | ------------------------------------------------------------ | +| >= V1.5.0 | `containerd`从`v1.5.0`正式开始使用`unix socket` | +| >= V1.4.3 | 为了修复`CVE-2020-15257`漏洞,从`V1.4.3`开始从`abstract socket`切换到`unix socket` | +| >= V1.3.9 | 为了修复`CVE-2020-15257`漏洞,从`V1.3.9`开始从`abstract socket`切换到`unix socket` | + +`containerd` 版本查看方法 + +``` +containerd -v +``` + +对于使用rke2的用户,版本推荐如下: + +| 版本 | 原因 | +| ----------- | ------------------------------------------------------------ | +| >= v1.22.3 | `Rke2` 从`v1.22.3`开始,将`containerd`升级为`v1.5.0+` | +| >= V1.20.15 | `v1.20.15`对应的`containerd`版本为`v1.4.12`,实测也可以兼容`kata-containers` | + + + +## BIOS & OS设置 + +#### 1. BIOS打开IOMMU + +使用DCU直通功能必须打开BIOS的IOMMU功能,具体请参考[0-硬件配置要求](https://openanolis.cn/sig/Hygon-Arch/doc/898824499700098972)。 + +#### 2. OS设置IOMMU为pt模式 + +``` +sudo su root +sed -i 's!\(^GRUB_CMDLINE_LINUX=.*\)"$!\1 iommu=pt"!' /etc/default/grub +update-grub +``` + +#### 3. 安装`hydcu_pci_fixup_header`模块 + +> `非加密kata直通DCU`不需要安装hygon内核,只需要安装该内核模块即可 + +``` +git clone https://gitee.com/anolis/hygon-devkit.git +cd hygon-devkit/csv/confidential-containers/pkg +unzip fixup-header-release-hydcu_pci_fixup_header.zip +cd fixup-header-release-hydcu_pci_fixup_header +make +sudo make install +``` + +#### 4. 重启后检查IOMMU设置成功 + +``` +sudo reboot +dmesg | grep -i IOMMU +``` + +得到类似如下的输出,表示IOMMU设置成功: + +``` +[ 0.626887] iommu: Default domain type: Passthrough (set via kernel command line) +[ 0.873056] pci 0000:00:00.2: AMD-Vi: IOMMU performance counters supported +[ 0.873112] pci 0000:40:00.2: AMD-Vi: IOMMU performance counters supported +[ 0.873157] pci 0000:00:01.0: Adding to iommu group 0 +[ 0.873172] pci 0000:00:01.2: Adding to iommu group 1 +[ 0.873187] pci 0000:00:01.4: Adding to iommu group 2 +[ 0.873207] pci 0000:00:02.0: Adding to iommu group 3 +``` + +## 安装和设置kata + +#### 1. 安装kata-containers + +``` +cd hygon-devkit/csv/confidential-containers/pkg +tar xvJf confidential-containers.tar.xz -C / +``` + +#### 2. `containerd`添加kata runtime + +``` +sudo su root +cd /var/lib/rancher/rke2/bin +ln -s /opt/confidential-containers/bin/containerd-shim-kata-v2 containerd-shim-kata-v2 +cd /var/lib/rancher/rke2/agent/etc/containerd +cp config.toml config.toml.tmpl + +cat >>config.toml.tmpl< 注意:示例中的1d94:53b7为第一步lspci -nn中打印出的值,请更新为自己设备的实际值。 + +``` +sudo su root +sed -i 's!\(^GRUB_CMDLINE_LINUX=.*\)"$!\1 vfio-pci.ids=1d94:53b7"!' /etc/default/grub +``` + +### 启动DCU直通的容器 + +- 启动容器 + +``` +cat <<-EOF | kubectl apply -f - +apiVersion: v1 +kind: Pod +metadata: + name: ubuntu-dcu +spec: + runtimeClassName: kata + containers: + - name: ubuntu-dcu + image: docker.io/pawsonfang/ubuntu-dcu:latest + command: ["tail", "-f", "/dev/null"] + resources: + limits: + dcu/a100: "1" + volumeMounts: + - mountPath: /opt/dtk + name: dtk + - mountPath: /dev + name: dev + securityContext: + privileged: true + volumes: + - name: dtk + hostPath: + path: /opt/dtk-22.04.2 + - name: dev + hostPath: + path: /dev +EOF +``` + +- 进入容器中,使用DCU之前,需要配置环境变量: + +``` +kubectl exec -it ubuntu-dcu -- bash +source /opt/dtk/env.sh +rocminfo +``` + +- 期望结果(能看到CPU和DCU两个设备): + +``` +hygon module is loaded +===================== +HSA System Attributes +===================== +Runtime Version: 1.1 +System Timestamp Freq.: 1000.000000MHz +Sig. Max Wait Duration: 18446744073709551615 (0xFFFFFFFFFFFFFFFF) (timestamp count) +Machine Model: LARGE +System Endianness: LITTLE + +========== +HSA Agents +========== +******* +Agent 1 +******* + Name: Hygon C86 3250 8-core Processor + Uuid: CPU-XX + Marketing Name: Hygon C86 3250 8-core Processor + Vendor Name: HygonGenuine + Feature: None specified + Profile: FULL_PROFILE + Float Round Mode: NEAR + . + . + . +******* +Agent 2 +******* + Name: ZIFANG + Uuid: GPU-XX + Marketing Name: C878186 + Vendor Name: HYGON + Feature: KERNEL_DISPATCH + Profile: BASE_PROFILE + Float Round Mode: NEAR + Max Queue Number: 128(0x80) + Queue Min Size: 4096(0x1000) + Queue Max Size: 131072(0x20000) + Queue Type: MULTI + Node: 1 + Device Type: DCU +. +. +. +*** Done *** +``` + +## diff --git "a/sig/beautiful1103/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/beautiful1103/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" new file mode 100644 index 0000000000000000000000000000000000000000..48a83ab17f09ab01b78051b78b0f159b70cd589c --- /dev/null +++ "b/sig/beautiful1103/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" @@ -0,0 +1,347 @@ +# 测试CSV机密容器 + +## CSV机密容器基本特性测试 + +### 一、不基于CSV,运行一个普通容器 + +- 启动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 +``` + +### 二、运行一个CSV/CSV2/CSV3机密容器 +**该实践支持情况如下:** + +| 机密容器类型 | 是否支持 | +| --- | --- | +| CSV | 是 | +| CSV2 | 是 | +| CSV3 | 是 | + +- 编辑 kata 配置文件: + + - 设置机密容器为`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 + ``` + + - 禁用sev_kbc模式 + + `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.aa_kbc_params=offline_fs_kbc::null agent.enable_signature_verification=false \"#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + ``` + + 1.测试示例中使用的是dockerhub 仓库镜像,由于国内网络目前访问不了dockerhub 需要使用代理,代理参数`agent.https_proxy=http://ip:port agent.no_proxy=10.*.*.*,172.*.*.*` **http://ip:port 改为客户自己实际代理地址,后续机密容器测试步骤都需要加代理,ip 不要设置为127.0.0.1本地地址** + + 2.如果没有代理,需要购买企业版本阿里云容器,本地制作好容器镜像push到阿里云仓库,企业版地址: + https://www.aliyun.com/product/acr?spm=5176.21213303.J_qCOwPWspKEuWcmp8qiZNQ.30.3f952f3d26uzeU&scm=20140722.S_product@@%E4%BA%91%E4%BA%A7%E5%93%81@@88099._.RL_%E4%BC%81%E4%B8%9A%E7%89%88%E5%AE%B9%E5%99%A8-LOC_search~UND~product~UND~item-OR_ser-V_3-RE_productNew-P0_4 + + 3.**如果上述两个条件都不满足,请搭建私有仓库**,搭建流程参考[2-9-3-机密容器](https://openanolis.cn/sig/Hygon-Arch/doc/1121587123561305791?lang=zh)中 **https私有仓库搭建** 章节 + + 4.**机密容器镜像是虚拟机通过image 模块直接从远端仓库获取的镜像,image 模块是社区为虚拟机定制的镜像管理模块,不支持类似主机端docker 在/etc/docker/daemon.json 文件中配置国内加速器的方式获取dockerhub仓库镜像** + + +- 启动POD + +```shell +cat <<-EOF | kubectl apply -f - +apiVersion: v1 +kind: Pod +metadata: + labels: + run: test-csv + name: test-csv +spec: + containers: + - image: docker.io/library/busybox:latest + name: test-csv + imagePullPolicy: Always + dnsPolicy: ClusterFirst + restartPolicy: Never + runtimeClassName: kata-qemu-csv +EOF +``` + +- 查看 pod 是否启动成功: + +```shell +kubectl get pods +``` + +- 预期结果如下: + +```shell +NAME READY STATUS RESTARTS AGE +test-csv 1/1 Running 0 146m +``` + +- 检查CSV/CSV2/CSV3已被使能: + + ```shell + # 对于CSV机密容器 + kubectl exec -it test-csv -- dmesg | grep "HYGON.* 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 + ``` + +- 预期结果如下: + + ``` + 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功能 +**该实践支持情况如下:** + +| 机密容器类型 | 是否支持 | +| --- | --- | +| CSV | 是 | +| CSV2 | 是 | +| CSV3 | 是 | + +- 部署CSV/CSV2/CSV3机密容器,把`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证书的签名,mnonce、userdata 获取报告和验证报告过程都会输出打印,请认证方检查确认两者是否一致。 +。 + +## 增强特性 + +#### 一、CSV独有的增强特性 + +**以下特性为相对于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直通;** | + +#### 二、社区的增强特性 + +Confidential Containers社区为了更好的利用TEE来保护容器和数据,并交付云原生机密计算,提供了一些增强特性。CSV机密容器同样也支持这些特性,如: + +1. 使用pre-attestation来认证guest和注入密钥 +2. 使用加密或签名镜像来部署workload,保护镜像的完整性 +3. 支持用户自定义policy来验证Guest Firmware Measurement +4. 支持使用身份验证信息下载镜像 + +为了支持上述特性,社区引入了[simple-kbs](https://github.com/confidential-containers/simple-kbs),作为一个基础的key broker service。请参考以下文档来测试上述特性: + +1. [6-使用加密镜像来部署workload](https://openanolis.cn/sig/Hygon-Arch/doc/865622244851586866) +2. [7-使用签名镜像来部署workload](https://openanolis.cn/sig/Hygon-Arch/doc/865622246403479348) +3. [8-自定义Policy来验证Measurement](https://openanolis.cn/sig/Hygon-Arch/doc/865622248139921206) +4. [11-使用身份验证信息下载镜像](./11-使用身份验证信息下载镜像.md) + diff --git "a/sig/beautiful1103/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/beautiful1103/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" new file mode 100644 index 0000000000000000000000000000000000000000..6546f63d3ed63e28147762ae3be9c689e84e5d0c --- /dev/null +++ "b/sig/beautiful1103/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" @@ -0,0 +1,100 @@ +# 测试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索引的内存加密密钥,但是这些机密容器从属于同一个用户,不存在安全性问题。 + +使用参数user-id来指定用户,同一个ASID最多可以被64 个CSV kata容器复用。 + +## 测试用例 + +- 指定user-id + + ``` + sudo sed -i 's/#* *mem_encryption_user.*$/mem_encryption_user_id = "testuser"/' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml + ``` + +- 创建pod部署文件 + + ``` + cat >>test-asid-reuse.yaml<DCU直通功能** 章节。 + +#### 2. 检查IOMMU设置成功 + +``` +dmesg | grep -i IOMMU +``` + +得到类似如下的输出,表示IOMMU设置成功: + +``` +[ 0.626887] iommu: Default domain type: Passthrough (set via kernel command line) +[ 0.873056] pci 0000:00:00.2: AMD-Vi: IOMMU performance counters supported +[ 0.873112] pci 0000:40:00.2: AMD-Vi: IOMMU performance counters supported +[ 0.873157] pci 0000:00:01.0: Adding to iommu group 0 +[ 0.873172] pci 0000:00:01.2: Adding to iommu group 1 +[ 0.873187] pci 0000:00:01.4: Adding to iommu group 2 +[ 0.873207] pci 0000:00:02.0: Adding to iommu group 3 +``` + +## 功能描述 + +把DCU直通进CSV机密容器中,使其处于可信执行环境中,在可信执行环境中借助DCU加速机密计算workload。 + +## 测试用例 + +### 修改kata配置文件 + +> 为了简化测试,此处选择禁用pre-attestation,但也可以同时使用DCU直通和pre-attestation等功能。 +> +> 如果需要使用该功能,请参考[6-使用加密镜像来部署workload](https://openanolis.cn/sig/Hygon-Arch/doc/865622244851586866)。 + +- 关闭pre-attestation + + ``` + sudo sed -i -e 's/^\(guest_pre_attestation =\).*$/\1 false/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv-dcu.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-dcu.toml + ``` + +- 禁用sev_kbc模式 + + 由于国内网络目前访问不了dockerhub 需要使用代理,代理参数agent.https_proxy=http://ip:port agent.no_proxy=10.*.*.*,172.*.*.* http://ip:port 为代理地址 + ``` + 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=false \"#g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv-dcu.toml + ``` +- 设置内存 + ``` + sudo sed -i "s/^default_memory *=.*\$/default_memory = 10240/g" /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv-dcu.toml + ``` +### 部署DCU直通环境 + +#### 1. 查找DCU设备 + +- 找到DCU设备 + + ``` + lspci -nn | grep -e "Display" -e "Co-processor" | grep "Haiguang" + ``` + +- 结果如下: + 如果是Z100卡,那么显示的是Display,如果是K100/K100-AI卡,显示的是Co-processor” + + ``` + $ lspci -nn | grep -e "Display" -e "Co-processor" | grep "Haiguang" + 03:00.0 Display controller: Chengdu Haiguang IC Design Co., Ltd. Device [1d94:53b7] (rev 01) + ``` + + `03:00.0`为该设备的设备标识,其完整信息为: `0000:03:00.0` + + +#### 2. 使用一键部署脚本,部署DCU环境 + +``` +cd /opt/hygon/csv/confidential-containers/scripts +# 参数请替换为上一步实际得到的id +sudo ./setup_dcu_passthrough.sh -d 0000:03:00.0 +``` + +该脚本主要实现以下功能: + +1. 把指定的DCU设备绑定到VFIO +2. 安装vfio-device-plugin,该插件负责与k8s交互,将vfio device直通进CSV机密容器 +3. 下载DTK,DTK文件较大,直接安装进容器镜像中,会导致镜像太大,本测试中,通过将DTK mount到容器中的方式,来使用 +4. 下载DCU驱动,安装到host上。这个步骤的目的是将/opt/hyhal目录挂载到容器中。 + +> 注意: 第4步安装驱动的过程中,如果询问是否更新rock、hyhal、vbios,一律选择'Y'或者'y'。 + +#### 3. (可选)上一步的设置,设备重启失效,想要永久生效,请做以下设置: + +> 注意:示例中的1d94:53b7为第一步lspci -nn中打印出的值,请更新为自己设备的实际值。 + +``` +sudo su root +sed -i 's!\(^GRUB_CMDLINE_LINUX=.*\)"$!\1 vfio-pci.ids=1d94:53b7"!' /etc/default/grub +``` + + + +### 启动DCU直通的容器 + +- 启动容器 + +``` +cat <<-EOF | kubectl apply -f - +apiVersion: v1 +kind: Pod +metadata: + name: ubuntu-dcu +spec: + runtimeClassName: kata-qemu-csv-dcu + containers: + - name: ubuntu-dcu + image: docker.io/pawsonfang/ubuntu-dcu:latest + command: ["tail", "-f", "/dev/null"] + resources: + limits: + dcu/a100: "1" + volumeMounts: + - mountPath: /opt/dtk + name: dtk + - mountPath: /opt/hyhal + name: hyhal + - mountPath: /dev + name: dev + securityContext: + privileged: true + volumes: + - name: dtk + hostPath: + path: /opt/dtk-24.04.1 + - name: hyhal + hostPath: + path: /opt/hyhal + - name: dev + hostPath: + path: /dev +EOF +``` + +- 进入容器中,使用DCU之前,需要配置环境变量: + +``` +kubectl exec -it ubuntu-dcu -- bash +HYCONTAINER_ENV=0 /opt/hyhal/bin/hymgr & +source /opt/dtk/env.sh +rocminfo +``` + +- 期望结果(能看到CPU和DCU两个设备): + +``` +hygon module is loaded +===================== +HSA System Attributes +===================== +Runtime Version: 1.1 +System Timestamp Freq.: 1000.000000MHz +Sig. Max Wait Duration: 18446744073709551615 (0xFFFFFFFFFFFFFFFF) (timestamp count) +Machine Model: LARGE +System Endianness: LITTLE + +========== +HSA Agents +========== +******* +Agent 1 +******* + Name: Hygon C86 3250 8-core Processor + Uuid: CPU-XX + Marketing Name: Hygon C86 3250 8-core Processor + Vendor Name: HygonGenuine + Feature: None specified + Profile: FULL_PROFILE + Float Round Mode: NEAR + . + . + . +******* +Agent 2 +******* + Name: ZIFANG + Uuid: GPU-XX + Marketing Name: C878186 + Vendor Name: HYGON + Feature: KERNEL_DISPATCH + Profile: BASE_PROFILE + Float Round Mode: NEAR + Max Queue Number: 128(0x80) + Queue Min Size: 4096(0x1000) + Queue Max Size: 131072(0x20000) + Queue Type: MULTI + Node: 1 + Device Type: DCU +. +. +. +*** Done *** +``` + +- 测试完恢复内存设置 + + ``` + sudo sed -i "s/^default_memory *=.*\$/default_memory = 2048/g" /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv-dcu.toml + ``` + +## 附录 + +### 制作DCU容器镜像的Dockerfile + +``` +FROM ubuntu:20.04 +RUN apt-get update \ + && apt-get install wget pciutils ocaml libelf-dev libnuma1 libdrm2 libdrm-amdgpu1 kmod build-essential -y +``` + diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/5-\346\272\220\347\240\201\347\274\226\350\257\221\346\234\272\345\257\206\345\256\271\345\231\250\345\220\204\347\273\204\344\273\266.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/5-\346\272\220\347\240\201\347\274\226\350\257\221\346\234\272\345\257\206\345\256\271\345\231\250\345\220\204\347\273\204\344\273\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..2e0d9f00a07e0410ceec3abbc95195ade702a840 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/5-\346\272\220\347\240\201\347\274\226\350\257\221\346\234\272\345\257\206\345\256\271\345\231\250\345\220\204\347\273\204\344\273\266.md" @@ -0,0 +1,148 @@ +# 源码编译机密容器各组件 + +## 准备kata-containers代码 + +- 下载源码 + + ``` + cd $HOME + git clone https://gitee.com/anolis/kata-containers -b CC-0.5.0-hygon + ``` + + +## 安装编译依赖 + +``` +wget https://go.dev/dl/go1.19.3.linux-amd64.tar.gz +sudo tar xvf go1.19.3.linux-amd64.tar.gz -C /usr/local/ +echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc +source ~/.bashrc + +sudo snap install yq --channel=v3/stable +``` + +## kata-containers各组件编译 + +系统编译将/opt/hygon/csv/confidential-containers/pkg/confidential-containers.tar.xz 文件拷贝解压,编译好的组件安装到对应的目录重新打包,从而达到更新编译组件的目的。 + + +可以编译一个组件或者同时编译多个组件,多个组件编译命令类似如下 +./build_confidential_containers.sh -b runtime,qemu + +**注:多次独立编译只会替换编译的部分,如果想替换多个组件,将上一次编译生成的tar 包拷贝替换/opt/hygon/csv/confidential-containers/pkg/confidential-containers.tar.xz 进行重新编译** + +### kata-runtime编译安装 + +``` +cd $HOME/kata-containers/release +./build_confidential_containers.sh -b runtime +``` + +### kata-qemu编译安装 + +``` +cd $HOME/kata-containers/release +./build_confidential_containers.sh -b qemu +``` + +### kata-ovmf编译安装 + +``` +cd $HOME/kata-containers/release +./build_confidential_containers.sh -b ovmf +``` + +### 编译Guest Kernel + +``` +cd $HOME/kata-containers/release +./build_confidential_containers.sh -b csv_kernel +``` + + +### 制作initrd + +下面命令会制作出 online_sev_kbc,offline_sev_kbc,offline_fs_kbc 对应的 initrd +``` +cd $HOME/kata-containers/release +./build_confidential_containers.sh -b csv_initrd + +``` +### 编译文件说明 +编译会在release 目录下生成打包文件confidential-containers.tar.gz + +压缩文件目录说明 + +| 目录 | 说明 | +|------------|------------| +|opt/confidential-containers/bin/| kata 运行时和qemu 文件| +|opt/confidential-containers/share/ovmf/| ovmf 文件| +|opt/confidential-containers/share/kata-containers/| 内核和initrd 文件| +|opt/confidential-containers/share/defaults/kata-containers/|系统配置文件| + + +将新的confidential-containers.tar.gz拷贝到/opt/hygon/csv/confidential-containers/pkg/ 目录下使用 + + +### 修改initrd + +> 如果只是修改initrd中的文件,或者添加文件到initrd中,我们推荐解包再打包的方式。 + +#### 解包initrd + +``` +cp /opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_fs_kbc ./initrd.img.gz +gunzip initrd.img.gz +mkdir initrd +cd initrd/ +cpio -ivmd < ../initrd.img +``` + +在initrd目录进行修改后,重新打包。 + +#### 打包initrd + +``` +cd initrd/ +find . | cpio -o -H newc > ../initrd.new.img +gzip ../initrd.new.img +cd ../ && mv initrd.new.img.gz initrd.new.img +cp initrd.new.img /opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_fs_kbc +``` + +### 针对offline_fs_kbc,定制policy (`sev_kbc无需此步`) + +- 定制key信息到aa-offline_fs_kbc-keys.json,示例如下: + + ``` + { + "key_id1": "cGFzc3BocmFzZXdoaWNobmVlZHN0b2JlMzJieXRlcyE=", + "key_id2": "qyecaCQh/+ChjnO7poTn08w5WYFqz4piBPh1rVMmrEo=", + "key_id3": "sXnCqg66/XdMb6Lo+XkABR9v8b3ImJm9BwtxhOMVwmg=", + "key_id4": "nXHQzVVvpVm9OrpRGwOIJ53cyAv2IRphLjJkS0dusT0=", + "key_id5": "gsyZwJh9BI/0qrCvfGxqJudcgHPRnymCgcych2lNzyU=", + "key_id6": "+2Cr3LQ8sq3PQpXIRX7yUNIP4q1X7HczSkB/FHZWGwQ=", + "key_id7": "Y8jJ64qyDOV8+M2ZEyAAk58P6rDdnDGg3WNgn2ELdVU=", + "key_id8": "EfZNaUaszIjCgT6YtSLiaLDMdPBMtZNQXTrBf3DmiP0=", + "key_id9": "illVfAwybTUAazagcOy90wLzrMPQVm44fZWxyeigjxo=", + "key_id10": "1g3KtvGfyIjq+HZmsKYJ1tMzuB8f1RjS6H0ieNBHLV0=" + } + ``` + +- 定制resources信息到aa-offline_fs_kbc-resources.json,示例如下(各字段的详细信息参考[7-使用签名镜像来部署workload](7-使用签名镜像来部署workload.md)): + + ``` + { + "default/security-policy/test": "ewogICAgImRlZmF1bHQiOiBbeyJ0eXBlIjogImluc2VjdXJlQWNjZXB0QW55dGhpbmcifV0sIAogICAgInRyYW5zcG9ydHMiOiB7CiAgICAgICAgImRvY2tlciI6IHsKICAgICAgICAgICAgImRvY2tlci5pby9wYXdzb25mYW5nL215YnVzeWJveCI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzaWdzdG9yZVNpZ25lZCIsCiAgICAgICAgICAgICAgICAgICAgImtleVBhdGgiOiAia2JzOi8vL2RlZmF1bHQvY29zaWduLXB1YmxpYy1rZXkvdGVzdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRvY2tlcnByb3h5LmNvbS9wYXdzb25mYW5nL215YnVzeWJveCI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzaWdzdG9yZVNpZ25lZCIsCiAgICAgICAgICAgICAgICAgICAgImtleVBhdGgiOiAia2JzOi8vL2RlZmF1bHQvY29zaWduLXB1YmxpYy1rZXkvdGVzdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgIH0KICAgIH0KfQo=", + "default/sigstore-config/test": "ZG9ja2VyOgogICAgcXVheS5pby9rYXRhLWNvbnRhaW5lcnMvY29uZmlkZW50aWFsLWNvbnRhaW5lcnM6CiAgICAgICAgc2lnc3RvcmU6IGZpbGU6Ly8vZXRjL2NvbnRhaW5lcnMvcXVheV92ZXJpZmljYXRpb24vc2lnbmF0dXJlcwogICAgICAgIHNpZ3N0b3JlLXN0YWdpbmc6IGZpbGU6Ly8vZXRjL2NvbnRhaW5lcnMvcXVheV92ZXJpZmljYXRpb24vc2lnbmF0dXJlcw==", + "default/gpg-public-config/test": "LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkdGTVZFZ0JFQUN6ZC9ISno2bnE4R0FqRm9XdDIwUGhBeTRScDhxNHFlRkUzSkorbHdoUHprSmRiTDNaClFKMzFURUNyYktVeW8zTElRMzFCNzVBWXczdm5FSVVPY3V0U0UxaThvNTU3SW94eGxHNFN3dGtSVmRVUGVFN2UKdElOMm1aKzJHd25nQW1KRUgxNWtNQUZzVVFhNG4rWE9WUU9aSTNRWWVsWWpMd0thbXFBa3dFdjAzSmpHaTIrbQo0a0ZITzBmMy9lc0pmZXhVd3hLMHdQazJ4emlvZ2FpTzN6NDViTkoxMDZwSC95NGhRMHBWbWZJSHpPVjZwRHN2ClVHcTFxdnZlL2dDRXFZZWYvcUgyNzJoRkdNTE1qRy8yOStwVmZ1bEJ2YnpiUUhNUHlIaTFBdTVwemJWVUhxOUEKOURoWXhmWllpN2MreXU5Y1h0cngzQmlXSG52NzlBRUtWZDhCdkVucE02dGNIOWMvVFJlakd6VjF0cThva05wMwpXaXp6T0ZzVXBpaXVYVVo5ZlVlQ0s5YnVEaXdsdDF2ZGQ2OG5RZ3o2YkdIOEZqbVd2UXU4eTNVZEZRSTUwQkNVCmVEeFZEcHIzRXhjNER6MWxnU0pNV0wya2NJRy8wVllGU2hkRXUxL2lnNmdLUlpGcm1XN2hnSU51V1ZwWUNoZGkKK0I3Rkg1UDhGUlBiN0YrZFdyY0o3M3A1WXJLMzhHbnpadTNtdmZSUnk5Q0FpU1NFNFpEd0JuMjMzSCtlMFFzWAptT2lIcW1LSVZTbnhVa1hoTktXWm9LUDVQRlBHWE9YSEFNaWRnWC8wT0UxOEc2WmREMEYvRVNuYVdUL2lwNzNNCk1EYU5tVENlL2JZdW9TZy9oVUdCMEtENUx2aFZaT01haTh1MkYwQnJFYWdPRnQ3SkZjbUVwd2pXWndBUkFRQUIKdEVsVGRHVjJaVzRnU0c5eWMyMWhiaUFvUjFCSElHdGxlU0JtYjNJZ2MybG5ibWx1WnlCcllYUmhJSFJsYzNRZwphVzFoWjJWektTQThjM1JsZG1WdVFIVnJMbWxpYlM1amIyMCtpUUpZQkJNQkNBQkNGaUVFWjdKS3JNUlpaNTRDCmc5ZnVXUGJ0Qis2bXRDa0ZBbUZNVkVnQ0d3TUZDUUhoTTRBRkN3a0lCd0lESWdJQkJoVUtDUWdMQWdRV0FnTUIKQWg0SEFoZUFBQW9KRUZqMjdRZnVwclFwc3ZBUC8zTit5RGRlRkRMaVdSS21YbEhzbWRuT3dlYVdxQjdzUWJ0SQpJTFh6RVFCY1pIWjFRNUxna0o2bzlHUlJlK0pPVmFsQUQ5QXdPQjg4Z0hNVVptR2hmQU05dnY3R3RWWGdpQkNmCi9mNDE0TTFueS9xMUgwZG1wRnF4b3FaYzlXNlhaU1pFVC8yNVFPUlMzYkxIK0dFdnQ4enZaUkFLVU9WRUhPZTQKbHRocmNuY21uaFd4ZWc0ZFJGWEZRczJZSW41VzZiOTd4SzN4emF0bDlyTVgwd2s4L2xweDlHQ0tLalZ3OVpQcwpUZ25kcmlMTnUzaGJOeWFXaEhlTHFUT1hEOUU0WUNjM3FMc0MvZW5Hclh6Si91bWdpaHUvRy9iNWFsZWZ6U09xCnh0MHI2ejdSbk85OXJVdEtDYW0rNUVEa0t6VXZoamdSM2oyTGtHWkMxZnFBTnQ2TEtPK0MwT3FtMEpUMm1UZGEKdGEveDdCdGozNktJYjN1TlNSdDJiRHJGWXhPajZzRnlQVlRVbHpOZ2l0bkszVHFJeG5teWlHZGhPVUcyc1p5OAowSTFaNHZaT0JGdzIzWE9qYzRUVGRWU29BbUxSZkhOeWZtYXlHbS9ja2xlTjV2T2xiVzlPOXREa0M0alo2WkZNCjFxZzEyUkxvS1dxRXRodmlzOVhzV0xieEFBaG0xbkZKV0VpTlhzdW1NUDc0U1cwLy9qYmRFT0xObzBXRG5TTmIKZ3U2a2hVYXJIR0dpUEJzeFc4cURGdXNIWFplMEpDSVFRUTBDZVh3T1owaXFINC9tQ0lKQnlId2dEdExnbnNUTQo2a2hnU2VhMXk1a3RRQnZSdU1QODg5ZWJQSEoyNjFqeUl5OXV5K25oaUt5cG9PK3lqMWYvUm5qNWtLS3Y3Mm5LCjV1RVNwSkJUCj1CN3ZRCi0tLS0tRU5EIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0K", + "default/cosign-public-key/test": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFYmV5S0pjWVJmK3VIdEQ0VFdMTU5US0R3Q0ordQpRdGJZZE5qbDVhS1QxZ3luSHFKQ1hqTm5SM3M5bDVRS3NJb21QeHd4Uk02Tkloc2xEK0JJamwwVDZnPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "default/credential/test": "ewogICAgImF1dGhzIjogewogICAgICAgICJkb2NrZXIuaW8iOiB7CiAgICAgICAgICAgICJhdXRoIjogImJHbDFaR0ZzYVdKcU9sQmhjM04zTUhKa0lYRmhlZ289IgogICAgICAgIH0sCiAgICAgICAgInF1YXkuaW8iOiB7CiAgICAgICAgICAgICJhdXRoIjogImJHbDFaR0ZzYVdKcU9sQmhjM04zTUhKa0lYRmhlZ289IgogICAgICAgIH0KICAgIH0KfQo=" + } + ``` + +- 将两个文件复制到rootfs/etc目录下 + + ``` + cp *.json ${ROOTFS_DIR}/etc/ + ``` \ No newline at end of file diff --git "a/sig/beautiful1103/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/beautiful1103/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" new file mode 100644 index 0000000000000000000000000000000000000000..a1612b5dea1d76ce217610525264ee69395e41fd --- /dev/null +++ "b/sig/beautiful1103/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" @@ -0,0 +1,185 @@ +# 使用加密镜像部署workload +**该实践支持情况如下:** + +| 机密容器类型 | 是否支持 | +| --- | --- | +| CSV | 是 | +| CSV2 | 是 | +| CSV3 | 是 | + +## 关于Attestation Agent及KBC + +**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)。 + +### 基于online_sev_kbc运行加密容器 + +- 编辑 kata 配置文件: + + - 设置机密容器为`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 + ``` + + - 设置AA module 配置文件路径 + + 由于国内网络目前访问不了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 + ``` + +- 启动POD + +```shell +cat <<-EOF | kubectl apply -f - +apiVersion: v1 +kind: Pod +metadata: + labels: + run: test-en-online + name: test-en-online +spec: + containers: + - image: docker.io/pawsonfang/busybox:encrypted + name: test-en-online + imagePullPolicy: Always + dnsPolicy: ClusterFirst + restartPolicy: Never + runtimeClassName: kata-qemu-csv +EOF +``` + +- 查看 pod 是否启动成功: + +```shell +kubectl get pod +``` + +- 预期结果如下: + +```shell +NAME READY STATUS RESTARTS AGE +test-en-online 1/1 Running 0 146m +``` + +#### 基于offline_sev_kbc运行加密容器 + +- 编辑 kata 配置文件: + + - 设置机密容器为`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 + ``` + + +- 启动 Pod + +```shell +cat <<-EOF | kubectl apply -f - +apiVersion: v1 +kind: Pod +metadata: + labels: + run: test-en-offline + name: test-en-offline +spec: + containers: + - image: docker.io/pawsonfang/busybox:encrypted + name: test-en-offline + imagePullPolicy: Always + dnsPolicy: ClusterFirst + restartPolicy: Never + runtimeClassName: kata-qemu-csv +EOF +``` + +- 查看 pod 是否启动成功: + +```shell +kubectl get pod +``` + +- 预期结果如下: + +```shell +NAME READY STATUS RESTARTS AGE +test-en-offline 1/1 Running 0 31h +``` + diff --git "a/sig/beautiful1103/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/beautiful1103/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" new file mode 100644 index 0000000000000000000000000000000000000000..73cbd315d889dc4d9afc2c6cb63fc55fd048105d --- /dev/null +++ "b/sig/beautiful1103/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" @@ -0,0 +1,179 @@ +# 使用签名镜像部署workload +**该实践支持情况如下:** + +| 机密容器类型 | 是否支持 | +| --- | --- | +| CSV | 是 | +| CSV2 | 是 | +| CSV3 | 是 | + +## 关于Attestation Agent及KBC + +**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)。 + +#### 基于online_sev_kbc运行签名容器 + +- 编辑 kata 配置文件: + + - 设置机密容器为`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 + ``` + +- 启动 Pod + +```shell +cat <<-EOF | kubectl apply -f - +apiVersion: v1 +kind: Pod +metadata: + labels: + run: test-sign-online + name: test-sign-online +spec: + containers: + - image: docker.io/pawsonfang/mybusybox + name: test-sign-online + imagePullPolicy: Always + dnsPolicy: ClusterFirst + restartPolicy: Never + runtimeClassName: kata-qemu-csv +EOF +``` + +- 查看 pod 是否启动成功: + +```shell +kubectl get pod +``` + +- 预期结果如下: + +```shell +NAME READY STATUS RESTARTS AGE +test-sign-online 1/1 Running 0 31h +``` + +#### 基于offline_fs_kbc运行签名容器 + +> offline_fs_kbc模式,是把验签公钥放在initrd中,不需要借助于simple-kbs,相应的,也就不支持pre_attestation + +- 编辑 kata 配置文件: + + - 设置机密容器为`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 + ``` + +- 启动 Pod + +```shell +cat <<-EOF | kubectl apply -f - +apiVersion: v1 +kind: Pod +metadata: + labels: + run: test-sign-offline + name: test-sign-offline +spec: + containers: + - image: docker.io/pawsonfang/mybusybox + name: test-sign-offline + imagePullPolicy: Always + dnsPolicy: ClusterFirst + restartPolicy: Never + runtimeClassName: kata-qemu-csv +EOF +``` + +- 查看 pod 是否启动成功: + +```shell +kubectl get po +``` + +- 预期结果如下: + +```shell +NAME READY STATUS RESTARTS AGE +test-sign-offline 1/1 Running 0 31h +``` + +### diff --git "a/sig/beautiful1103/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/beautiful1103/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" new file mode 100644 index 0000000000000000000000000000000000000000..f2d40fe24d421fdf631a08e21de99969cc8e02bf --- /dev/null +++ "b/sig/beautiful1103/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" @@ -0,0 +1,127 @@ +# 自定义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和Kata机密虚拟机vCPU个数 + +> 获取内核的append值(需要先启动一个offline_sev_kbc或online_sev_kbc的pod) + +```shell +nr_vcpus=0 +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| -.*$||") + nr_vcpus=$(echo ${qemu_process} \ + | sed "s|.* -smp \([0-9]*\).*|\1|") + break + fi + sleep 1 +done + +echo "${append}" > cmdline_file +``` + +## 计算CSV/CSV2/CSV3 Guest Firmware Measurement + +> 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 的配置文件 + - kata 的配置文件路径:/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml。 + + +```shell +ovmf_path="/opt/confidential-containers/share/ovmf/AMDSEV.fd" +kernel_path="/opt/confidential-containers/share/kata-containers/vmlinuz-csv.container" +initrd_path="/opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.online_sev_kbc" +cmdline_path=${PWD}/cmdline_file +``` + +- 使用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 +echo $measurement +``` + +- 设置simple kbs 数据库参数 + +```shell +KBS_DB_USER="kbsuser" +KBS_DB_PW="kbspassword" +KBS_DB="simple_kbs" +KBS_DB_TYPE="mysql" +KBS_DB_HOST=$(sudo docker network inspect simple-kbs_default \ + | jq -r '.[].Containers[] | select(.Name | test("simple-kbs[_-]db.*")).IPv4Address' \ + | sed "s|/.*$||g") +``` + +- 由于本文使用的加密镜像( docker.io/pawsonfang/busybox:encrypted ),是采用 simple kbs 已经存在的密钥来解密,该镜像的 enc_key 值如下。用户需要根据加密镜像按需设置enc_key。 + +```shell +enc_key=C1z522QYM9YZDcz+7nstjYD2HNX1/2/okVStRA2ChDo= +``` + +- 将 自定义policy 注入 mysql 中。 + +```shell +# 安装依赖 +sudo apt install mysql-client jq -y +mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${KBS_DB_HOST} -D ${KBS_DB} < 再启动pod时,kata会向CSV固件获取度量值,与simple-kbs数据库的policy值进行对比。 diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/9-\345\210\266\344\275\234\344\270\200\344\270\252\346\226\260\347\232\204\345\212\240\345\257\206\351\225\234\345\203\217\345\271\266\351\203\250\347\275\262.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/9-\345\210\266\344\275\234\344\270\200\344\270\252\346\226\260\347\232\204\345\212\240\345\257\206\351\225\234\345\203\217\345\271\266\351\203\250\347\275\262.md" new file mode 100644 index 0000000000000000000000000000000000000000..0cdee96d51332306cd00cb416f13c28396759ca2 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/9-\345\210\266\344\275\234\344\270\200\344\270\252\346\226\260\347\232\204\345\212\240\345\257\206\351\225\234\345\203\217\345\271\266\351\203\250\347\275\262.md" @@ -0,0 +1,176 @@ +# 制作一个新的加密镜像并部署 + +本文主要为您介绍如何制作一个新的加密镜像,并部署pod。 + +## 加密镜像 + +Attestation Agent可以启动一个grpc服务来支持对映像进行加密。克隆仓库: + +``` +attestation_agent_tag="v0.5.0" +git clone https://github.com/confidential-containers/attestation-agent.git +(cd attestation-agent && git checkout -b "branch_${attestation_agent_tag}" "${attestation_agent_tag}") +``` + +编译并启动CoCo Keyprovider(该应用会作为一个服务占用当前窗口进程): + +``` +# 安装依赖 +curl https://sh.rustup.rs -sSf | sh +source "$HOME/.cargo/env" +TODO +sudo apt install openssl-devel -y +# 编译并启动 +cd attestation-agent/coco_keyprovider +RUST_LOG=coco_keyprovider cargo run --release -- --socket 127.0.0.1:50000 +``` + +创建 Attestation Agent keyprovider: + +``` +cat > ocicrypt.conf < key1 +``` + +把你想要加密的镜像加密并拷贝到当前目录,本例中使用的是`busybox`镜像。其中密钥使用`keypath`指定,`keyid`此处设置为`kbs:///default/key/key_id2`,密钥算法设置为`A256GCM`,`——insecure-policy`标志用于连接到认证代理,不会影响项目的安全性。 + +``` +OCICRYPT_KEYPROVIDER_CONFIG=ocicrypt.conf skopeo copy --insecure-policy --encryption-key provider:attestation-agent:keypath=$(pwd)/key1::keyid=kbs:///default/key/key_id2::algorithm=A256GCM docker://busybox oci:busybox:encrypted +``` + +加密后,可以看到在当前目录下生成了`busybox`目录。 + +确认镜像确实已经被加密: + +``` +cat ./busybox/index.json | python3 -m json.tool +``` + +期望结果: + +``` +{ + "schemaVersion": 2, + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:f594fcb13ca12e4ebf400b5e8ab715cb4f30adb335b8e31366d61f5350029e6e", + "size": 1195, + "annotations": { + "org.opencontainers.image.ref.name": "encrypted" + } + } + ] +} +``` + +根据digest找到对应的manifest:`./busybox/blocs/sha256/73135775766027c5006e7744fa8007e812afec905064743c68b780dd49c1eeaf` + +``` +cat ./busybox/blobs/sha256/f594fcb13ca12e4ebf400b5e8ab715cb4f30adb335b8e31366d61f5350029e6e | python3 -m json.tool +``` + +期望结果: + +``` +{ + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "config": { + "mediaType": "application/vnd.oci.image.config.v1+json", + "digest": "sha256:3488e6e2e41e62fc51be840cd61d806d5b45defdb84a2e6c99ea8a0edb4b6cc7", + "size": 575 + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip+encrypted", + "digest": "sha256:0dfdc90a4529ca0b38e575945748d6f8258ad2ea2cce8755b8a9f0e1566e447f", + "size": 2592227, + "annotations": { + "org.opencontainers.image.enc.keys.provider.attestation-agent": "eyJraWQiOiJrYnM6Ly8vZGVmYXVsdC90ZXN0LWtleS8xIiwid3JhcHBlZF9kYXRhIjoiLzNMeWhsdVE1aG42MVVjN0ZDM1BWTlNDUlV0YitLc1h5ZWhGTERtaUJlcUE4cStrcGgxbFpwckR4cjh0ck5RUFpxRDB2UlFobVFFWTM1YnV3R05VeGRINXdyeWtCa0x2OTFkSHFHMEJOY1FETVNhNTBBZFpqb00xTHQ0SUdIUDlZeEpGL3hmcWk4RFFBUmdXNjhpV3hlcWgxTFRMQ01hcUg5TzUxeXduYmcxTmJ3aFM0aXdkRSttMGRhOWwyTXpqeklrbjRtN3pWZUl6cFRVVHJuS0gyM1RmWmVWZUZsZVMxY0VscWhGdGw4bnZDYmphNlZyQlFYTzRFVVZUdjkvemxzS2xnRnl3aEhnL1VvUHBmMXMvY2RJPSIsIml2IjoiQUFBQUFBQUFBQUFBQUFBQSIsIndyYXBfdHlwZSI6IkEyNTZHQ00ifQ==", + "org.opencontainers.image.enc.pubopts": "eyJjaXBoZXIiOiJBRVNfMjU2X0NUUl9ITUFDX1NIQTI1NiIsImhtYWMiOiJqWHhYMGVWWGR2RHAxbVpxSHVXYzFJWGFwazhicmhKMHdpbDl5K3JLUXc4PSIsImNpcGhlcm9wdGlvbnMiOnt9fQ==" + } + } + ] +} +``` + +其中`mediaType`为`application/vnd.oci.image.layer.v1.tar+gzip+encrypted`,表示该layer已被加密。 + +## 上传镜像到远程的image registry + +记得把docker.io/myrepo替换为自己的仓库地址: + +``` +# 登录您的image registry,比如登录docker.io +skopeo login docker.io +# 上传镜像 +skopeo copy --insecure-policy oci:busybox:encrypted docker://docker.io/myrepo/busybox:encrypted +``` + +## 更新密钥到kbs + +- 设置数据库参数 + + ``` + KBS_DB_USER="kbsuser" + KBS_DB_PW="kbspassword" + KBS_DB="simple_kbs" + KBS_DB_TYPE="mysql" + KBS_DB_HOST=$(sudo docker network inspect simple-kbs_default \ + | jq -r '.[].Containers[] | select(.Name | test("simple-kbs[_-]db.*")).IPv4Address' \ + | sed "s|/.*$||g") + ``` + +- 获取加密密钥的base64 encode + +```shell +enc_key=$(cat key1 | base64) +echo $enc_key +``` + +- 将 加密密钥 注入 mysql 中。 + +```shell +mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${KBS_DB_HOST} -D ${KBS_DB} < 注意:`default/key/key_id2`要与skopeo参数相同;使用offline_sev_kbc时,要设置`configuration-qemu-csv.toml`中`guest_pre_attestation_keyset`的值为`KEYSET-2` + +## 使用新的加密镜像启动pod + +> myrepo替换为自己的仓库地址 + +``` +cat <<-EOF | kubectl apply -f - +apiVersion: v1 +kind: Pod +metadata: + labels: + run: test-en-online2 + name: test-en-online2 +spec: + containers: + - image: docker.io/myrepo/busybox:encrypted + name: test-en-online2 + imagePullPolicy: Always + dnsPolicy: ClusterFirst + restartPolicy: Never + runtimeClassName: kata-qemu-csv +EOF +``` + diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/5-KATA-2.5/1-\346\265\213\350\257\225CSV\345\212\240\345\257\206\345\256\271\345\231\250.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/5-KATA-2.5/1-\346\265\213\350\257\225CSV\345\212\240\345\257\206\345\256\271\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..57d3dfccd6456882f4141ece395c38a119a6918e --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/5-KATA-2.5/1-\346\265\213\350\257\225CSV\345\212\240\345\257\206\345\256\271\345\231\250.md" @@ -0,0 +1,82 @@ +测试之前,请先安装CSV软件。 + +## 功能描述 +Kata容器运行在轻量级虚拟机里,CSV Kata容器将安全虚拟化技术与容器技术结合,将Kata容器运行在CSV TEE中,使Kata容器具有更强的安全性。 + +## 测试CSV Kata加密容器 + +### 安装kata +``` +$ cd ~/ +$ wget https://github.com/kata-containers/kata-containers/releases/download/2.5.2/kata-static-2.5.2-x86_64.tar.xz  +$ wget https://github.com/containerd/containerd/releases/download/v1.6.6/cri-containerd-cni-1.6.6-linux-amd64.tar.gz  +$ sudo /opt/hygon/csv/install_kata.sh +``` +### 更新kata runtime +``` +$ cd ~/ +$ wget https://go.dev/dl/go1.16.10.linux-amd64.tar.gz  +$ wget https://github.com/kata-containers/kata-containers/archive/refs/tags/2.5.2.tar.gz -O kata-2.5.2.tar.gz +$ sudo /opt/hygon/csv/update_kata.sh +``` +### 安装nerdctl +``` +$ wget https://github.com/containerd/nerdctl/releases/download/v0.23.0/nerdctl-0.23.0-linux-amd64.tar.gz  +$ sudo tar -C /usr/local/bin -xvf nerdctl-0.23.0-linux-amd64.tar.gz +``` +### 编译kata guest kernel +``` +$ cd ~/kata-containers-2.5.2/tools/packaging/kernel +$ sudo /opt/hygon/csv/build_kata_kernel.sh +``` +### 修改支持CSV KATA +``` +$ sudo /opt/hygon/csv/normal_to_csv_kata.sh +``` +### 编译kata guest rootfs +``` +$ cd ~/kata-containers-2.5.2/tools/osbuilder +$ sudo cp /opt/hygon/csv/dcu/* ./ +$ sudo ./dcu_rootfs.sh +$ sudo chroot ubuntu_rootfs +# cd root +# ./install_in_chroot.sh +# exit +$ sudo -E AGENT_INIT=yes ./image-builder/image_builder.sh ubuntu_rootfs +$ sudo cp kata-containers.img /opt/kata/share/kata-containers/kata-containers.img +``` +### 运行CSV kata容器 +``` +$ export CNI_PATH=/opt/cni/bin/ +$ sudo nerdctl pull ubuntu:20.04 +$ sudo -E nerdctl run --runtime io.containerd.run.kata.v2 -d  --name ubuntu-focal ubuntu:20.04 +``` +### 查看CSV kata容器的内存 +``` +$ sudo /opt/hygon/csv/dump-kata-memory.sh nerdctl ubuntu-focal +``` +内存数据如下图,可以看到CSV kata容器的内存被加密了。 + +图 1 CSV kata容器的内存数据 + + ![](../../../assets/csv6-1.png) + +## 验证CSV kata远程认证功能 +测试使用的容器内核集成了生成认证报告需要的内核驱动,驱动的源代码是csv-guest.c,如果用户需要使用自定义内核,需要将此驱动编译进内核。使用下面的命令启动加密容器。 +``` +$ sudo -E nerdctl run --runtime io.containerd.run.kata.v2 --mount type=bind,source=/dev,target=/dev,rw --mount type=bind,source=/mnt,target=/opt,bind-propagation=shared --rm -it --name ubuntu-focal ubuntu:20.04 bash +``` +启动成功后,在容器中检查设备节点/dev/csv-guest是否存在,如果设备节点不存在将无法获取认证报告。将ioctl-get-attestation程序拷贝到容器中执行。 +``` +$ sudo cp /opt/hygon/csv/attestation/ioctl-get-attestation /mnt/ +# cd /opt/ +# ./ioctl-get-attestation +``` +ioctl-get-attestation执行会生成认证报告report.cert,可以在任意机器上验证认证报告,验证证书链签名会从证书服务器下载证书,因此验证机器需要联网。这里使用主机验证认证报告,将报告拷贝到主机中验证。 +``` +$ sudo cp /opt/hygon/csv/attestation/verify-attestation /mnt/ +$ cd /mnt/ +$ sudo chmod 666 report.cert +$ sudo ./verify-attestation true +``` +verify-attestation会使用PEK公钥验证认证报告的签名,并且从证书服务器下载证书链验证HRK->HSK->CEK->PEK证书的签名,请检查程序输出的LOG确定每个步骤是否成功。 \ No newline at end of file diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/5-KATA-2.5/2-\346\265\213\350\257\225ASID\345\244\215\347\224\250.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/5-KATA-2.5/2-\346\265\213\350\257\225ASID\345\244\215\347\224\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..e3001503885239c5c6a822e63899f76108d73c34 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/5-KATA-2.5/2-\346\265\213\350\257\225ASID\345\244\215\347\224\250.md" @@ -0,0 +1,23 @@ +测试之前,请先完成CSV KATA加密容器测试。 + +## 功能描述 +2号、3号CPU最多支持15个CSV ASID,每个CSV kata容器使用1个ASID,为了同时运行超过15个CSV kata容器,可以让同一个用户的CSV kata容器复用ASID,相同ASID的CSV kata容器使用的内存加密密钥相同。参数user-id表示用户信息,同一个ASID最多可以被64 个CSV kata容器复用。 + +## 测试CSV Kata复用ASID + +### 配置user-id +``` +$ sudo sed -i 's/#* *mem_encryption_user.*$/mem_encryption_user_id = "testuser"/' /etc/kata-containers/configuration.toml +``` +### 运行20个CSV kata容器 +``` +$ i=1; while [ $i -le 20 ]; do sudo -E nerdctl run  --runtime io.containerd.run.kata.v2 --name csv-kata$i -d ubuntu:20.04; let i++; done +``` +### 检查运行的CSV kata容器个数 +``` +$ sudo nerdctl ps  | grep -c csv-kata +``` +检查完清除运行中的容器 +``` +$ sudo nerdctl rm -f `sudo nerdctl ps -a |grep csv-kata |awk '{print $1}'` +``` \ No newline at end of file diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/5-KATA-2.5/3-\346\265\213\350\257\225\347\233\264\351\200\232DCU.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/5-KATA-2.5/3-\346\265\213\350\257\225\347\233\264\351\200\232DCU.md" new file mode 100644 index 0000000000000000000000000000000000000000..a7e64996b4fe0e9aaa6534c741a677ea412218aa --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/5-KATA-2.5/3-\346\265\213\350\257\225\347\233\264\351\200\232DCU.md" @@ -0,0 +1,45 @@ +测试之前,请先完成CSV KATA加密容器测试。 + +## 功能描述 +类似于CSV虚拟机直通DCU卡,CSV kata容器也可以使用DCU卡。 + +## 测试CSV kata容器使用DCU卡 + +### 编译kata容器镜像 +``` +$ wget https://github.com/moby/buildkit/releases/download/v0.10.6/buildkit-v0.10.6.linux-amd64.tar.gz +$ sudo tar zxvf buildkit-v0.10.6.linux-amd64.tar.gz -C /usr/local/ +$ sudo su root +# buildkitd & +$ cd /opt/hygon/csv/dcu/ +$ nerdctl build -t kata-dcu:v1 -f Dockerfile . +``` +buildkitd 需要在单独窗口运行 + +### 修改kata配置文件支持VFIO +``` +$ sudo sed -i -e "s/#* *\(hotplug_vfio_on_root_bus\).*=.*$/\1 = true/g" /etc/kata-containers/configuration.toml +$ sudo sed -i -e "s/#* *\(pcie_root_port\).*=.*$/\1 = 1/g" /etc/kata-containers/configuration.toml +$ sudo sed -i -e "s/^\(kernel_modules\).*=.*$/\1 = \[\"hydcu\"\]/g" /etc/kata-containers/configuration.toml +``` +### 运行直通DCU卡的CSV kata容器 +示例DCU卡的VFIO设备号是/dev/vfio/16。 +``` +$ export CNI_PATH=/opt/cni/bin/ +$ sudo -E nerdctl run --privileged --security-opt privileged-without-host-devices --runtime io.containerd.run.kata.v2 --device /dev/vfio/16 --mount type=bind,source=/dev,target=/dev,rw --mount type=bind,source=/mnt,target=/app,bind-propagation=shared --rm -it --name ubuntu-focal kata-dcu:v1 +``` +### 在CSV kata容器中运行DCU测试程序 + +HOST 下载测试集 +``` +$ cd /mnt +$ sudo git clone https://github.com/ROCm-Developer-Tools/HIP-Examples.git +``` + +容器中进入共享目录,编译运行测试集 +``` +# cd /app/HIP-Examples/vectorAdd +# source /opt/dtk-24.04/env.sh +# make clean;make +# ./vectoradd_hip.exe +``` diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/5-KATA-2.5/4-\346\265\213\350\257\225k8s\351\203\250\347\275\262CSV\346\234\272\345\257\206\345\256\271\345\231\250.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/5-KATA-2.5/4-\346\265\213\350\257\225k8s\351\203\250\347\275\262CSV\346\234\272\345\257\206\345\256\271\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..ef3d89ef99ae15a0639fed5ac8b51a5cdb2f50f6 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/5-KATA-2.5/4-\346\265\213\350\257\225k8s\351\203\250\347\275\262CSV\346\234\272\345\257\206\345\256\271\345\231\250.md" @@ -0,0 +1,50 @@ +测试之前,请先完成CSV KATA加密容器测试。 + +## 功能描述 +在K8s 上启动CSV KATA 容器,验证远程认证功能。 + +## 启动容器 + +部署k8s环境 +``` +$ cd /opt/hygon/csv/ +$ sudo ./k8s.sh +``` +hostip 为对应的部署本机ip地址,hostname 为主机名称。 +``` +$ sed -i 's/advertiseAddress:.*/advertiseAddress: hostip/g' /opt/hygon/csv/kubeadm-config.yaml +$ sed -i 's/name:.*/name: hostname/g' /opt/hygon/csv/kubeadm-config.yaml +``` +初始化k8s,添加kata runtimeClass +``` +$ cd /opt/hygon/csv/ +$ ./deploy_k8s_kata.sh +``` +启动kata 容器 +``` +$ kubectl apply -f ubuntu-kata.yml +``` + +## 验证CSV kata远程认证功能 +启动成功后,在容器中检查设备节点/dev/csv-guest是否存在,如果设备节点不存在将无法获取认证报告。将ioctl-get-attestation程序拷贝到容器中执行。 + +host端 +``` +$ kubectl cp /opt/hygon/csv/attestation/ioctl-get-attestation ubuntu-kata:/opt +$ kubectl exec ubuntu-kata -it bash +``` + +容器端 + +``` +# cd /opt/ +# ./ioctl-get-attestation +``` +ioctl-get-attestation执行会生成认证报告report.cert,可以在任意机器上验证认证报告,验证证书链签名会从证书服务器下载证书,因此验证机器需要联网。这里使用主机验证认证报告,将报告拷贝到主机中验证。 + +``` +$ kubectl cp ubuntu-kata:opt/report.cert ./report.cert +$ sudo chmod 666 report.cert +$ /opt/hygon/csv/attestation/verify-attestation true +``` +verify-attestation会使用PEK公钥验证认证报告的签名,并且从证书服务器下载证书链验证HRK->HSK->CEK->PEK证书的签名,请检查程序输出的LOG确定每个步骤是否成功。 diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/1-\345\256\211\345\205\250\345\206\205\345\255\230\345\212\240\345\257\206.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/1-\345\256\211\345\205\250\345\206\205\345\255\230\345\212\240\345\257\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..d6a3171b67d9e435c09cba710ef1d45e5d520760 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/1-\345\256\211\345\205\250\345\206\205\345\255\230\345\212\240\345\257\206.md" @@ -0,0 +1,32 @@ +# 安全内存加密 FAQ + +#### Q: 海光内存加密采用什么算法 + +A: 海光内存加密采用国密 SM4 算法 + +#### Q: 海光安全内存加密技术和 CSV 是什么关系 + +A: 海光安全内存加密技术用来加密主机内存,主机上运行的所有程序使用同一个内存加密密钥。 CSV 技术用来加密虚拟机内存,每个 CSV 虚拟机拥有自己的内存加密密钥,不同的 CSV 虚拟机使用的密钥各不相同。 + +#### Q: 打开安全内存加密后,外设能正常访问加密内存吗 + +A: 安全内存加密技术通过页表项中的 C bit 控制是否加密该页表项指向的内存,C bit 默认是物理地址中的第 47 位。C=1 表示此页内存被加密,C=0 表示此页内存不加密。外设通过 DMA 访问加密内存时,只要正确设置内存地址 C=1 就可以正常访问。不支持 64 位物理地址的外设,通过 IOMMU 也可以正常访问加密内存。 + +#### Q: 海光安全内存加密技术和海光密码协处理器是什么关系 + +A: 海光密码协处理器是高性能国密运算硬件引擎,支持 SM2、SM3、SM4 运算加速。安全内存加密技术使用的 SM4 加密模块是集成在内存控制器中的硬件模块,和密码协处理器没有关系。 + +#### Q: 打开安全内存加密后,海光密码协处理器能正常访问加密内存吗 + +A: 只要正确设置内存地址的 C bit,海光密码协处理器可以正常访问加密内存。 + +#### Q: 使能SME之后,出现RAID卡swiotlb_alloc失败 + +A: 该问题,通常是以前的RAID卡只支持32位寻址,不支持更高的,所以使能SME时,必须同时使能IOMMU: + +1. 首先检查BIOS IOMMU是否已使能 +2. 其次,排查内核IOMMU是否已使能,根据内核版本的不通,排查方法不同: +3. 5.10 内核:看下cmdline是否使能了iommu=pt,如果使能了,请关闭 +4. 4.19 内核,看下内核编译是否使能了 CONFIG_IOMMU_DEFAULT_PASSTHROUGH,如果使能了,采用以下任意方式解决(二选一): + 1. 重新编译内核以禁用 + 2. 内核cmdline添加:iommu.passthrough=off iommu=nopt diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/2-\346\234\272\345\257\206\350\231\232\346\213\237\346\234\272.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/2-\346\234\272\345\257\206\350\231\232\346\213\237\346\234\272.md" new file mode 100644 index 0000000000000000000000000000000000000000..f099bba1cf2763fbf237211b5671fc84fe2808bb --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/2-\346\234\272\345\257\206\350\231\232\346\213\237\346\234\272.md" @@ -0,0 +1,102 @@ +# 虚拟机 FAQ + +#### Q: 同时能运行多少个 CSV 虚拟机 + +海光 2 号、3号 CPU 最多能同时运行 15 个 CSV 虚拟机,C86-4G支持同时运行`500`个CSV虚拟机 + +#### Q: CSV 虚拟机支持设备直通吗 + +CSV 虚拟机支持设备直通,可以通过 VFIO 将网卡等设备分配给 CSV 虚拟机使用。为了保证 CSV 虚拟机加密内存的安全性,CPU 硬件阻止设备访问 CSV 虚拟机的加密内存,设备只能访问非加密内存,设备驱动通过 bounce buffer 机制将数据从加密内存拷贝到非加密内存实现正常访问。 + +#### Q: CSV虚拟机直通两张DCU卡时,一张直通成功,一张直通失败 + +PciMMio预留的bar空间不够,修改qemu参数:name=opt/ovmf/X-PciMmio64Mb,string=131072 + +#### Q: CSV虚拟机中rocm-smi显示DCU占用率为100%,但实际未跑业务 + +A: DCU目前不支持RESET,虚拟机直通时会调用RESET接口,导致DCU卡异常。workarroud方案:主机安装`hydcu_pci_fixup_header`,该驱动会屏蔽DCU RESET接口 + +#### Q: CSV虚拟机是否支持 data sealing的功能 + +A: CSV加密虚拟机是支持密钥封印功能的,CSV机密容器暂不支持。 + +#### Q: csv-guest.c内核中编译方法 + +A: 参考 https://gitee.com/anolis/cloud-kernel/blob/devel-5.10/drivers/virt/Kconfig + +#### Q: gemu-system-x86 64: -netdev bridge,br=virbr0,id=net0: bridge helper failed +A: 创建 /etc/qemu/bridge.conf,添加allow virbr0 在文件中 + +#### Q: { "execute": "pmemsave", "arguments": {"val": 0, "size": 256, "filename": "csv.txt"} } 出现 Permission denied + +A: 可能是已经生成过对应的文件,将文件删除重新尝试 + +#### Q: csv 虚拟机启动不了排查流程 + +- 检查固件信息 + ``` + $ sudo hag general check + firewalld: inactive + selinux: Disabled + kernel version: 5.10.134-csv + model name: Hygon C86 3250 8-core Processor + Hygon C86 3250 8-core Processor + is Hygon CPU: YES + SME: enabled + CSV: enabled + /dev/sev: exist + psp bl version: 1.2.112.0 + csv api version: 1.3 + firmware version: 2229 + is HGSC imported: YES + TKM: enabled + chip id: NZA9T01100405 + /dev/tdm: exist + TDM: enabled + tdm api version: 1.4 + /dev/tpm0: exist + tpm_acpi: HYGT0101 + /dev/tcm0: nonexist + tcm_acpi: nonexist + check command success! + ``` + 1)**firmware version** C86-3G 机器版本要求不低于**1837**, + C86-4G 机器版本要求不低于**2089** ,机器型号参考[1-0 安全功能配置要求](https://openanolis.cn/sig/Hygon-Arch/doc/1076446632387394260?lang=zh) **硬件配置要求** 章节, + 如果条件不满足,请联系厂商确认bios是否包含安全固件功能 + + 2)如果SME 和 CSV 都是disabled状态,请参考[1-0 安全功能配置要求](https://openanolis.cn/sig/Hygon-Arch/doc/1076446632387394260?lang=zh) **BIOS安装及设置要求** 章节检查 SMEE 是否开启 + + +- 查看内核版本 + + 内核必须是社区文档提供内核,具体请参考[1-1-安装操作系统和内核](https://openanolis.cn/sig/Hygon-Arch/doc/865622272844371792) + +- 查看主机内核参数 + ``` + $ cat /proc/cmdline + 内容必须包含kvm-amd.sev=1 kvm-amd.sev_es=1 ,如果是启动csv3虚拟机还必须包含csv_mem_percentage=50 如果没有在/etc/default/grub 中设置使其生效 + ``` + **csv_mem_percentage=50** 中**50** 表示cma内存占用整个内存的百分比,可以根据需要调整 +- 检查通用安全证书是否导入 + + 请参考[1-2-导入通用安全证书](https://openanolis.cn/sig/Hygon-Arch/doc/865622274698254162)导入通用安全证书。 + +- 检查内核config 配置 + + /boot/config-5.10.134-csv 配置文件中,如下宏应该为如下状态 + ``` + CONFIG_CRYPTO_DEV_CCP=y + CONFIG_AMD_MEM_ENCRYPT=y + CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT=y + ``` + 如果不一致请进行修改重新编译 +- 查看/sys/module/kvm_amd/parameters/sev 值 + ``` + $ cat /sys/module/kvm_amd/parameters/sev + 1 + ``` + 上面的内容值必须是1 + + #### Q: 原生麒麟虚拟机使用-device virtio-net-pci,netdev=net0,romfile= 网络参数启动卡主 + + A: 使用 -device virtio-net-pci,netdev=net0,disable-legacy=on,iommu_platform=on,romfile= 参数进行替换 \ No newline at end of file diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/3-\346\234\272\345\257\206\345\256\271\345\231\250.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/3-\346\234\272\345\257\206\345\256\271\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..d9516398eef6fe9b237b86e66161ecdac00a269a --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/3-\346\234\272\345\257\206\345\256\271\345\231\250.md" @@ -0,0 +1,289 @@ +# 机密容器 FAQ + +#### Q: CSV 机密容器的工作原理是什么 + +A: CSV 机密容器使用了 3 个底层技术:KATA 容器技术、海光 CSV 安全虚拟化技术和 RATS-TLS 技术。KATA 容器运行在虚拟机中,使用独立的内核,比普通容器的安全性更高。KATA 容器结合 CSV 技术使容器运行在CSV 虚拟机中,CSV 虚拟机使用 CPU 独立的 TLB、Cache 等资源,并且虚拟机内存被硬件加密,主机无法访问,进一步提高容器的安全性。CSV 虚拟机结合 RATS-TLS 技术实现了容器运行环境的远程认证功能,RATS-TLS 证书中嵌入了 CSV 虚拟机远程认证报告,认证报告使用海光 CPU 芯片密钥签名,认证通过证明容器运行在安全的 CSV 虚拟机中,TLS 公钥可信,可用于容器镜像解密等传输协议。 + +#### Q: CSV 机密容器pull镜像 网络失败排查流程 + +- 确认主机上能否访问外网 +``` +$ curl -I www.google.com +HTTP/1.1 200 OK +Transfer-Encoding: chunked +Cache-Control: private +Connection: keep-alive +Content-Security-Policy-Report-Only: object-src 'none';base-uri 'self';script-src 'nonce-av2HGf3bKW-3lOmpVG8kCQ' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp +Content-Type: text/html; charset=ISO-8859-1 +Date: Wed, 27 Nov 2024 06:04:33 GMT +Expires: Wed, 27 Nov 2024 06:04:33 GMT +Keep-Alive: timeout=4 +P3p: CP="This is not a P3P policy! See g.co/p3phelp for more info." +Proxy-Connection: keep-alive +Server: gws +Set-Cookie: AEC=AZ6Zc-VU8r_ZysfVX952pnbMtFMmWoYb2NRjGrApWp72qUQYdDB7vExHgQ; expires=Mon, 26-May-2025 06:04:33 GMT; path=/; domain=.google.com; Secure; HttpOnly; SameSite=lax +Set-Cookie: NID=519=iVFq4dhKfrAvxkSdV2OycQaqItZkWZzltjrM7HVU3MNSbbQx4360W8C2Q4bmKUqR5TkbQlNIKvQcUKZF_zxJjN7CtG3c4P5tTphgm2IIhiG1coM_-FvUlPs0xL7gCQbE8Ow7RUb7P90ecrtUn_wPsbY7N7T-mPilpH4Y8_BJ0DaWI8od-T9TuT2_Mr2Eb-E; expires=Thu, 29-May-2025 06:04:33 GMT; path=/; domain=.google.com; HttpOnly +X-Frame-Options: SAMEORIGIN +X-Xss-Protection: 0 +``` +上述表示可以访问外网,否则检查主机网络 +- 排查kata机密虚拟机网络 + +打开虚拟机 debug console,启动容器之前添加如下配置 +``` +$ sudo sed -i -e 's/^# *\(enable_debug\).*=.*$/\1 = true/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml +$ sudo sed -i -e 's/^kernel_params = "\(.*\)"/kernel_params = "\1 agent.log=debug initcall_debug"/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml +$ sudo sed -i -e 's/^# *\(use_legacy_serial\).*=.*$/\1 = true/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml +$ sudo sed -i -e 's/^# *\(debug_console_enabled\).*=.*$/\1 = true/g' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml +``` +获取虚拟机的sandbox id + +``` +$ ps -elf |grep sandbox +/opt/confidential-containers/bin/qemu-system-x86_64 -name sandbox-b66feaa98fcacfa8fe0b40c8472189cb20043c8269b23bf5c1da710f20be00a1 -uuid d113bb06-f05e-4e35-a407-4d6e827370b8 ......... + +``` +使用sandbox id登录虚拟机 +``` +$ sudo /opt/confidential-containers/bin/kata-runtime exec b66feaa98fcacfa8fe0b40c8472189cb20043c8269b23bf5c1da710f20be00a1 +``` +查看虚拟机和主机网络连通性 +``` +# exec <> /dev/tcp/host_ip/22 +# +``` +查看虚拟机和代理的连通性 +``` +# exec <> /dev/tcp/proxy_ip/port +# +``` +查看虚拟机和百度的连通性 +``` +# exec <> /dev/tcp/www.baidu.com/443 +# +``` +1.命令无任何输出,但是打印出下一个bash命令提示符,说明网络状态正常连通 + +2.connection refused意味着端口关闭 + +3.命令无任何输出,且不打印下一个bash命令提示符,意味着网络不通 + +执行完如果再执行命名遇到卡主的情况,通过exec 再新的终端重新登录 + +- 访问国内阿里云等仓库不要配置代理 + +访问阿里云等国内仓库kernel_params 配置参数 不要设置agent.https_proxy 和agent.no_proxy 等代理地址 + +#### Q: 拉取较大镜像时,需要将内存配置较大以适应较大的镜像 +配置方法如下: + +``` +$ sudo sed -i "s/^default_memory *=.*\$/default_memory = 10240/g" /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv-dcu.toml +``` +**10240** 为设置内存的大小,客户根据实际情况调整 + +#### Q: https私有仓库搭建 +如下步骤作为搭建私有仓库参考,主机系统Anolis OS 8.4 + +- 拉取镜像 + ``` + sudo docker pull registry:2.7.0 + ``` +- 生成密码文件 + user password 为仓库账号密码,根据需求自行调整 + ``` + # mkdir -p /docker/registry/auth + # docker run --entrypoint htpasswd registry:2.7.0 -Bbn user password >> /docker/registry/auth/htpasswd + ``` +- 设置配置文件 +``` + # mkdir -p /docker/registry/config + # cat > /docker/registry/config/config.yml < openssl.cnf < cert_chain.cert +# mv -f cert_chain.cert /opt/csv/ +``` +注:**如果机器不能联网**,需要将hag csv export_cert_chain 步骤使用[2-3-5-测试CSV虚拟机迁移](https://openanolis.cn/sig/Hygon-Arch/doc/944532750000611833) 中 **离线导出证书** 章节步骤进行替换制作证书 + +修复后重新行测试 diff --git "a/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/4-\350\277\234\347\250\213\350\256\244\350\257\201.md" "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/4-\350\277\234\347\250\213\350\256\244\350\257\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..7204f823b68a7f84429d1be0c92d8f42966d4aa3 --- /dev/null +++ "b/sig/beautiful1103/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/4-\350\277\234\347\250\213\350\256\244\350\257\201.md" @@ -0,0 +1,33 @@ +# 远程认证 FAQ + +#### Q: 远程认证报告中mnonce,data,hash分别是什么 + +A: mnonce和data是用户的输入,作为对报告的完整性保护,mnonce会作为HMAC运算的key,data会放在report中返回(可以为空)。hash就是HMAC完整性运算的结果 + +#### Q: 如何下载海光芯片证书 + +A: 可以通过网站 [https://cert.hygon.cn](https://cert.hygon.cn/) 下载海光芯片证书。芯片序列号通过运行海光安全工具 hag 获取。 + +#### Q: 生成、验证远程证明时是否需要连外网? + +A: 生成和验证都不需要外网, 验证过程中可以在外面下载好证书,拷贝到机器上做验证使用 + +##### 离线下载证书流程 +- 获取cpu chip id +``` +$ sudo hag general get_id +chip id is T6N0580001081701 +get_id command success! + +[general] Command successful! +``` +- 手动下载该芯片的HSK_CEK证书 +``` +$ curl -s -f -o hsk_cek.cert https://cert.hygon.cn/hsk_cek?snumber=T6N0580001081701 +``` +- 手动下载HRK证书 +``` +curl -s -f -o ./hrk.cert https://cert.hygon.cn/hrk +``` + +然后将证书拷贝到验证程序同一个目录下进行验证 \ No newline at end of file diff --git "a/sig/beautiful1103/content/SIG\344\276\213\344\274\232/SIG\344\276\213\344\274\232(202201-2022-5).md" "b/sig/beautiful1103/content/SIG\344\276\213\344\274\232/SIG\344\276\213\344\274\232(202201-2022-5).md" new file mode 100644 index 0000000000000000000000000000000000000000..56b7545b9b17e254c21fd38146f54d5651205b4c --- /dev/null +++ "b/sig/beautiful1103/content/SIG\344\276\213\344\274\232/SIG\344\276\213\344\274\232(202201-2022-5).md" @@ -0,0 +1,51 @@ +## 会议主题 +419新增 hahahaha +419编辑 eeeeee +423编辑 hahahaha +-- 吾问无为谓 +--= 进销存尾款 + +## 会议时间 +2023.03.16 10:00-11:00 + +## 参会人 + +- 参会方:21来自电子五所(赛宝实验室)和阿里云的社区爱好者 +- 参会人:211212 + +## 会议记要 + +1. 对齐五所提出的方案扩展需求,主要是字段的扩展以及流程上适当进行松耦合asdfasdfasdfasdf + - 设计对象:需要考虑测试用例套与测试需求的关系,测试结果与测试执行记录集的关系,测试方案的扩展等 + - 评审相关:测试用例、测试方案、测试结果 + - 流程上:主要对象之间需要进行适当的弱耦合 + - 平台输出:需要考虑测试用例及测试用例执行记录集这两块内容 +2. 讨论后续社区合作、运营等方式 +3. 后续yongchao会结合这次新增扩展需求进行设计上的优化并与大家对齐 + +## 图片0 + +图片名称 + +## 图片1 + +![](../../assets/SIG例会/41b4.jpg) + + +图片名称2 + + + + + + + + + + + +0000000000000000000000000000000 + +================== +0000000000000000 +20250212 diff --git "a/sig/beautiful1103/content/\347\224\250\346\210\267\346\214\207\345\215\227/\346\214\207\345\215\227.md" "b/sig/beautiful1103/content/\347\224\250\346\210\267\346\214\207\345\215\227/\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..fa66599fc800b3594996f031227bd72654d2cb4b --- /dev/null +++ "b/sig/beautiful1103/content/\347\224\250\346\210\267\346\214\207\345\215\227/\346\214\207\345\215\227.md" @@ -0,0 +1 @@ +hello!123问3333333 \ No newline at end of file diff --git a/sig/beautiful1103/dingding_qrcode_20230220.png b/sig/beautiful1103/dingding_qrcode_20230220.png new file mode 100644 index 0000000000000000000000000000000000000000..216cdb320ac338712928fb586ce38af0837f320f Binary files /dev/null and b/sig/beautiful1103/dingding_qrcode_20230220.png differ diff --git a/sig/beautiful1103/sig-info.yaml b/sig/beautiful1103/sig-info.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f1630af2923d47ded2f17d311b046818aa2dd593 --- /dev/null +++ b/sig/beautiful1103/sig-info.yaml @@ -0,0 +1,26 @@ +name: 漂亮1103 +en_name: beautiful1103 +home_page: https://openanolis.cn/sig/beautiful1103 +description: # 安装说明 +en_description: Watching the moon climb up into the sky, you too... +mailing_list: t-one@lists.openanolis.cn +meeting_url: https://openanolis.cn/sig/beautiful1103 +maintainers: +- openanolis_id: yongchao + gitee_id: yongchao +- openanolis_id: hahahaha + gitee_id: yutting123 +- openanolis_id: eeeeeeee + gitee_id: suli01 + +contributors: +- openanolis_id: fuyong + gitee_id: fuyong +- openanolis_id: woohello + gitee_id: woohello + + +repositories: +- repo: + - anolis/tes2sdfarm + - anolis/testf-arm-front