跳到主要内容

自有品牌模式

适用场景

给员工或外部用户提供 AI 开发环境,用户无需腾讯云账号,也无需直接登录腾讯云控制台,只接触企业/平台自有域名,完全无感知腾讯云;可打通企业现有 SSO/LDAP 系统或自有账号体系,实现统一登录。支持海量用户,具备横向扩展能力,满足中大型企业及 C 端产品需求。

方案概述

本方案通过企业内部系统作为授权中间层,将云开发登录流程与自有身份系统打通,无需为每位用户创建腾讯云账号:

  • 用户使用自有账号(如工号、企业邮箱、平台账号)登录,无需腾讯云账号
  • 用户可以是企业内部员工,也可以是平台的外部用户/客户
  • 所有授权流程均在自有域名(auth.your-domain.com)下完成
  • 系统负责维护用户与云开发环境的映射关系
  • 首次登录时自动为用户创建专属云开发环境

整体架构


登录流程


配置 MCP 和 Skill

自有品牌模式下支持两种连接方式,选择后按 Tab 内的完整指引操作即可。

推荐方式。企业自建授权页面代理设备码流程,用户全程在自有域名下完成登录,无需感知腾讯云。

自定义授权页面

企业内部系统需要实现一个自定义授权页面,代理设备码授权流程:

  1. 代理设备码申请:当 AI 工具发起登录时,企业系统将设备码申请请求转发至云开发 API
  2. 改写授权链接:将云开发返回的授权链接改写为自有域名(如 https://auth.your-domain.com/authorize?code=xxx
  3. 自有认证页面:用户打开改写后的链接,使用企业/平台账号登录
  4. 环境选择与授权:登录后展示该用户可用的环境列表,用户选择后完成设备码授权
  5. 获取临时密钥:授权完成后,AI 工具通过设备码轮询获取临时密钥

首次登录自动创建环境

当用户首次登录时,企业系统应自动为其创建专属的云开发环境:

  1. 调用 CreateEnv 创建环境
  2. 在数据库中记录用户 ID 与环境 ID 的映射关系
  3. 后续登录时根据映射直接定位到用户环境

权限策略

授权服务在用户验证通过后,调用 STS GetFederationToken 签发带策略限制的临时凭证,无需创建子账号。

自有品牌模式下的权限策略结构与子账号模式一致,区别为:

  • resource: * 的 actions 已缩减为指定列表
  • tcb/tcbr 的 resource 格式中不含 ${region}

策略结构

权限策略由多组 Statement 组成:

  1. 全局允许操作:不涉及敏感环境数据的只读/辅助操作,resource*
  2. 环境限定操作:所有环境修改操作,resource 限定到指定环境的资源
全局允许操作

这些操作不暴露环境内的数据,允许对所有资源执行:

服务操作说明
camCreateRole, AttachRolePolicy, GetRoleCAM 角色管理
cdnTcbCheckResourceCDN 资源检查
scfListFunctions云函数列表查询
tcbCheckTcbService, DescribeEnvs, DescribeBillingInfo, DescribeEnvPostpayPackage 等云开发操作(含数据库)
环境限定操作

这些操作通过 resource 字段限定到指定环境,确保临时凭证只能操作指定环境:

服务资源格式说明
tcbqcs::tcb::uin/${uin}:env/${envId}云开发环境级操作(无 region)
tcbrqcs::tcbr::uin/${uin}:env/${envId}云托管环境级操作(无 region)
lowcodeqcs::lowcode::uin/${uin}:env/${envId}微搭环境级操作
scfqcs::scf:${region}:uin/${uin}:namespace/${envId}/function/*云函数(命名空间 = 环境ID)
clsqcs::cls::uin/${uin}:topic/${topicId}日志服务(限定到日志主题)
cosqcs::cos:${region}:uid/${appId}:${bucket}/*对象存储(限定到环境对应的存储桶)
点击查看完整策略模板 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": ["cls:*"],
"effect": "allow",
"resource": ["qcs::cls::uin/${uin}:topic/${topicId}"]
},
{
"action": ["scf:*"],
"effect": "allow",
"resource": ["qcs::scf:${region}:uin/${uin}:namespace/${envId}/function/*"]
},
{
"action": ["cos:*"],
"effect": "allow",
"resource": [
"qcs::cos:${region}:uid/${appId}:${cosBucketId}/*",
"qcs::cos:${region}:uid/${appId}:${staticBucketId}/*"
]
}
],
"version": "2.0"
}

占位符说明

占位符含义获取方式
${uin}主账号 UIN腾讯云控制台 账号信息 中的账号 UIN
${appId}主账号 AppIdDescribeEnvs 返回的 EnvList[0].AppId,或从存储桶名称末段提取
${envId}云开发环境 IDDescribeEnvs 返回的 EnvList[0].EnvId
${topicId}CLS 日志主题 IDDescribeEnvs 返回的 EnvList[0].LogServices[0].TopicId
${cosBucketId}云存储桶名称DescribeEnvs 返回的 EnvList[0].Storages[0].Bucket
${staticBucketId}静态托管存储桶名称DescribeEnvs 返回的 EnvList[0].StaticStorages[0].Bucket

tcbtcbr 的资源格式中不含 ${region},适用于自有品牌模式下的临时凭证场景。

点击查看 Node.js 签发临时凭证代码示例
const tencentcloud = require("tencentcloud-sdk-nodejs");
const StsClient = tencentcloud.sts.v20180813.Client;

const stsClient = new StsClient({
credential: {
secretId: process.env.TENCENTCLOUD_SECRETID,
secretKey: process.env.TENCENTCLOUD_SECRETKEY,
},
region: "ap-shanghai",
profile: { httpProfile: { endpoint: "sts.tencentcloudapi.com" } },
});

// 策略模板(使用上方「策略模板」章节的 JSON)
const POLICY_TEMPLATE = `{"statement":[...],"version":"2.0"}`;

async function generatePolicyForUser(uin, envId, appId, topicId, cosBucketId, staticBucketId) {
// 替换占位符
const policyJson = POLICY_TEMPLATE
.replace(/\$\{uin\}/g, uin)
.replace(/\$\{appId\}/g, String(appId))
.replace(/\$\{envId\}/g, envId)
.replace(/\$\{topicId\}/g, topicId || "")
.replace(/\$\{cosBucketId\}/g, cosBucketId || "")
.replace(/\$\{staticBucketId\}/g, staticBucketId || "");

return JSON.parse(policyJson);
}

// 签发临时凭证(在自有品牌模式的授权服务中调用)
async function issueTemporaryCredentials(uin, envId, appId, topicId, cosBucketId, staticBucketId, userId) {
const policy = await generatePolicyForUser(uin, envId, appId, topicId, cosBucketId, staticBucketId);

const { Credentials } = await stsClient.GetFederationToken({
Name: `user-${userId}`,
Policy: JSON.stringify(policy),
DurationSeconds: 1800, // 30 分钟,可按需调整
});

return Credentials; // { TmpSecretId, TmpSecretKey, Token }
}

相关 API 参考

API用途文档
GetUserAppId获取主账号 UIN 和 AppId账号相关接口
DescribeEnvs查询云开发环境详情(存储桶、日志主题等)云开发 API 概览
GetFederationTokenSTS 签发临时凭证(策略内联传入,无需创建子账号)STS 接口 GetFederationToken

完整的参考实现见 cloudbase-cli-auth-endpoint,对接指南见 企业自建设备码授权服务对接

MCP 配置

TCB_AUTH_OAUTH_ENDPOINT

设置自定义授权 endpoint 后,MCP 的设备码授权流程会跳转到你指定的地址(如 https://auth.your-domain.com),而非腾讯云默认授权页。不设置则使用腾讯云默认授权页。

Client

配置你的 AI 工具以连接 CloudBase 能力 支持本地与托管两种连接方式,详见 连接方式

步骤 1:安装 / 配置 CloudBase

使用项目模板(推荐) - 模板已内置 MCP 配置和 AI 规则查看模板

一键安装:

Add to Cursor

或手动配置:

将以下配置添加到项目目录下的 .cursor/mcp.json:

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}
需要帮助?查看 Cursor 文档

步骤 2:和 AI 对话

在 AI 对话中依次输入以下内容:

prompt
安装 CloudBase Skills:命令 npx skills add tencentcloudbase/cloudbase-skills -y
使用 CloudBase Skills: 使用云开发连接我的环境,授权 endpoint 为 https://auth.your-domain.com

大规模 / C 端场景(按量计费)

针对 C 端用户或大规模用户场景,支持无需按用户收取 ¥19.9/月费用,通过环境隔离 + 按量结算,成本极低。

适用场景
  • C 端产品,用户量较大(数千至数百万)
  • 不想为每个用户支付固定月费
  • 希望通过用量控制成本

核心优势

  • 无固定费用:无需为每个用户支付 ¥19.9/月,按实际用量结算
  • 环境隔离:每个用户仍有独立的云开发环境,资源完全隔离
  • 成本可控:按实际资源使用量(存储、计算、流量)计费,闲置无费用
  • 弹性扩展:用户量增长不会带来固定成本线性增长

开通方式

此模式需要联系云开发产品团队开通。请联系您的客户经理或通过 云开发控制台 提交工单申请。


快速构建 AI 开发平台

如果你希望构建类似 LovableBolt.newVercel v0 这样的 AI 开发平台,可以使用我们的开源项目快速搭建:

云开发 AI 开发平台(开源) — 基于云开发,快速构建支持自然语言生成应用的 AI 开发平台。


各方职责

角色职责
企业内部系统用户身份认证、维护用户↔环境映射、代理设备码申请并改写授权链接为自有域名、首次登录时为用户创建环境、配置权限策略
Agent作为用户操作入口,代替用户发起登录流程,展示授权链接和登录结果
腾讯云云开发提供环境创建、设备码授权、临时密钥下发等能力

验证隔离效果

配置完成后,验证隔离是否生效:

  1. 使用临时密钥调用 DescribeEnvs,确认只能看到该用户对应的环境
  2. 尝试访问其他环境的资源,应返回权限不足错误
  3. 临时密钥过期后,确认无法继续操作云资源