本文介绍了基于阿里云异构机密计算实例的机密RAG方案,通过TEE保护数据与模型安全、Trustee实现远程证明与密钥管理,支持多方不互信场景下私有数据加密处理、模型安全部署及用户隐私保护的全流程密态推理。
背景介绍
在典型的检索增强生成(RAG)场景中,私有数据提供方、推理服务提供方与最终用户之间往往互不信任。传统方案面临以下核心痛点:
数据上云即失控:私有数据一旦上传至云端向量数据库,存在被云平台、运维人员或第三方非法访问的风险;
模型资产易泄露:推理服务方担心高价值模型在云上部署时被窃取或逆向分析;
用户隐私无保障:用户的查询内容和响应结果在传输和处理过程中可能被截获或滥用;
为解决上述问题,本文提出基于可信执行环境(TEE) 的机密RAG(Confidential RAG, CRAG)方案。通过阿里云异构机密计算实例(基于Intel TDX和NVIDIA机密计算GPU),在CPU与GPU层面构建硬件级隔离的安全飞地,确保数据在处理全过程“可用不可见”。
方案介绍
本文介绍基于阿里云异构机密计算实例的机密RAG(Confidential RAG, CRAG)方案,支持在多方不互信场景下实现私有数据安全检索、模型安全部署与用户隐私保护的全流程密态推理。
整体流程
整个方案分为三个关键阶段,如下图所示:
主要分为如下三部分:
私有数据加密上传:数据提供方在本地对文档进行切片、向量化,并使用保距加密算法将向量转换为密文。原始文本内容也加密存储。加密后的数据上传至标准向量数据库(如RDS PostgreSQL),全程无需暴露明文。
针对RAG场景私有数据的安全保护方案细节,您可以阅读RAG私有数据的保护技术章节
机密RAG服务部署:推理服务提供方创建阿里云异构机密计算实例,在TEE环境中部署大模型和RAG应用。通过Trustee服务完成远程证明,确保只有在环境可信时才释放模型和数据密钥。
用户安全访问:最终用户通过本地可信网关客户端发起请求。客户端自动验证云端RAG服务的身份真实性,并建立端到端加密通道,保障查询与响应全过程隐私安全。
操作步骤
当前机密RAG特性处于邀测状态,请联系您的客户经理,以获取示例程序源码包。
步骤一:“机密数据提供方”准备私有数据
1. 创建普通ECS实例
本章节后续步骤将介绍数据处理过程,您需要准备一个具有公网IP地址的普通ECS实例,用于私有数据加密上传,以及Trustee服务的部署过程。您可以参照快速购买实例文档中的步骤创建ECS实例。
对于安全要求极高的场景,也可将Trustee服务部署在自有的数据中心或本地服务器上,通过专线或VPN与云上VPC网络打通。可确保信任根的软硬件环境完全由您掌握,不受云厂商的影响。
2. 处理文本并导入向量数据库
下载并解压示例程序源码tar包
tar -xvf rag_demo-0.1.0.tar.gz cd rag_demo-0.1.0/data_owner/
安装Python包管理器uv:
curl -LsSf https://astral.sh/uv/install.sh | sh echo 'eval "$(uv generate-shell-completion bash)"' >> ~/.bashrc . ~/.bashrc
创建RDS PostgreSQL数据库实例,并配置启用向量插件:
参考快速创建RDS PostgreSQL实例,并创建账号和数据库,然后创建账号和数据库一个名为
crag
的数据库(需要指定先前创建的账号为该数据库的授权账号)。参考插件管理中的步骤安装配置pgvector插件。
获取实例的内网地址
在实际场景中,RAG推理服务可能和RDS PostgreSQL数据库实例可能不在同一个专有网络VPC中,您可以开通RDS PostgreSQL数据库的外网地址,同时设置正确的白名单机制,来实现访问。
创建名为
sample-data
的目录用于存放需要建立索引的文本文件,以.txt为后缀初始化向量数据库,并对
./sample-data/
中的材料完成分词和索引,然后将数据加密和上传存储到向量数据库。uv run python setup_knowledge_store_cli.py \ -H pgm-xxxxxxxxxxxx.pg.rds.aliyuncs.com -p 5432 -d crag -U rag -P Rag_1234 \ --scaling-factor 1.0 \ --approximation-factor 1.0 \ --master-key test-masterkey-12345 \ -D ./sample-data/ \ -t "数字化转型面临的挑战是什么?"
请按需替换上述参数,配置说明如下:
数据库连接参数:数据库地址(-H)、端口号(-p)、库名(-d)、用户名(-U)、口令(-P)
向量加密参数:
--scaling-factor:缩放因子,影响加密过程中向量整体变换尺度,取正实数
--approximation-factor:近似参数,控制距离比较的容错空间,取正实数
--master-key:用户主密钥,用于生成随机噪音从而加密向量
预期输出如下:
知识库添加文档成功 检索内容为:数字化转型面临的挑战是什么? 共检索到2条相似内容,内容如下:[Document(id='f55ec050-a52c-4ff5-8154-eca4a3eb0c19', metadata={'source': './sample-data/test.txt'}, page_content='## 数字化转型\n\n## 1.数字化转型的背景和意义\n\n### 1.1 背景\n\n在过去的十年里,数字技术的迅猛发展已彻底改变了企业运营的方方面面。互联网、移动技术、云计算、大数据、物联网(loT)以及人工智能(Al)等技术的广泛应用,不仅催生了新的商业模式,还推动了企业在各个层面上的深度变革。企业开始意识到,数字化转型不仅仅是技术的应用,更是企业生存和发展的必然选择。\n\n## 1.2 意义\n\n### 1.2.1 提升企业竞争力\n\n数字化转型帮助企业优化流程、提高效率和降低成本,使其能够在全球市场中保持竞争优势。通过数字化技术,企业可以实现业务的自动化、数据驱动的决策以及创新能力的提升,从而迅速响应市场变化。\n\n### 1.2.2 改善客户体验\n\n现代客户期望能够获得个性化、无缝和即时的服务体验。数字化转型使企业能够更好地了解客户需求,并通过数据分析提供定制化的产品和服务,从而提升客户满意度和忠诚度。\n\n### 1.2.3 促进业务创新'), Document(id='c20e824d-24f5-4c36-b9d1-ae50563ed213', metadata={'source': './sample-data/test.txt'}, page_content='### 1.2.3 促进业务创新\n\n数字化技术为企业开辟了新的增长路径和收入来源。通过创新的商业模式,如平台经济、订阅服务和共享经济等,企业能够利用数字生态系统,扩大市场份额和增加盈利能力。\n\n### 1.2.4 加强企业风险管理\n\n数字化转型不仅提升了企业的运营效率,还改善了风险管理能力。通过大数据分析和实时监控,企业能够更好地预测和应对潜在风险,确保业务的连续性和稳定性。\n\n### 1.2.5 推动可持续发展\n\n数字化转型也有助于企业实现可持续发展的目标。例如,通过优化供应链管理,减少资源浪费和碳排放,企业可以在追求商业成功的同时履行社会责任,促进环境的可持续发展。\n\n1.3 总结\n\n总的来说,数字化转型不仅是企业应对当前市场挑战的一种战略选择,更是通向未来的必由之路。成功的数字化转型将帮助企业提升核心竞争力,优化客户体验,并在全球经济中获得长期的可持续发展。\n\n## 2.案例分析\n\n### 2.1 案例一:制造业的数字化转型\n\n#### 2.1.1 公司背景')]
3. 部署托管私有数据密钥的Trustee远程证明服务
使用YUM源安装并启动Trustee。
yum install -y trustee-1.5.2
Trustee会自动启动并默认监听端口8081。以部署环境IP加上服务端口号,即
http://<crag-trustee-ip>:8081/api
,可作为URL直接进行网络访问。其中,
<trustee-ip>
为部署了Trustee服务器IP。如需在生产环境中使用,建议额外为Trustee配置HTTPS访问,以增强安全性。导入私有数据密钥(master-key)到Trustee实例
执行以下命令,创建密钥目录(在本地目录
/opt/trustee/kbs/repository/default/
创建名为aliyun
的子目录)并写入密钥内容。sudo mkdir -p /opt/trustee/kbs/repository/default/aliyun/ sudo sh -c 'echo -n "test-masterkey-12345" > /opt/trustee/kbs/repository/default/aliyun/crag-master-key'
完成上述操作后,该密钥在Trustee系统中的密钥ID将对应为:
kbs:///default/aliyun/crag-master-key
。
步骤二:“推理服务提供方”部署机密RAG应用
1. 创建普通ECS示例
本章节后续步骤将指导您在一台异构机密计算实例上部署机密RAG应用。此外,您还需要另外准备一个具有公网IP地址的普通ECS服务器,用于模型加密上传操作,以及Trustee服务的部署过程。您可以参照快速购买实例文档中的步骤创建ECS实例。
2. 准备并上传加密模型
本小节使用模型加密工具处理模型数据,并将其上传到对象存储OSS中,为后续的密态分发和部署做准备。请参照基于异构机密计算实例构建安全大语言模型推理环境中的“步骤一:准备加密的模型数据”进行。
由于模型文件较大,过程耗时较长。如需快速体验方案,您可以跳过模型加密上传环节,选择我们提供的加密模型示例进行试用,直接进入后续步骤。
模型名称 | 加密方式 | 加密密码 | 公共读OSS地域 | OSS Endpoint | 模型存储位置 |
Qwen2.5-3B-Instruct | Gocryptfs | 0Bn4Q1wwY9fN3P | cn-beijing | oss-cn-beijing-internal.aliyuncs.com | conf-ai:/qwen2.5-3b-gocryptfs/ |
Sam | conf-ai:/qwen2.5-3b-sam/ |
3. 部署托管模型加密密钥的Trustee远程证明服务
使用YUM源安装并启动Trustee。
yum install -y trustee-1.5.2
Trustee会自动启动并默认监听端口8081。以部署环境IP加上服务端口号,即
http://<cai-trustee-ip>:8081/api
,可作为URL直接进行网络访问。其中,
<trustee-ip>
为部署了Trustee服务器IP。如需在生产环境中使用,建议额外为Trustee配置HTTPS访问,以增强安全性。导入模型解密密钥(
model-decryption-key
)到Trustee实例执行以下命令,创建密钥目录(在本地目录
/opt/trustee/kbs/repository/default/
创建名为aliyun
的子目录)并写入密钥内容。sudo mkdir -p /opt/trustee/kbs/repository/default/aliyun/ sudo sh -c 'echo -n "0Bn4Q1wwY9fN3P" > /opt/trustee/kbs/repository/default/aliyun/model-decryption-key'
完成上述操作后,该密钥在Trustee系统中的密钥ID将对应为:
kbs:///default/aliyun/model-decryption-key
。
4. 创建异构机密计算实例
请参照基于异构机密计算实例构建安全大语言模型推理环境中的“步骤三:创建异构机密计算实例”完成实例创建。后续步骤将在该异构机密计算实例上进行。
由于大语言模型文件较大,建议您在创建实例时为系统盘分配至少100GB的空间。
安全组配置:
请配置步骤一和步骤二中创建的Trustee远程证明服务所在实例的安全组,允许该异构机密计算实例访问其8081 TCP端口
请配置该异构机密计算实例的安全组,允许您的本地电脑访问其8080 TCP端口
5. 配置并启动Confidential AI服务
创建
cai.env
,写入如下内容。# 模型解密相关配置 TRUSTEE_URL="http://<cai-trustee-ip>:8081/api" MODEL_KEY_ID="kbs:///default/aliyun/model-decryption-key" # 加密模型分发相关配置 MODEL_OSS_BUCKET_PATH="<bucket-name>:<model-path>" # 存放在阿里云OSS上的模型密文路径,例如conf-ai:/qwen2.5-3b-gocryptfs/ MODEL_OSS_ENDPOINT="https://oss-cn-beijing-internal.aliyuncs.com" # 存放模型密文的OSS URL # MODEL_OSS_ACCESS_KEY_ID="" # 用于访问OSS bucket的access key # MODEL_OSS_SECRET_ACCESS_KEY="" # 用于访问OSS bucket的access key secret # MODEL_OSS_SESSION_TOKEN="" # 用于访问OSS bucket的session token,仅在通过STS凭据访问OSS时需要 MODEL_ENCRYPTION_METHOD="gocryptfs" # 加密模式使用的加密方法,取值为"gocryptfs"或"sam",默认值为"gocryptfs" MODEL_MOUNT_POINT=/tmp/model # 解密后模型明文的挂载位置,模型推理服务可以从该路径加载模型 # 私有数据密钥相关配置 ALT_TRUSTEE_URL="http://<crag-trustee-ip>:8081/api" ALT_KEY_ID="kbs:///default/aliyun/crag-master-key" # 大模型服务通信加密相关配置 MODEL_SERVICE_PORT=8080 # 业务使用的TCP端口号,该端口上的通信将被透明加密保护 # 模型P2P分发加速相关配置,默认可忽略 TRUSTEE_POLICY="default" # MODEL_SHARING_PEER="172.30.24.146 172.30.24.144"
请按需替换上述配置中的参数
运行Confidential AI 服务
docker compose -f /opt/alibaba/cai-docker/docker-compose.yml --env-file ./cai.env up -d
预期所有的组件都应该为Healthy或者Started状态。
6. 部署机密RAG应用
通过vllm运行一个大模型推理服务,该服务将为RAG应用处理推理任务
docker run -d \ --net host \ -v /tmp/model:/tmp/model \ --gpus all \ egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm:0.8.5-pytorch2.6-cu124-20250429 python3 -m vllm.entrypoints.openai.api_server \ --model=/tmp/model \ --trust-remote-code \ --port 8081
注意:根据
cai.env
中的配置,Confidential AI服务将对8080端口提供保护,因此这里让vllm server监听在8081端口,而让后续拉起的RAG应用监听在8080端口。下载并解压示例程序源码tar包
tar -xvf rag_demo-0.1.0.tar.gz cd rag_demo-0.1.0/app/
安装Python包管理器uv:
curl -LsSf https://astral.sh/uv/install.sh | sh echo 'eval "$(uv generate-shell-completion bash)"' >> ~/.bashrc . ~/.bashrc
检查
config.py
并按需进行修改。注意:请确保这里填写的加密参数配置(除
master_key
外)与“机密数据提供方”所使用的一致,并填写的连接访问信息可以正确数据库。# 加密参数配置,用于向量加密以及文本内容加解密,需提前指定 master_key = open('/run/cai/resources/alt-key', 'rb').read() scaling_factor = 1.0 approximation_factor = 1.0 # PostgreSQL向量数据库配置 db_host="pgm-xxxxxxxxxxxx.pg.rds.aliyuncs.com" db_port=5432 db_name="crag" db_username="rag" db_password="Rag_1234"
运行基于LangChain的RAG应用
uv run langchain serve --port=8080 --host=0.0.0.0
步骤三:“推理服务用户”访问机密RAG应用
1. 创建普通ECS实例
本章节后续步骤将指导您在自己的电脑上通过可信网关客户端访问机密RAG应用。在此之前,您还需要另外准备一个具有公网IP地址的普通ECS服务器,用于Trustee服务的部署过程。您可以参照快速购买实例文档中的步骤创建ECS实例。
2. 部署验证异构机密计算实例身份的Trustee远程证明服务
使用YUM源安装并启动Trustee。
yum install -y trustee-1.5.2
Trustee会自动启动并默认监听端口8081。以部署环境IP加上服务端口号,即
http://<user-trustee-ip>:8081/api
,可作为URL直接进行网络访问。其中,
<trustee-ip>
为部署了Trustee服务器IP。如需在生产环境中使用,建议额外为Trustee配置HTTPS访问,以增强安全性。配置该Trustee远程证明服务所在实例的安全组,允许您的电脑访问其8081 TCP端口
3. 在您的电脑上运行可信网关客户端
从此处GitHub页面下载对应平台的可信网关客户端(TNG Client)二进制文件
使用如下命令运行可信网关客户端
./tng launch --config-content ' { "add_ingress": [ { "http_proxy": { "proxy_listen": { "host": "127.0.0.1", "port": 41000 } }, "verify": { "as_addr": "http://<user-trustee-ip>:8081/api/attestation-service", "policy_ids": [ "default" ] } } ] } '
注意:请替换
as_addr
为对应的值可信网关客户端将在本机网络环境创建一个HTTP代理端口(监听在
127.0.0.1:41000
),您可以为需要访问机密RAG应用的程序(如浏览器)配置该HTTP代理。随后,可信网关客户端将使用远程证明对机密RAG应用的身份进行验证,并使用协商的会话密钥加密与机密RAG应用交互的后续请求及响应。启动浏览器,在浏览器设置中,配置HTTP代理为
127.0.0.1:41000
以火狐浏览器为例:
打开新标签页,在地址栏中输入
http://<crag-ip>:8080/
,访问部署的机密RAG服务请将<crag-ip>替换为异构机密计算实例的公网IP地址
在question栏输入“请按我总结数字化转型的意义”,点击“start”按钮
可以看到输出内容,与“机密数据提供方”提供的数据中的内容相符
点击“intermediate steps”按钮,可以看到LangChain服务端在处理请求过程中,成功通过rag查询到了最相关的文档,并将其作为推理过程的上下文信息。
RAG私有数据的保护技术
RAG场景通常依赖云上向量数据库来存储私有数据,在私有数据上云的过程中,其的安全性和隐私保护至关重要。业界要采用以下两种方法来保护私有数据:基于保距算法的向量加密和全密态数据库。
基于保距算法的向量加密
保距算法是一种加密技术,通过对向量添加随机噪声或者进行线性变换来实现加密。这种变换方式确保了加密后的向量与原始向量之间的欧氏距离或其他度量方式保持一致。这意味着加密后的向量仍然能够用于相似度搜索,而不会泄露原始向量的具体内容。
在该方法中,用户需要使用特殊工具将私有数据离线处理转换成向量形式,并以保距算法加密后存储在普通的向量数据库中,对于向量对应的文本片段原文,则采用业界标准的AES加密算法存储。从而允许RAG应用在密态下对数据进行高效的相似度检索。
全密态数据库
全密态数据库是一种支持在密文上进行所有的数据库事务、查询、分析等操作的技术。在全密态数据库中,所有数据都是以加密形式存储的,通过与机密计算(例如基于Intel TDX的全密态数据库)等高级加密技术结合,可以避免云平台软件、管理人员(如DBA)以及其他非授权人员接触到明文数据,防止研发和运维人员窃取数据,确保数据在计算过程中“可用不可见”,既保证了数据的安全性,又不影响检索效率。
在该方法中,私有数据在用户侧(客户端)加密后,在全密态数据库中完成对数据的处理,用户可以像操作普通数据库一样操作全密态数据库,从而大大减少用户使用成本。
本文介绍的机密RAG应用将使用“基于保距算法的向量加密”方法保护私有数据,如果您希望使用全密态数据库,可以前往了解阿里云的全密态数据库(公测)。