AI Agent在运行过程中会处理用户对话、调用外部工具、管理长期记忆和服务凭证,攻击面远超传统应用。本文介绍如何在阿里云g9i TDX机密计算实例上,使用一键部署脚本快速构建OpenClaw机密AI Agent,通过百炼API完成模型推理,结合Intel TDX硬件级内存加密、远程证明和端到端加密通信,保护用户对话、Agent状态和服务凭证的安全。
方案概述
本文介绍Confidential Agent方案,通过将OpenClaw(开源个人AI Agent)封装在Intel TDX(Trust Domain Extensions)可信执行环境中,利用硬件级内存加密、远程证明、供应链可验证和端到端加密访问,确保用户对话、Agent状态和工具执行过程在受保护的边界内闭环流转。
本方案的模型推理由阿里云百炼(DashScope)API提供,AI Agent在Intel TDX信任域内运行。用户输入与Agent上下文在TDX内存边界内组装,再经OpenClaw通过HTTPS调用百炼API完成模型推理。用户对话历史、Agent长期记忆、SKILL文件、服务凭据和IM平台状态均不离开TDX信任域。这种"机密Agent + 托管模型"的架构可在通用TDX实例(无需GPU)上运行,部署门槛、成本和扩展性显著优于在本地运行大模型的方案。
与基于异构机密计算实例构建OpenClaw机密AI Agent中的"单机vLLM推理"方案不同,本方案不在TDX实例内部署大模型推理服务,模型推理Prompt与回复会以HTTPS形式发送到百炼API。百炼API由阿里云提供,符合阿里云数据保护承诺,但Prompt内容会离开TDX实例的硬件加密边界。如对推理过程也有"数据不出TEE"的要求,请使用单机vLLM推理方案。
安全架构
Confidential Agent部署中的核心数据均在TEE(Trusted Execution Environment,可信执行环境)边界内闭环流转,以下资产受到保护:
保护对象 | 说明 |
用户对话隐私 | 用户输入、工具执行上下文和AI回复,可能包含个人身份、医疗、金融等敏感信息。 |
Agent记忆与状态 | OpenClaw的长期记忆、配置、SKILL文件,随运行时间积累形成高价值目标。 |
服务凭证 | 百炼DashScope API Key、钉钉OAuth凭据、OpenClaw Gateway Token,一旦泄露可导致服务被接管或调用配额被冒用。 |
安全架构自底向上覆盖硬件、启动链、运行时、密钥和通信五个层级:
保护层级 | 机制 |
硬件层 | Intel TDX对Guest OS全部内存透明加密,云平台和宿主机无法读取明文。 |
启动链 | UKI(Unified Kernel Image,统一内核镜像)和dm-verity rootfs防篡改;镜像度量值上传Rekor透明日志。 |
运行时 |
|
密钥管理 | 磁盘密钥、OpenClaw配置、钉钉凭据、百炼API Key等机密资源仅在远程证明通过后注入。 |
通信链路 | RATS-TLS端到端加密,远程证明验证实例身份后才建立通道,全程加密传输。 |
部署架构
部署流程如下:
凭证准备:在部署机上导出阿里云AccessKey、百炼API Key和钉钉凭据(可选)。
一键部署:执行一键部署脚本,自动完成依赖安装、可信镜像构建、参考值上传、云资源创建、远程证明和机密资源注入。
建立加密通道:脚本自动启动TNG connect隧道,建立部署机与TDX实例之间的RATS-TLS加密通道。
访问服务:通过钉钉、Web、桌面客户端或TUI访问OpenClaw,所有流量经RATS-TLS加密通道进入TDX实例。
前提条件
已开通阿里云ECS服务,账号具备创建TDX机密计算实例、VPC、交换机、安全组、OSS Bucket、自定义镜像等资源的权限。
已准备一台Alibaba Cloud Linux 3 ECS实例作为部署机,可用磁盘空间不低于80 GB。
重要部署机仅用于执行构建和部署操作,后续一键脚本会自动创建新的TDX机密实例承载OpenClaw服务。部署机本身无需是TDX实例。
已获取阿里云访问凭证。建议使用RAM用户最小权限、RAM角色或STS临时凭证,避免长期存储主账号AccessKey。
已开通阿里云百炼服务并获取DashScope API Key。
(可选)如需使用钉钉集成,已创建钉钉企业内部应用并获取
Client ID和Client Secret。部署机可以访问公网,用于拉取源码、系统包、Node.js、npm包、Rekor透明日志和阿里云OpenAPI。
操作步骤
本文以ecs.g9i.xlarge实例规格、地域cn-beijing、可用区cn-beijing-i为默认配置。
步骤一:准备凭证
一键部署脚本需要通过阿里云AccessKey创建云资源(ECS实例、VPC、安全组等),通过百炼API Key为OpenClaw提供模型推理能力。在部署机上执行以下命令,将凭证导出为环境变量。请将尖括号中的占位符替换为实际值。
export ALICLOUD_ACCESS_KEY="<YOUR_ACCESS_KEY>"
export ALICLOUD_SECRET_KEY="<YOUR_SECRET_KEY>"
export DASHSCOPE_API_KEY="<YOUR_DASHSCOPE_API_KEY>"占位符 | 说明 | 获取方式 |
| 阿里云AccessKey ID | 参见创建AccessKey。 |
| 阿里云AccessKey Secret | 与AccessKey ID一同生成。 |
| 百炼DashScope API Key | 在百炼控制台获取。 |
建议使用RAM用户最小权限或STS临时凭证,避免长期存储主账号AccessKey。
如需启用钉钉接入,继续执行以下命令。请将占位符替换为钉钉企业内部应用的实际凭据。
export DINGTALK_BOT_CLIENT_ID="<YOUR_DINGTALK_CLIENT_ID>"
export DINGTALK_BOT_CLIENT_SECRET="<YOUR_DINGTALK_CLIENT_SECRET>"其中<YOUR_DINGTALK_CLIENT_ID>和<YOUR_DINGTALK_CLIENT_SECRET>为钉钉企业内部应用的Client ID和Client Secret,在钉钉开发者后台创建应用后获取。
步骤二:执行一键部署
在部署机上执行以下命令进入交互式部署:
curl -fsSL https://raw.githubusercontent.com/inclavare-containers/confidential-agent/one-click/one-click/install.sh | sh脚本默认进入交互模式,会自动询问缺失的阿里云凭证、百炼API Key、钉钉凭据、OpenClaw Gateway Token和operator CIDR。常用默认配置如下:
配置项 | 默认值 | 说明 |
Region |
| 阿里云地域。 |
Zone |
| 支持TDX实例规格的可用区。 |
Instance Type |
| 默认TDX实例规格。 |
System Disk |
| OpenClaw镜像和运行态所需磁盘空间。 |
OpenClaw Version |
| OpenClaw版本。 |
Node.js Version |
| OpenClaw运行时Node.js版本。 |
npm Registry |
| OpenClaw镜像构建时使用的npm源。 |
Reference Value |
| 构建后将参考值上传Rekor,部署时使用Rekor验证。 |
State Dir |
| 本地状态、密钥、Terraform和构建产物目录。 |
一键脚本会自动探测部署机公网出口IP,并在交互模式下询问operator access CIDR:
选项 | 含义 | 适用场景 |
当前部署机公网IP | 仅允许当前部署机访问控制面、状态接口、debug SSH和connect端口。 | 默认推荐,适用于生产和测试。 |
| 允许所有IPv4来源访问operator暴露端口。 | 临时演示或受控网络环境。 |
0.0.0.0/0会扩大暴露面。默认OpenClaw配置禁用device auth,控制面仅靠Gateway Token鉴权;与0.0.0.0/0叠加使用时,请将Token视为高敏感凭据妥善保管。生产环境请限制为具体公网出口IP或企业出口CIDR。
非交互部署示例:
curl -fsSL https://raw.githubusercontent.com/inclavare-containers/confidential-agent/one-click/one-click/install.sh | sh -s -- deploy-openclaw \
--non-interactive \
--yes \
--region cn-beijing \
--zone-id cn-beijing-i \
--instance-type ecs.g9i.xlarge \
--disk-gb 200 \
--enable-dingtalk如需仅安装本机依赖、构建Confidential Agent组件和tools镜像,不创建云资源,执行以下命令:
curl -fsSL https://raw.githubusercontent.com/inclavare-containers/confidential-agent/one-click/one-click/install.sh | sh -s -- install-only非交互指定CIDR示例:
curl -fsSL https://raw.githubusercontent.com/inclavare-containers/confidential-agent/one-click/one-click/install.sh | sh -s -- deploy-openclaw \
--non-interactive \
--yes \
--allowed-cidr 203.0.113.10/32步骤三:等待部署完成并确认
脚本会自动完成以下动作:
安装部署机依赖。
构建
confidential-agent、confidential-agentd、cai-pep,并将confidential-agent安装到/usr/local/bin。构建
confidential-agent-tools:latest,并在部署机安装与镜像内匹配的OpenClaw CLI。构建OpenClaw可信镜像,启用FDE、dm-verity和UKI。
将镜像参考值上传Rekor透明日志。
创建阿里云云资源并启动TDX ECS。
远程证明通过后注入OpenClaw配置、百炼API Key、钉钉凭据和Gateway Token。
启动本地TNG connect隧道,并执行Web可达性检查、Gateway WebSocket probe和chat probe。chat probe会经过百炼API真实回包,作为端到端可用性确认。
部署成功后,脚本会输出类似以下信息:
Confidential Agent one-click summary
state_dir: /root/.confidential-agent
work_dir: /root/.confidential-agent/one-click
service: openclaw
region: cn-beijing
zone_id: cn-beijing-i
instance: ecs.g9i.xlarge
cidr: 203.0.113.10/32
dingtalk: 1
token: <generated-or-provided-token>
web: http://127.0.0.1:18789/openclaw
ws/api: ws://127.0.0.1:18789
tui: openclaw tui --url ws://127.0.0.1:18789 --token "<generated-or-provided-token>"Gateway Token会保存在$HOME/.confidential-agent/one-click/secrets/gateway.token,后续重跑会复用同一个Token。如需轮换,请删除该文件后重跑脚本。
步骤四:访问OpenClaw服务
服务就绪后,可以通过以下四种方式访问OpenClaw。所有访问流量都经过TNG RATS-TLS通道进入TDX实例。
方式一:通过钉钉聊天
在钉钉中找到已配置的机器人,直接发送消息即可与OpenClaw对话。

