QingTian Enclave-KMS接口调用和权限配置实践
准备工作
-  
购买一台
c7t实例虚拟机,勾选Enclave选项

目前Enclave只在上海一、新加坡、土耳其局点支持 -  
下载必要外围组件
yum install qingtian-tool virtio-qtbox qt-enclave-bootstrap -y 
qingtian-tools用于管理enclave生命周期virtio-qtbox安装enclave相关驱动qt-enclave-bootstrap包含enclave镜像文件制作的必要文件
-  
配置enclave隔离资源,并进行资源隔离
vim /etc/qingtian/enclave/qt-enclave-env.conf

建议一次性隔离出较大内存资源预留给Enclave使用,避免反复隔离,造成系统内存碎片化,隔离服务重启失败
启动资源隔离服务:
systemctl start qt-enclave-env
如果出现隔离服务失败,无法申请到足够内存,可能存在内存碎片,推荐重启虚拟机,再执行隔离服务 -  
安装必要python包
pip3 install docker knack

 -  
安装docker和git
yum install docker git -y 
实践步骤
本次实践主要是测试enclave-kms接口,具体操作步骤如下:
从gitee仓库下载huawei-qingtian-enclave代码
git clone https://gitee.com/heathjay/huawei-qingtian.git
 本实例以qtsm-java-sdk为例,请切到newjay-java-sdk分支
 git checkout newjay-java-sdk
 ** 参考该实例测试**:
根据用例,获取相关参数:
| 参数名称 | 含义 | 获取方式 | 
|---|---|---|
| ak | Access Key Id | 参考获取AK、SK章节 | 
| sk | Secret Access Key | 参考获取AK、SK章节 | 
| project_id | 项目ID | |
| key_id | KMS中的keyID | |
| host | KMS endpoint | 
上述参数需要填入测试文件中:
 huawei-qingtian/enclave/qtsm-sdk-java/kms-cms-java/com/huawei/src/test/TestKmsCmsProxy.java
创建身份策略
出于权限最小化考虑,我们通常是在根账户下创建一个IAM新用户,然后获取其AK、SK凭证,然后通过后面的权限策略控制,使其权限最小化。
 假设目前您在跟账号下操作
-  
打开IAM服务

 -  
使用新版控制台

 -  
新建身份策略
enclave-test-kms-api

可以通过勾选的方式去配置权限策略,也可拷贝我下面的权限控制策略到策略json表达框中 
{
  "Version": "5.0",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms::generateRandom",
        "kms:cmk:createDataKey",
        "kms:cmk:decryptData",
        "kms:cmk:decryptDataKey"
      ],
      "Condition": {
        "StringEqualsIgnoreCase": {
          "kms:RecipientAttestation/PCR0": [
            "8f2cbfb3930e59c6de5c4caff0a3f4c0457e8956bfb4556a7ca1f5f4614a741eeee39ae10447eb5baee48d49e6c1cb6c",
            "ff7ba807a385b49fc1c3346bb47215aef503dee6df22d32f733e22b90a9bc4b22424ca7de1a3537ac9608d7ebe461d67",
            "a28e765550d6ad1188860d30167b1fdb9e29c8da825543861bc76ef1e8427fac6b444ec6a1847fc2c22deae8170c2e67"
          ],
          "kms:RecipientAttestation/PCR8": [
            "a9add94b0ecbbd992baded2176370ecf3bfed2cb39b2ec547512b5174279799f2036fa0b8577bdaf503836178bd11ee2"
          ]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "kms:cmk:encryptData",
        "kms:cmk:encryptDataKey"
      ]
    }
  ]
}
 
Note: 其中PCR0和PCR8的值需要制作完Enclave镜像后,进行配置
比如我们在这里创建了enclave-test-kms-api的权限策略
 
创建用户并进行权限配置
-  
新建用户
enclave-test-kms-uers

 -  
权限配置:

一个名为
enclave-test-kms-uers用户创建成功; -  
获取
enclave-test-kms-uers用户的AK、SK (仅做测试参考)

 
3.1 点击下载后,AK、SK就存在本地文件中:
 

