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接口调通
解密接口:
生成数据密钥接口:
生成随机数接口:
- 随机文章
- 热门文章
- 热评文章
- 广东外语艺术职业学院普通话测试指南广东外语艺术职业学院普通话证
- 北京的秋天普通话60篇朗读原文免费
- 《从Prompt工程到AI思维:开发者新技能树全解析》
- Java WebSocket 聊天系统
- 【HarmonyOS 5】敏感信息本地存储详解
- 4月阅读周·HTTP权威指南:客户端识别与cookie机制之会话跟踪和缓存篇
- WPF国际化必备神器:ResXManager
- Java API 网关系统
- 个性测试 测试你是软妹子还是女汉子