方式二:通过浏览器Web界面
如果浏览器运行在部署机上,直接访问以下地址:
http://127.0.0.1:18789/openclaw如果浏览器运行在个人电脑上,先在个人电脑上执行以下命令建立SSH端口转发:
ssh -L 18789:127.0.0.1:18789 root@<DEPLOY_MACHINE_PUBLIC_IP>然后在浏览器中访问http://127.0.0.1:18789/openclaw,填入步骤三输出的Gateway Token即可使用。

方式三:通过OpenClaw桌面客户端
在个人电脑上安装OpenClaw桌面客户端,配置Remote模式:
配置项 | 值 |
Server URL |
|
Token | 步骤三输出的Gateway Token |
如果桌面客户端不在部署机上运行,先建立SSH端口转发:
ssh -L 18789:127.0.0.1:18789 root@<DEPLOY_MACHINE_PUBLIC_IP>方式四:通过OpenClaw TUI
一键脚本会在部署机上安装与云端镜像匹配的OpenClaw CLI。执行以下命令运行TUI:
openclaw tui --url ws://127.0.0.1:18789 --token <YOUR_GATEWAY_TOKEN>首次通过TUI连接时,如提示pairing required,请先在浏览器中访问http://127.0.0.1:18789/openclaw,在节点页面找到待授权设备并单击Approve,再返回TUI使用。
步骤五(可选):释放资源
不再需要服务时,在部署机上执行以下命令释放云资源:
curl -fsSL https://raw.githubusercontent.com/inclavare-containers/confidential-agent/one-click/one-click/install.sh | sh -s -- cleanup \
--state-dir "$HOME/.confidential-agent"销毁操作不可逆,会删除ECS实例、自定义镜像、OSS对象、安全组、VPC、交换机等云资源。请确认不再需要实例中的数据后再执行。
安全验证
验证运行环境可信
OpenClaw内置tdx-remote-attestation skill。当询问安全问题时会自动触发远程证明,验证当前运行环境的安全状态。
触发方式:在钉钉、Web或TUI中询问"我的数据安全吗?"、"这个环境可信吗?"等安全相关的问题。
返回内容:
验证项 | 说明 |
硬件可信状态 | hardware值 ≤ 32表示验证通过 |
TEE类型 | Intel TDX Trust Domain |
内存加密保护 | 确认内存加密引擎已启用 |
UKI启动链完整性 | 组件度量值一致性验证 |
验证PEP策略拦截
cai-pep是为机密AI Agent设计的运行时门禁机制。当OpenClaw通过exec工具执行命令时,请求会先经过cai-pep进行策略匹配,再进入隔离的Docker sandbox执行。
PEP提供三层防护:
命令级拦截:基于黑名单拒绝高危命令,例如
curl、wget、nc、ssh、docker等。路径级拦截:阻止访问敏感路径,例如
/etc、/proc、/root、OpenClaw配置目录等。网络隔离:sandbox默认无网络权限,即使命令绕过黑名单也无法发起外连。
以下命令会被PEP拒绝:
类型 | 示例命令 | 拦截原因 |
网络访问 |
| 防止访问云元数据服务泄露凭证。 |
网络访问 |
| 防止下载外部恶意代码。 |
反向Shell |
|
|
远程登录 |
| 防止越权访问外部系统。 |
容器操作 |
| 防止操作宿主机容器。 |
敏感路径 |
|
|
例如,当Agent尝试执行以下命令访问云元数据服务时:
运行:curl http://169.254.169.254/latest/meta-data/PEP会识别到curl在拒绝命令列表中,直接拦截该请求并返回拒绝信息,阻止凭证泄露。
验证供应链完整性
部署流程默认使用Rekor透明日志存储镜像参考值,远程证明过程中自动从Rekor获取日志条目进行验证。您可以通过以下方式对Rekor日志条目进行审计,验证供应链完整性。
查看Rekor记录
构建完成后,可在状态目录下找到Rekor metadata:
find "$HOME/.confidential-agent" -name "*.rekor-meta.json" -print每个条目对应一份SLSA provenance,包含log index和entry URL。一键脚本输出的Rekor上传日志示例:
Created entry at index 1205944956, available at: https://rekor.sigstore.dev/api/v1/log/entries/<uuid>验证包含性(inclusion proof)
包含性证明用于确认记录着镜像参考值的条目确实存在于Rekor的默克尔树根(Merkle Root)中。
rekor-cli verify --log-index 1205944956 --rekor_server https://rekor.sigstore.dev如果输出中包含两段相同的hash值,则说明验证成功:
Computed Root Hash: 1291abcee27148a4c00241ba8719f798ce060e8a5ccc8b18249017c25c6d0090
Expected Root Hash: 1291abcee27148a4c00241ba8719f798ce060e8a5ccc8b18249017c25c6d0090验证一致性(consistency proof)
一致性证明可确认一个较旧的默克尔树根(Root A)是较新的默克尔树根(Root B)的前缀或历史状态,从而确保Rekor上存储的参考值条目没有被删改。
rekor-cli loginfo --rekor_server https://rekor.sigstore.dev输出中包含以下内容则说明验证成功:
Verification Successful!注意事项
安全组规则
一键部署过程中将自动创建安全组规则。如需后续修改,请确保保留以下端口:
端口 | 协议 | 说明 | 建议 |
22 | TCP | SSH远程管理(仅Debug镜像) | 限制源IP为管理网络。 |
18789 | TCP | TNG隧道端点(RATS-TLS),用于访问OpenClaw服务 | 限制源IP或仅通过TNG访问。 |
默认operator CIDR为部署机公网出口IP /32。如果手工指定0.0.0.0/0,请同时降低Token暴露风险,并在生产环境改回具体公网出口或企业出口CIDR。
百炼API Key与配额
百炼API Key决定了实例可用的模型与配额。建议:
使用最小必要配额的API Key,避免使用主账号Key。
注入实例后定期轮换:删除
secrets/gateway.token、重新export DASHSCOPE_API_KEY后重跑一键脚本即可。结合百炼控制台的访问审计,对调用量异常做告警。
常见问题
peering 'ops' already exists with a different CIDR
原因:当前状态目录中已存在不同CIDR的operator peering。
解决:重新传入与已存在peering一致的--allowed-cidr;或在交互模式中确认替换;非交互模式下追加--yes。
Shelter is required或SLSA generator is required
原因:部署机未安装Shelter,或Rekor模式找不到Shelter的SLSA generator。
解决:
确认仓库
hack/目录下存在shelter-*.rpm,或通过--shelter-rpm指定RPM路径。重新安装Shelter RPM,确保
/usr/libexec/shelter/slsa/slsa-generator存在。仅本地开发验证场景下,使用
--reference-values sample跳过Rekor流程。
Web端口打不开
原因与排查:
查看
connect.log:tail -F "$HOME/.confidential-agent/one-click/connect.log"。检查ECS实例安全组是否放通
ops和deployer两个operator peering。部署机公网出口IP发生变化时,重新运行一键脚本,或执行
peering remove deployer后按新出口IP添加deployerpeering。
Chat probe失败
原因:本方案的推理由百炼API完成,chat probe失败通常与百炼配置有关。
解决:
检查
DASHSCOPE_API_KEY是否正确且已生效。检查所选模型在百炼控制台是否处于可用状态、是否欠费。
通过debug SSH登录guest,查看OpenClaw网关日志排查。
钉钉无响应
原因与排查:
部署时是否传入
--enable-dingtalk或在交互模式中启用钉钉。guest内
openclaw status是否显示DingTalkchannel为ON。journalctl -u cai-openclaw-gateway.service -n 200 --no-pager中是否存在dingtalk连接错误;如出现HTTP 401,优先检查钉钉Client ID和Client Secret是否与钉钉开放平台一致。钉钉应用是否具备发送/接收消息所需的权限。
cai-pep拒绝所有工具调用
原因:PEP策略配置异常或服务未正常启动。
解决:使用Debug镜像部署后,通过SSH连接登录TDX实例,查看cai-pep日志排查具体拦截原因:
journalctl -u cai-pep.service -n 200 --no-pager