- 将AK、SK赋值给测试程序的对应参数
赋值给该文件huawei-qingtian/enclave/qtsm-sdk-java/kms-cms-java/com/huawei/src/test/TestKmsCmsProxy.java中对应的ak、sk字符串

 
获取kms的endpoint节点
可以使用该网站查询对应region的endpoint节点:
 
例如,博主的虚拟机在新加坡局点,则其kms endpoint为kms.ap-southeast-3.myhuaweicloud.com:
 
将kms.ap-southeast-3.myhuaweicloud.com赋值给该文件huawei-qingtian/enclave/qtsm-sdk-java/kms-cms-java/com/huawei/src/test/TestKmsCmsProxy.java中对应的host字符串变量:

获取projectID

将对应的projectID赋值给该文件huawei-qingtian/enclave/qtsm-sdk-java/kms-cms-java/com/huawei/src/test/TestKmsCmsProxy.java中对应的uriPrefix字符串变量:


获取KeyID
打开DEW服务
 
打开KMS服务,并创建密钥,获取keyid
 

将keyid赋值给该文件huawei-qingtian/enclave/qtsm-sdk-java/kms-cms-java/com/huawei/src/test/TestKmsCmsProxy.java中对应的uriPrefix字符串变量:
 
使用该key加密一段明文,如hello world!
 
并将密文填写到该文件huawei-qingtian/enclave/qtsm-sdk-java/kms-cms-java/com/huawei/src/test/TestKmsCmsProxy.java中对应的dataInputStr中:
 
构建镜像
进入到huawei-qingtian/enclave/qtsm-sdk-java/kms-cms-java/scripts目录,执行sh build_image.sh脚本

在该目录下就有了一个kms-demo.eif,其pcr0和pcr8的值为:
{
	"digest":	"SHA384",
	"PCR0":	"bb1a69bfe48a701a336a20fc5c9b678daebba4314b412b9574c2c2deb3a7a44ce03709122d5065f03b3bfe93ac05c870",
	"PCR8":	"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
}
 
生成镜像签名密钥和公钥
openssl ecparam -out private-key.pem -name secp384r1 -genkey
openssl req -new -key private-key.pem -out ssl.csr
openssl x509 -re1 -days 365 -in ssl.csr -signkey private-key.pem -out server.pem
 
启动proxy工具
/usr/local/bin/qingtian/enclave/qt_proxy -l 8000 -a kms.ap-southeast-3.myhuaweicloud.com -p 443 &
启动Enclave
qt enclave start --cpus 2 --mem 8192 --eif kms-demo.eif --cid 4
 
使用nc-vsock工具登录enclave,进行调试
因为该用例中,在enclave中启动了一个vsock的服务端(监听9999端口),所以可以从父虚拟机内通过vsock的客户端登陆到enclave中,执行命令(huawei-qingtian/enclave/qtsm-sdk-java/kms-cms-java/scripts/build_kms_demo.sh)进行调试。
 使用nc-vsock进入enclave
 huawei-qingtian/nc-vsock/nc-vsock 4 9999
 
在enclave里面执行:
cd /home/builder/enclave/qtsm-sdk-java/kms-cms-java/target
# We can perform it manually
java -cp .:../lib/lombok-1.18.26.jar:../lib/junit-4.13.1.jar -Djava.library.path=./lib com.huawei.src.test.TestKmsCmsProxy
 
直接执行的时候,会发现该用户无权限,所以得按照镜像的PCR0和PCR8修改策略

修改策略,大概30s-90s生效
 
重新执行命令,kms接口调通
 解密接口:
 
生成数据密钥接口:
 
生成随机数接口:
 
- 随机文章
 - 热门文章
 - 热评文章
 
- 小学生心理健康测试:了解孩子的内心世界小学生心理测试题目和答案解析
 - 探索门萨智商测试:入会标准评估题的奥秘门萨智商入门测试
 - 鸿蒙开发必备宝典:集成测试策略与工具全解【华为根技术】
 - Java通过JDBC分析SQL性能
 - MCP 协议的诞生:大模型技术演进下的标准化探索
 - 能力测一测 测你比别人厉害的能力
 - 性格小测试 测试你属于哪一类魅力女性?
 - Java 测试框架:JUnit 5 的新特性与最佳实践
 - 【HarmonyOS 5】AttributeModifier和AttributeUpdater详解
 
回归分析



