🤖 妙趣AI

OpenClaw 多租户隔离

5点23分,隔壁租户的Agent发疯烧光了GPU配额。幸好我们做了隔离。

📌 功能介绍

多租户隔离是OpenClaw的企业级核心能力。当多个团队或客户共享同一个OpenClaw实例时,你需要确保它们之间互不干扰——就像合租房里,每个人有自己的房间、自己的钥匙、自己的冰箱格子。多租户隔离就是给每个「租户」一间独立的「房间」。

💡 妙趣提示:多租户不仅仅是「隔离」,更关键的是「配额管理」。不设配额的隔离,就像只装门不装锁——名义上分开了,但资源还是会被抢光。

🛠️ 使用方法

1. 创建租户命名空间

# 创建新租户
openclaw tenant create \
  --name "team-alpha" \
  --display-name "Alpha团队" \
  --owner "alice@example.com" \
  --labels team=alpha,env=production

# 查看租户列表
openclaw tenant list

# 获取租户详情
openclaw tenant get team-alpha

2. 资源配额配置

# quota-config.yaml
apiVersion: openclaw.io/v1
kind: TenantQuota
metadata:
  name: team-alpha-quota
  tenant: team-alpha
spec:
  compute:
    maxConcurrentSessions: 10
    maxAgentsPerSession: 5
    gpuMemoryLimit: "8GB"
    cpuLimit: "4 cores"
  
  storage:
    maxSessionAge: "30d"
    maxTotalStorage: "10GB"
    maxSnapshots: 50
  
  api:
    rateLimit:
      requestsPerMinute: 200
      tokensPerDay: 500000
    maxModelTier: "pro"  # 限制可用模型等级
  
  network:
    allowedDomains:
      - "github.com"
      - "api.openai.com"
      - "company-internal.com"
    blockedDomains:
      - "evil.com"
    maxOutboundRequests: 1000/hour

3. 数据隔离策略

# data-isolation-config.yaml
isolation:
  level: "strict"  # none | basic | strict | airgap
  
  strict:
    # 禁止跨租户数据访问
    crossTenantAccess: false
    
    # 独立存储
    storage:
      separate: true
      encryptionKey: "tenant-specific"
    
    # 独立模型上下文
    context:
      isolation: true
      noSharedPrompts: true
      
    # 日志隔离
    logs:
      separate: true
      accessPolicy: "owner-only"
  
  airgap:
    # 网络隔离
    network:
      isolated: true
      allowedCidr: ["10.0.1.0/24"]
    # 无外部API访问
    externalAccess: false

🏆 最佳实践

租户管理策略

规模 隔离级别 推荐场景
个人/小团队 basic 共享实例,基础数据隔离
部门/团队 strict 完全数据隔离+配额管理
企业/客户 airgap 网络隔离+最高安全等级
⚠️ 安全警告:「strict」隔离模式下,即使管理员也无法直接查看租户数据(需要显式提权)。这是设计如此,不是bug。如果你需要跨租户分析,请使用聚合报告API而非直接访问。

💻 代码示例

租户管理SDK

const { OpenClawAdmin } = require('@openclaw/admin-sdk');

async function setupTenant(config) {
  const admin = new OpenClawAdmin({
    apiKey: process.env.ADMIN_API_KEY
  });
  
  // 1. 创建租户
  const tenant = await admin.tenants.create({
    name: config.name,
    displayName: config.displayName,
    owner: config.owner,
    labels: config.labels
  });
  
  // 2. 设置配额
  await admin.tenants.setQuota(tenant.id, {
    compute: {
      maxConcurrentSessions: config.maxSessions,
      gpuMemoryLimit: config.gpuLimit
    },
    api: {
      rateLimit: { requestsPerMinute: config.rpm },
      maxModelTier: config.modelTier
    }
  });
  
  // 3. 配置隔离策略
  await admin.tenants.setIsolation(tenant.id, {
    level: config.isolationLevel,
    crossTenantAccess: false,
    separateStorage: true
  });
  
  // 4. 初始化默认Agent
  const agent = await admin.tenants.createAgent(tenant.id, {
    name: `${config.name}-default`,
    model: config.defaultModel,
    skills: ['web-search', 'file-ops']
  });
  
  console.log(`租户 ${config.name} 创建完成`);
  console.log(`Agent ID: ${agent.id}`);
  
  return { tenant, agent };
}

跨租户监控(管理员)

async function tenantHealthReport() {
  const admin = new OpenClawAdmin();
  const tenants = await admin.tenants.list();
  
  const report = await Promise.all(tenants.map(async (tenant) => {
    const usage = await admin.tenants.getUsage(tenant.id);
    const health = await admin.tenants.healthCheck(tenant.id);
    
    return {
      name: tenant.name,
      status: health.status,
      sessionCount: usage.activeSessions,
      tokenUsage: `${usage.tokensUsed}/${usage.tokenQuota}`,
      storageUsage: `${usage.storageUsed}/${usage.storageQuota}`,
      alerts: health.alerts
    };
  }));
  
  // 生成汇总报告
  console.table(report);
  return report;
}

🔗 相关链接

📅 更新时间:2026-05-11 | 📖 更多OpenClaw教程请访问 工具教程索引