自有品牌模式
给员工或外部用户提供 AI 开发环境,用户无需腾讯云账号,也无需直接登录腾讯云控制台,只接触企业/平台自有域名,完全无感知腾讯云;可打通企业现有 SSO/LDAP 系统或自有账号体系,实现统一登录。支持海量用户, 具备横向扩展能力,满足中大型企业及 C 端产品需求。
本方案解决的核心问题:你的用户只需使用你自己的产品,无需知道底层使用了腾讯云,同时每个用户拥有完全隔离的云开发资源。你的平台负责统一管理环境和密钥,用户零感知。
接入流程
自有品牌模式的接入分为两步:
第一步:开通和管理云开发环境
使用腾讯云 API 为你的用户批量创建、管理云开发环境。首次登录时自动创建用户专属环境,并维护用户 ID 与环境 ID 的映射关系。
→ 详见 环境与资源管理 API
第二步:MCP / Skill 接入 Agent
为用户的每个环境创建 API Key,并将 CLOUDBASE_API_KEY + CLOUDBASE_ENV_ID 配置到 Agent 工具的 MCP 中,用户即可在 Agent 中直接使用云开发能力,无需经历任何登录流程。每个 API Key 只能访问其绑定的环境,用户之间的资源天然隔离,互不可见。
→ 详见下方"配置 MCP 和 Skill"章节
方案概述
本方案中,企业/平台负责统一管理用户与云开发环境的对应关系,为每个用户分配专属的隔离环境,并通过 API Key 或临时凭证将访问权限安全地下发给用户的 Agent 工具:
- 用户使用自有账号(工号、企业邮箱、平台账号等)登录,无需腾讯云账号
- 用户可以是企业内部员工,也可以是平台的 C 端用户/客户
- 每个用户拥有独立的云开发环境,数据库、云函数、存储完全隔离,用户之间互不可见
- 平台通过 API 统一完成环境创建、API Key 签发和生命周期管理
- 用户的 Agent 工具携带 API Key 直接访问专属环境,无需经历任何腾讯云登录流程
整体架构
隔离保证:每个 API Key 由云开发平台绑定到指定的环境 ID,在服务端强制校验,即使 API Key 泄露也只能访问该用户自己的环境,无法横向访问其他用户的数据。
接入方式说明
自有品牌模式支持三种 MCP 凭证方式,推荐优先使用 API Key:
| 方式 | 适用场景 | 用户感知 | 配置复杂度 |
|---|---|---|---|
| API Key(推荐) | 平台统一下发,用户无需任何登录操作 | 零感知 | 最低 |
| 自定义授权码 | 用户需要通过自有域名完成一次性授权登录 | 用户点击自有域名链接 | 中 |
| 临时密钥 | 平台服务端控制凭证生命周期,定期刷新 | 零感知 | 中 |
配置 MCP 和 Skill
自有品牌模式下支持三种连接方式,推荐优先使用 API Key,配置最简单,无需任何登录流程。
- API Key(推荐)
- 自定义授权码
- 临时密钥
最简单的接入方式。平台为每个用户环境创建一个 API Key,注入到 MCP 配置中,用户无需经历任何登录或授权流程。
创建 API Key
调用腾讯云 CreateApiKey 接口,为用户环境创建 api_key 类型密钥:
// 示例:为用户环境创建 API Key
const result = await tcbClient.CreateApiKey({
EnvId: userEnvId, // 用户的云开发环境 ID
KeyType: "api_key", // 服务端管理员级密钥
KeyName: `user-${userId}`,
// ExpireIn: 7776000 // 可选:有效期(秒),不填则不过期
});
// result.ApiKey 为密钥明文,仅返回一次,请妥善保存
api_key 拥有该环境的完整管理员权限,仅用于服务端或 MCP 配置,不得下发到客户端或写入代码仓库。建议定期轮换,单环境最多创建 5 个。
也可在控制台手动创建:云开发控制台 → 环境 → API Key 管理
MCP 配置
将 CLOUDBASE_API_KEY 和 CLOUDBASE_ENV_ID 配置到 Agent 工具的 MCP 环境变量中:
配置你的 AI 工具以连接 CloudBase 能力 支持本地与托管两种连接方式,详见 连接方式。
步骤 1:安装 / 配置 CloudBase
一键安装:
或手动配置:
将以下配置添加到项目目录下的 .cursor/mcp.json:
1{2 "mcpServers": {3 "cloudbase": {4 "command": "npx",5 "args": [6 "@cloudbase/cloudbase-mcp@latest"7 ],8 "env": {9 "INTEGRATION_IDE": "Cursor",10 "CLOUDBASE_API_KEY": "<用户环境的 API Key>",11 "CLOUDBASE_ENV_ID": "<用户的环境 ID>"12 }13 }14 }15}步骤 2:和 AI 对话
在 AI 对话中依次输入以下内容:
安装 CloudBase Skills:命令 npx skills add tencentcloudbase/cloudbase-skills -y使用 CloudBase Skills: 使用云开发操作环境,已通过 API Key 配置CLOUDBASE_API_KEY 优先级最高,配置后无需 TENCENTCLOUD_* 密钥,也无需设备码登录。
推荐方式。企业自建授权页面代理设备码流程,用户全程在自有域名下完成登录,无需感知腾讯云。
自定义授权页面
企业内部系统需要实现一个自定义授权页面,代理设备码授权流程:
- 代理设备码申请:当 AI 工具发起登录时,企业系统将设备码申请请求转发至云开发 API
- 改写授权链接:将云开发返回的授权链接改写为自有域名(如
https://auth.your-domain.com/authorize?code=xxx) - 自有认证页面:用户打开改写后的链接,使用企业/平台账号登录
- 环境选择与授权:登录后展示该用户可用的环境列表,用户选择后完成设备码授权
- 获取临时密钥:授权完成后,AI 工具通过设备码轮询获取临时密钥
首次登录自动创建环境
当用户首次登录时,企业系统应自动为其创建专属的云开发环境:
- 调用
CreateEnv创建环境 - 在数据库中记录用户 ID 与环境 ID 的映射关系
- 后续登录时根据映射直接定位到用户环境
权限策略
授权服务在用户验证通过后,调用 STS GetFederationToken 签发带策略限制的临时凭证,无需创建子账号。
点击查看完整策略模板 JSON(自有品牌模式)
{
"statement": [
{
"action": [
"cam:CreateRole",
"cam:AttachRolePolicy",
"cam:GetRole",
"cdn:TcbCheckResource",
"scf:ListFunctions",
"tcb:CheckTcbService",
"tcb:DescribeEnvs",
"tcb:DescribeBillingInfo",
"tcb:DescribeEnvPostpayPackage",
"tcb:DeleteTable",
"tcb:CreateTable",
"tcb:DescribeTable",
"tcb:DescribeTables",
"tcb:ListTables",
"tcb:RunCommands",
"tcb:UpdateTable",
"tcb:UpdateItem",
"tcb:QueryRecords",
"tcb:PutItem",
"tcb:ModifyNameSpace",
"tcb:DeleteItem",
"tcb:CountRecords"
],
"effect": "allow",
"resource": ["*"]
},
{
"action": ["tcb:*"],
"effect": "allow",
"resource": ["qcs::tcb::uin/${uin}:env/${envId}"]
},
{
"action": ["tcbr:*"],
"effect": "allow",
"resource": ["qcs::tcbr::uin/${uin}:env/${envId}"]
},
{
"action": ["lowcode:*"],
"effect": "allow",
"resource": ["qcs::lowcode::uin/${uin}:env/${envId}"]
},
{
"action": ["scf:*"],
"effect": "allow",
"resource": [
"qcs::scf:${region}:uin/${uin}:namespace/${envId}",
"qcs::scf:${region}:uin/${uin}:namespace/${envId}/function/*",
"qcs::scf:${region}:uin/${uin}:namespace/${envId}/layer/*",
"qcs::cls:${region}:uin/${uin}:logset/${logsetId}",
"qcs::cls:${region}:uin/${uin}:topic/${topicId}"
]
},
{
"action": ["cls:*"],
"effect": "allow",
"resource": [
"qcs::cls:${region}:uin/${uin}:logset/${logsetId}",
"qcs::cls:${region}:uin/${uin}:topic/${topicId}"
]
},
{
"action": ["cos:*"],
"effect": "allow",
"resource": [
"qcs::cos:${region}:uid/${appId}:${cosBucketId}/*",
"qcs::cos:${region}:uid/${appId}:${staticBucketId}/*"
]
}
],
"version": "2.0"
}
占位符说明
| 占位符 | 含义 | 获取方式 |
|---|---|---|
${region} | 环境所在地域 | DescribeEnvs 返回的 EnvList[0].Region |
${uin} | 主账号 UIN | 使用主账号密钥调用 GetUserAppId 返回的 Uin |
${appId} | 主账号 AppId | DescribeEnvs 返回的 EnvList[0].AppId,或从存储桶名称末段提取 |
${envId} | 云开发环境 ID | DescribeEnvs 返回的 EnvList[0].EnvId |
${topicId} | CLS 日志主题 ID | DescribeEnvs 返回的 EnvList[0].LogServices[0].TopicId |
${logsetId} | CLS 日志集 ID | DescribeEnvs 返回的 EnvList[0].LogServices[0].LogsetId |
${cosBucketId} | 云存储桶名称 | DescribeEnvs 返回的 EnvList[0].Storages[0].Bucket |
${staticBucketId} | 静态托管存储桶名称 | DescribeEnvs 返回的 EnvList[0].StaticStorages[0].Bucket |
tcb和tcbr的资源格式中不含${region},适用于自有品牌模式下的临时凭证场景。
点击查看 Node.js 签发临时凭证代码示例
// 安装依赖:npm install tencentcloud-sdk-nodejs
// 使用说明:
// 1. 将上方「策略模板」章节的 JSON 内容保存为 policy-template.json
// 2. 设置环境变量:TENCENTCLOUD_SECRETID, TENCENTCLOUD_SECRETKEY
// 3. 在授权服务中调用 issueTemporaryCredentials(envId, userId)
const tencentcloud = require("tencentcloud-sdk-nodejs");
const fs = require("fs");
const path = require("path");
const AccountClient = tencentcloud.account.v20190119.Client;
const TcbClient = tencentcloud.tcb.v20180608.Client;
const StsClient = tencentcloud.sts.v20180813.Client;
const clientConfig = {
credential: {
secretId: process.env.TENCENTCLOUD_SECRETID,
secretKey: process.env.TENCENTCLOUD_SECRETKEY,
},
region: "ap-shanghai",
};
const POLICY_TEMPLATE = fs.readFileSync(
path.join(__dirname, "policy-template.json"),
"utf8"
);
async function getPolicyVars(envId) {
const accountClient = new AccountClient(clientConfig);
const tcbClient = new TcbClient(clientConfig);
// 授权服务使用主账号密钥调用时,Uin 即策略里的主账号 UIN。
const [{ Uin }, { EnvList }] = await Promise.all([
accountClient.GetUserAppId({}),
tcbClient.DescribeEnvs({ EnvId: envId }),
]);
const env = EnvList[0];
if (!env) {
throw new Error(`未查询到云开发环境 ${envId}`);
}
return {
region: env.Region,
uin: Uin,
appId: String(env.AppId),
envId: env.EnvId,
logsetId: env.LogServices?.[0]?.LogsetId || "",
topicId: env.LogServices?.[0]?.TopicId || "",
cosBucketId: env.Storages?.[0]?.Bucket || "",
staticBucketId: env.StaticStorages?.[0]?.Bucket || "",
};
}
async function generatePolicy(envId) {
const vars = await getPolicyVars(envId);
const policyJson = POLICY_TEMPLATE.replace(
/\$\{(\w+)\}/g,
(_, name) => vars[name] || ""
);
return JSON.parse(policyJson);
}
async function issueTemporaryCredentials(envId, userId) {
const stsClient = new StsClient({
...clientConfig,
profile: { httpProfile: { endpoint: "sts.tencentcloudapi.com" } },
});
const policy = await generatePolicy(envId);
const { Credentials } = await stsClient.GetFederationToken({
Name: `user-${userId}`,
Policy: JSON.stringify(policy),
DurationSeconds: 1800, // 30 分钟,可按需调整
});
return Credentials; // { TmpSecretId, TmpSecretKey, Token }
}
module.exports = { issueTemporaryCredentials };
相关 API 参考
| API | 用途 | 文档 |
|---|---|---|
GetUserAppId | 获取主账号 UIN 和 AppId | 账号相关接口 |
DescribeEnvs | 查询云开发环境详情(存储桶、日志主题等) | 云开发 API 概览 |
GetFederationToken | STS 签发临时凭证(策略内联传入,无需创建子账号) | STS 接口 GetFederationToken |
完 整的参考实现见 cloudbase-cli-auth-endpoint,对接指南见 企业自建设备码授权服务对接。
MCP 配置
设置自定义授权 endpoint 后,MCP 的设备码授权流程会跳转到你指定的地址(如 https://auth.your-domain.com),而非腾讯云默认授权页。不设置则使用腾讯云默认授权页。
配置你的 AI 工具以连接 CloudBase 能力 支持本地与托管两种连接方式,详见 连接方式。
步骤 1:安装 / 配置 CloudBase
一键安装:
或手动配置:
将以下配置添加到项目目录下的 .cursor/mcp.json:
1{2 "mcpServers": {3 "cloudbase": {4 "command": "npx",5 "args": [6 "@cloudbase/cloudbase-mcp@latest"7 ],8 "env": {9 "INTEGRATION_IDE": "Cursor",10 "TCB_AUTH_OAUTH_ENDPOINT": "<自定义授权 endpoint,如 https://auth.your-domain.com>"11 }12 }13 }14}步骤 2:和 AI 对话
在 AI 对话中依次输入以下内容:
安装 CloudBase Skills:命令 npx skills add tencentcloudbase/cloudbase-skills -y使用 CloudBase Skills: 使用云开发连接我的环境,授权 endpoint 为 https://auth.your-domain.com通过腾讯云 STS 的 GetFederationToken 接口签出带策略限制的临时密钥,适合需要服务端控制凭证生命周期的场景。
权限策略
企业系统调用 GetFederationToken,将策略以内联方式传入,签发只能访问指定环境的临时凭证:
点击查看内联策略代码示例
// 将上方签发临时凭证示例保存为 issue-temporary-credentials.js 后复用。
const { issueTemporaryCredentials } = require("./issue-temporary-credentials");
async function getMcpCredentials(envId, userId) {
// envId 来自你的「用户 ID ↔ 云开发环境 ID」映射关系。
const credentials = await issueTemporaryCredentials(envId, userId);
// credentials.TmpSecretId / TmpSecretKey / Token 配置到 MCP。
return credentials;
}
MCP 配置
配置你的 AI 工具以连接 CloudBase 能力 支持本地与托管两种连接方式,详见 连接方式。
步骤 1:安装 / 配置 CloudBase
一键安装:
或手动配置:
将以下配置添加到项目目录下的 .cursor/mcp.json:
1{2 "mcpServers": {3 "cloudbase": {4 "command": "npx",5 "args": [6 "@cloudbase/cloudbase-mcp@latest"7 ],8 "env": {9 "INTEGRATION_IDE": "Cursor",10 "CLOUDBASE_ENV_ID": "<用户的环境 ID>",11 "TENCENTCLOUD_SECRETID": "<临时 SecretId>",12 "TENCENTCLOUD_SECRETKEY": "<临时 SecretKey>",13 "TENCENTCLOUD_SESSIONTOKEN": "<临时 SessionToken>"14 }15 }16 }17}步骤 2:和 AI 对话
在 AI 对话中依次输入以下内容:
安装 CloudBase Skills:命令 npx skills add tencentcloudbase/cloudbase-skills -y使用 CloudBase Skills: 使用云开发操作环境,已通过 MCP 配置临时密钥临时密钥有有效期(默认 30 分钟,通过 DurationSeconds 配置),过期后需要重新签发。
大规模 / C 端场景(按量计费)
针对 C 端用户或大规模用户场景,支持无固定费用,通过环境隔离 + 按量结算,成本极低。平台会为每个用户预置少量免费资源额度,超出部分按实际使用量计费,用量越大单价越低。
- C 端产品,用户量较大(数千至数百万)
- 不想为每个用户支付固定月费
- 希望通过用量控制成本
核心优势
- 单环境成本极低:通过环境隔离 + 按量结算,成本极低
- 环境隔离:每个用户仍有独立的云开发环境,资源完全隔离
- 成本可控:按实际资源使用量(存储 、计算、流量)计费,闲置无费用
- 弹性扩展:用户量增长不会带来固定成本线性增长
开通方式
此模式需要联系云开发产品团队开通。请联系您的客户经理或通过 云开发控制台 提交工单申请。
快速构建 AI 开发平台
如果你希望构建类似 Lovable、Bolt.new、Vercel v0 这样的 AI 开发平台,可以使用我们的开源项目快速搭建:
云开发 AI 开发平台(开源) — 基于云开发,快速构建支持自然语言生成应用的 AI 开发平台。
各方职责
| 角色 | 职责 |
|---|---|
| 企业 / 平台 | 用户身份认证、为用户创建云开发环境、维护用户↔环境映射、签发 API Key 或临时凭证并下发给用户的 Agent 工具 |
| Agent(用户侧) | 携带平台下发的凭证(API Key / 临时密钥)访问用户专属的云开发环境,执行开发任务 |
| 腾讯云云开发 | 提供环境隔离能力 、API Key 权限校验、环境创建与资源管理等基础设施 |
验证隔离效果
配置完成后,验证隔离是否生效:
- 使用用户 A 的 API Key 调用
DescribeEnvs,确认只能看到用户 A 对应的环境 - 尝试用用户 A 的凭证访问用户 B 的环境资源,应返回权限不足错误
- 在 MCP 中操作云资源,确认只能操作该用户自己环境内的数据库、云函数和存储