mholovetskyi/openclawenterprise
GitHub: mholovetskyi/openclawenterprise
OpenClaw Enterprise 是面向企业的零信任AI代理平台,通过完善的安全、合规与可观测性能力,解决通用AI工具在生产环境中缺乏审计、管控与集成的问题。
Stars: 30 | Forks: 9
# 🦞 OpenClaw 企业版
│
│ ④ Configurable message truncation (32 KB default) │
└────────────────────────┬────────────────────────────┘
│
┌──────────────────────┐ ┌────────────────────────▼────────────────────────────┐ ┌──────────────────────┐
│ ENTERPRISE IAM │ │ GATEWAY │ │ ENTERPRISE SECRETS │
│ │◄─┤ WebSocket control plane · HTTP API · REST compat ├─►│ │
│ OIDC/SSO (PKCE) │ │ bind: loopback (default) — 0.0.0.0 NEVER silent │ │ AES-256-GCM file │
│ MFA/TOTP (RFC 6238) │ │ auth: jwt | token | password | none │ │ HashiCorp Vault │
│ JWT RS256/HS256 │ │ /metrics /healthz /livez /readyz /startupz │ │ AWS Secrets Manager │
│ API keys (oc_...) │ └────────────────────────┬────────────────────────────┘ │ GCP Secret Manager │
│ RBAC (5 built-in) │ │ │ Azure Key Vault │
│ SQLite persistent │ ┌────────────────────────▼────────────────────────────┐ └──────────────────────┘
│ Token revocation │ ┌──────────────────────┐
│ IP allowlisting │ │ SIGNED CONTAINERS │
└──────────────────────┘ │ │
│ cosign keyless │
│ syft SBOM (SPDX) │
│ Trivy vuln scan │
└──────────────────────┘
└──────────────────────┘ │ AGENT RUNTIME │
│ │
┌──────────────────────┐ │ ┌─────────────┐ ┌──────────────────────────────┐ │ ┌──────────────────────┐
│ TAMPER-EVIDENT │ │ │ Tool call │ │ GUARDRAIL ENGINE │ │ │ PROMETHEUS METRICS │
│ AUDIT LOG │ │ │ hook │◄─┤ ① Credential harvest │ │ │ │
│ │◄─┤ │ │ │ ② Reverse shell patterns │ │ │ gateway_connections │
│ SHA-256 hash chain │ │ └─────────────┘ │ ③ Mass delete (rm -rf /) │ │ │ agent_runs_total │
│ ULID IDs │ │ │ ④ SSN / credit card PII │ │ │ auth_failures_total │
│ SQLite WAL │ │ ┌─────────────┐ │ ⑤ Custom pluggable rules │ │ │ guardrail_blocks │
│ PostgreSQL backend │ │ │ Skills │ └──────────────────────────────┘ │ │ skill_invocations │
│ SIEM/Syslog (RFC │ │ │ (Ed25519 │ │ │ audit_events_total │
│ 5424) · Webhook │ │ │ signed) │ ┌──────────────────────────────┐ │ │ /metrics endpoint │
│ GDPR export+erase │ │ │ │ │ ENTERPRISE SAST │ │ │ Grafana dashboards │
│ Audit events: │ │ │ SAST scan │ │ 14 rules · CWE/OWASP tags │ │ └──────────────────────┘
│ auth.login │ │ │ before │ │ Risk score 0–100 │ │
│ guardrail.block │ │ │ install │ │ approve / review / reject │ │ ┌──────────────────────┐
└──────────────────────┘ │ └─────────────┘ └──────────────────────────────┘ │ │ MULTI-TENANCY │
└────────────────────────────────────────────────────┘ │ │
│ AsyncLocalStorage │
┌────────────────────────────────────────────────────┐ │ Per-tenant limits │
│ KUBERNETES (Helm chart) │ │ Zero-boilerplate │
│ HPA · PDB · NetworkPolicy · ServiceMonitor │ │ propagation │
│ Rolling updates · Non-root · ReadOnlyRootFS │ └──────────────────────┘
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ NVIDIA AI INFRASTRUCTURE │
│ │
│ ┌──────────────┐ ┌─────────────────────────────┐ │ ┌──────────────────────┐
│ │ NIM Provider │ │ NIM Container (sidecar) │ │ │ GPU MONITORING │
│ │ │ │ Nemotron 3 Nano/Super │ │ │ │
│ │ Hosted NIM │ │ localhost:8000/v1 │ │ │ nvidia-smi polling │
│ │ or sidecar │ │ GPU-accelerated inference │ │ │ Prometheus gauges │
│ └──────────────┘ └─────────────────────────────┘ │ │ Threshold alerts │
│ │ └──────────────────────┘
│ Guardrails: thinking budget · cost guard · RBAC │
└────────────────────────────────────────────────────┘
```
## 零信任网关
网关是 OpenClaw 的核心。在原始版本中,它会在多个回退路径中静默绑定到 `0.0.0.0`。企业版 OpenClaw 强制执行严格策略:
**默认:仅回环。** 网关默认绑定到 `127.0.0.1`,除非你显式配置。否则不会发生意外网络暴露。
**明确警告。** 任何非回环绑定都会向 stderr 与启动日志输出带边框的醒目警告,列出确切的地址与端口。你不会错过它。
**`dangerouslyBindAllInterfaces` 必需。** LAN 模式、Tailscale 与自定义主机配置必须显式确认。静默回退已不存在。
**认证模式警告。** 若 `gateway.auth.mode: none` 与非回环绑定同时设置,会触发额外警告。在互联网上无认证运行仍然可能,但不会意外发生。
```
gateway:
bind: loopback # Default — only 127.0.0.1:port is reachable
# bind: lan # ⚠ ALL interfaces (0.0.0.0) — explicit warning emitted
# bind: tailnet # Tailscale IP only — recommended for remote access
# bind: custom
# host: 10.0.0.5 # Specific IP — warning if non-loopback
port: 3284
auth:
mode:
jwt # jwt | token | password | none
# ⚠ 'none' on non-loopback emits security warning
```
**TLS。** 应在入口层(nginx、Caddy、ALB)进行 TLS 终止。Helm 图表默认配置 cert-manager + Let's Encrypt。WebSocket 连接在 TLS 激活时自动使用 `wss://`。
## 密钥管理
原始 OpenClaw 将每个 API 密钥、OAuth 令牌与 Webhook 密钥存储在 `~/.openclaw/credentials` —— 一个世界可读的明文 JSON 文件。企业模式完全替换此方案。
### 工作原理
每个密钥均以加密形式存储。主密钥保存在 OS 密钥链中,永不明文存在于磁盘。配置中的密钥引用采用 URI 语法 —— 实际值在运行时解析:
```
# 而不是:anthropicApiKey: "sk-ant-abc123"
# 使用密钥引用:
anthropicApiKey: env://ANTHROPIC_API_KEY # container env var
anthropicApiKey: vault://secret/openclaw/keys#anthropic
anthropicApiKey: aws-sm://openclaw/anthropic-key
anthropicApiKey: gcp-sm://projects/my-proj/secrets/anthropic
anthropicApiKey: azure-kv://anthropic-api-key
```
### 加密文件后端(默认)
适用于本地与单服务器部署。使用 **AES-256-GCM**,32 字节随机密钥保存在:
- **macOS**:钥匙串(`security find-generic-password -s openclaw-master-key`)
- **Linux**:`~/.openclaw/.master-key`(权限 `0600`)
- **Windows**:`~/.openclaw/.master-key`(DPAPI 集成路线图)
- **容器**:`OPENCLAW_MASTER_KEY=` 环境变量
```
enterprise:
secrets:
backend: file
filePath: ~/.openclaw/secrets.enc # optional override
```
加密信封格式:`version(1B) | iv(12B) | auth-tag(16B) | ciphertext(nB)`。认证标签在解密前检测篡改。
**遗留迁移。** 首次启动企业版时,`~/.openclaw/credentials` 将被自动读取,每个密钥加密后存入新后端,原文件重命名为 `.credentials.migrated`。迁移非破坏性——原文件在确认前不会被删除。
### HashiCorp Vault
面向团队的工业级密钥管理。支持 KV v2、AppRole 认证与 Kubernetes 认证(用于集群内 Pod)。
```
enterprise:
secrets:
backend: vault
vault:
address: https://vault.example.com
authMethod: kubernetes # token | approle | kubernetes
role: openclaw
mount: secret # KV v2 mount path
prefix: openclaw/ # key namespace prefix
namespace: admin # Vault Enterprise namespace (optional)
```
**AppRole**(用于 CI/CD 流水线):
```
vault:
appRole:
roleId:
secretId: env://VAULT_SECRET_ID # secret never in config file
```
**Kubernetes**(用于集群内 Pod —— 无需凭证管理):
```
vault:
authMethod: kubernetes
k8sAuth:
role: openclaw
serviceAccountTokenPath: /var/run/secrets/kubernetes.io/serviceaccount/token
```
### AWS Secrets Manager
使用标准 AWS SDK 凭证链 —— IAM 角色、ECS 任务角色、EC2 实例配置文件、环境变量。EC2/ECS/Lambda 部署无需在配置中放置凭证。
```
enterprise:
secrets:
backend: aws-sm
awsSm:
region: us-east-1
prefix: openclaw/
```
```
npm install # @aws-sdk/client-secrets-manager auto-installed
```
### GCP Secret Manager
使用应用默认凭证。在 GKE 上,Workload Identity 意味着无需凭证管理。
```
enterprise:
secrets:
backend: gcp-sm
gcpSm:
projectId: my-gcp-project
prefix: openclaw-
```
```
npm install @google-cloud/secret-manager
gcloud auth application-default login # for local dev
```
### Azure Key Vault
使用 `DefaultAzureCredential` —— 自动选择托管身份、VS Code 身份、Azure CLI 或环境变量。
```
enterprise:
secrets:
backend: azure-kv
azureKv:
vaultUrl: https://my-vault.vault.azure.net
prefix: openclaw-
```
```
npm install @azure/keyvault-secrets @azure/identity
az login # for local dev
```
## IAM / RBAC
原始 OpenClaw 只有一个认证层级:你要么拥有网关令牌,要么没有。每个认证客户端拥有完整操作员权限。企业版引入适当的身份标识与最小权限访问控制。
### 身份模型
```
User ──── has roles ──► Role ──── has permissions ──► Resource.Action
│
└── member of ──────► Group ──── has roles
│
AgentIdentity ─────────────────────── ▼
(service account) wildcard support:
"agents.*" ← all agent perms
"skills.install" ← exact
"*" ← super-admin only
```
### 内置角色
| 角色 | 权限 |
| ---- | ---- |
| `super-admin` | `*` —— 全部权限 |
| `admin` | 除用户/角色管理外的所有资源 |
| `operator` | 代理、技能、通道、会话 —— 无配置写入 |
| `viewer` | 所有资源的只读访问 |
| `agent-service` | 仅限代理执行的服务账户范围 |
可定义自定义角色并设置任意权限组合。角色可继承其他角色。循环将被检测并拒绝。
### JWT 认证
JWT 是多用户与企业部署的推荐认证模式。首次启动且 `algorithm: RS256` 时,OpenClaw **自动生成 RSA-2048 密钥对**并写入 `~/.openclaw/enterprise/iam/`。你无需手动管理密钥。
```
enterprise:
iam:
enabled: true
jwt:
algorithm: RS256 # RS256 (default) or HS256
expiresIn: 15m # access token TTL
refreshExpiresIn: 7d # refresh token TTL
issuer: openclaw # JWT iss claim
```
令牌生命周期:
- **访问令牌**:15 分钟,签名 RS256,包含 `sub`(用户/代理 ID)、`roles`、`scopes`
- **刷新令牌**:7 天,单次使用,刷新时轮换
- **API 密钥**:`oc_` 格式,SHA-256 哈希存储(原始密钥永不写入磁盘),生成时仅显示一次
### 向后兼容
来自社区版的 `operator.*` 作用域令牌仍可工作。它们会通过 `LEGACY_SCOPE_TO_PERMISSIONS` 适配器自动映射为 RBAC `operator` 角色权限 —— 无需迁移。
### OIDC / SSO
OpenClaw 企业版提供完整的 OpenID Connect(OIDC)集成,支持任何合规 IdP —— Okta、Azure AD / Entra ID、Google Workspace、Auth0、Keycloak、Palantir Foundry。流程使用 **PKCE**(代码交换证明密钥)与服务端状态验证。无需外部 OIDC库 —— 纯 Node.js 实现。
```
enterprise:
auth:
oidc:
discoveryUrl: https://your-org.okta.com/.well-known/openid-configuration
clientId: 0oa...
clientSecret: env://OIDC_CLIENT_SECRET # never inline
redirectUri: https://openclaw.example.com/auth/oidc/callback
scopes: [openid, email, profile, groups]
groupsClaim: groups # JWT claim that contains IdP groups
roleMap:
Engineering: operator # IdP group name → OpenClaw RBAC role ID
Admins: admin
SRE: admin
defaultRole: viewer # role for users not matched by roleMap
```
**自动注册的端点:**
| 端点 | 描述 |
| ---- | ---- |
| `GET /auth/oidc/login` | 重定向至 IdP 授权端点并携带 PKCE 挑战 |
| `GET /auth/oidc/callback` | 交换代码、验证 ID 令牌、签发 OpenClaw JWT |
**工作原理:**
1. `/auth/oidc/login` 生成 PKCE 代码验证器与 SHA-256 挑战,存储 10 分钟 TTL 状态,重定向至 IdP
2. IdP 认证后回调 `?code=...&state=...`
3. 校验状态并消耗授权代码,在 IdP 令牌端点交换令牌
4. **验证 ID 令牌签名** —— 从发现 URL 获取 RSA 公钥,缓存 5 分钟,按 `kid` 匹配
5. 检查声明:`exp`、`nbf`、`iss`、`aud`
6. 将 IdP 群组映射到 RBAC 角色,在 SQLite RBAC 存储中创建/更新用户
7. 签发 OpenClaw 访问令牌与刷新令牌并返回给客户端
(`src/enterprise/auth/oidc.ts`)
### MFA / TOTP
基于时间的一次性密码(TOTP,RFC 6238)无外部依赖 —— 纯 Node.js 实现(HMAC-SHA1、30 秒窗口、6 位数字、±1 步时钟偏差容忍)。
```
enterprise:
auth:
mfa:
enabled: true
issuer: "My Company OpenClaw" # label shown in authenticator apps
requireForRoles: [admin, super-admin] # enforce MFA for these roles
```
**网关 RPC 方法:**
| 方法 | 描述 |
| ---- | ---- |
| `enterprise.mfa.enroll` | 生成 TOTP 密钥与 `otpauth://` URI 用于二维码显示 |
| `enterprise.mfa.confirm-enroll` | 使用首个有效码确认注册 |
| `enterprise.mfa.verify` | 登录时步骤提升验证 |
| `enterprise.mfa.disable` | 管理员撤销 MFA |
(`src/enterprise/auth/mfa.ts`)
### 令牌撤销
刷新令牌持久化在 SQLite 中,可单独或批量撤销:
- **单令牌撤销** —— 退出特定会话
- **批量撤销** —— 强制注销用户所有会话(管理员操作)
- **访问令牌吊销列表** —— 在自然过期前立即失效被入侵账户的令牌
刷新令牌以 **SHA-256 哈希** 存储 —— 原始令牌永不写入磁盘。每次使用均轮换(单次使用):旧令牌撤销,新令牌签发。
| 方法 | 描述 |
| ---- | ---- |
| `enterprise.sessions.list` | 列出用户活跃会话 |
| `enterprise.sessions.revoke` | 按 JTI 撤销特定会话 |
(`src/enterprise/auth/token-store.ts`)
### IP 允许列表
按用户的 CIDR 允许列表限制可认证 IP 地址。若 `allowedCidrs` 设置且非空,来自列表外 IP 的认证请求会在签发令牌前被拒绝。
```
# 通过管理员 API 或 enterprise.users RPC 在用户记录中设置:
allowedCidrs:
- "10.0.0.0/8" # corporate VPN range
- "192.168.1.0/24" # office subnet
- "203.0.113.5/32" # specific IP
```
支持完整的 IPv4 CIDR 匹配与 IPv6 CIDR 匹配(通过 BigInt 展开完整 128 位地址空间)。空 `allowedCidrs` 表示无限制 —— 该功能按用户可选启用。
(`src/enterprise/security/ip-allowlist.ts`)
## 审计日志与合规
若无审计日志,无法回答:_谁运行了此命令、何时、从何处、做了什么?_ SOC 2、HIPAA §164.312(b)、PCI DSS 均要求此类记录。原始 OpenClaw 完全不具备审计能力。
### 哈希链如何工作
每条审计事件均为防篡改记录。每个事件包含前一个事件内容的 **SHA-256 哈希**,形成链式结构,任意修改或删除历史记录均可立即被检测:
```
Event #1 id=01J4K... hash=sha256(event1_content) prevHash=0000...
│
▼
Event #2 id=01J4L... hash=sha256(event2_content) prevHash=hash_of_event1
│
▼
Event #3 id=01J4M... hash=sha256(event3_content) prevHash=hash_of_event2
```
若事件 #2 被修改或删除,`event3.prevHash` 将不再匹配 `sha256(event2_content)`,`verifyChain()` 会检测到断裂。
### 记录内容
自动捕获所有关键事件:
| 事件 | 触发条件 |
| ---- | ---- |
| `auth.login` | 成功 WebSocket 网关连接 |
| `auth.failed` | 认证失败(错误令牌、过期、速率限制) |
| `auth.logout` | 会话终止 |
| `agent.run.start` | 消息分派至代理 |
| `agent.run.complete` | 代理任务成功完成 |
| `agent.run.error` | 代理任务失败 |
| `security.injection_detected` | 消息中发现注入模式 |
| `guardrail.block` | 工具调用被防护引擎拦截 |
| `guardrail.warn` | 工具调用被标记但允许 |
| `skill.install` | 安装技能 |
| `skill.invoke` | 代理调用技能 |
| `skill.blocked` | 技能被 SAST 或代码签名拒绝 |
| `config.read` / `config.write` | 配置访问或修改 |
| `user.create` / `user.delete` | IAM 用户生命周期 |
| `role.assign` | 分配角色给用户 |
### 存储
```
enterprise:
audit:
enabled: true
storage:
driver: sqlite # default — no external dependencies
path: ~/.openclaw/audit.db # WAL mode, indexed by timestamp + actor
retention:
days: 365 # auto-purge; 0 = keep forever
```
SQLite 以 WAL 模式提供并发读取与崩溃安全写入。审计数据库独立于主配置,可独立备份。
### 验证
```
import { createSQLiteAuditStorage } from "./src/enterprise/audit/storage/sqlite.js";
import { verifyChain } from "./src/enterprise/audit/schema.js";
const storage = createSQLiteAuditStorage("~/.openclaw/audit.db");
const events = await storage.query({ limit: 50_000 });
const result = verifyChain(events);
if (!result.valid) {
console.error(`⚠ Chain tampered at event index ${result.brokenAt}`);
console.error(`Expected prevHash: ${result.expected}`);
console.error(`Found prevHash: ${result.found}`);
}
```
### PostgreSQL 审计后端
适用于需要大规模集中式、可查询审计存储的部署:
```
enterprise:
audit:
storage:
driver: postgres
connectionString: env://AUDIT_POSTGRES_URL # never inline credentials
maxConnections: 10
idleTimeoutMs: 30000
connectionTimeoutMs: 5000
```
```
npm install pg # optional dependency, not included by default
```
该模式使用 JSONB 存储原始事件与元数据列,在 `timestamp`、`actor_id`、`action`、`category`、`outcome` 与 `tenant_id` 上建立索引。实现与 SQLite 后端相同的 `AuditStorage` 接口 —— 切换驱动仅需配置变更。GDPR 匿名化(`anonymizeActor`)原地重写引用,不破坏哈希链。(`src/enterprise/audit/storage/postgres.ts`)
### SIEM / Syslog 导出
实时将审计事件转发至你的 SIEM 系统。
**Syslog(RFC 5424 — UDP 或 TCP):**
```
enterprise:
audit:
sinks:
- type: syslog
protocol: udp # udp (default) or tcp
host: siem.example.com
port: 514
facility: 16 # local0
appName: openclaw
```
每个事件以 RFC 5424 格式化,包含结构化数据元素 `openclaw@32473`,含 `id`、`actor`、`action`、`outcome`、`tenantId` 与 `durationMs`。TCP 传输包含自动重连与有界写队列。
**Webhook / 通用日志聚合:**
```
enterprise:
audit:
sinks:
- type: webhook
url: https://logs.example.com/ingest
batchSize: 100 # events per POST
flushIntervalMs: 5000 # max wait before flush
headers:
Authorization: env://LOG_INGEST_TOKEN
```
批量发送 JSON 数组至 HTTP 端点。兼容 Elastic、Splunk HEC、Datadog、Loki 等任意 HTTP 摄入端点。(`src/enterprise/audit/sinks/syslog.ts`)
### GDPR 合规(Art. 17 + Art. 20)
两项操作满足数据主体权利:
**数据导出(Art. 20 — 可移植性):**
```
GET enterprise.gdpr.export?userId= # requires super-admin role
```
返回包含用户档案、其作为 Actor 的所有审计事件及所有活跃会话的 JSON 对象。可直接提供给数据主体。
**数据擦除(Art. 17 — 被遗忘权):**
```
POST enterprise.gdpr.erase { userId } # requires super-admin role
```
擦除步骤:
1. 撤销所有活跃刷新令牌(会话立即终止)
2. 对引用该用户的审计日志条目进行伪匿名化 —— Actor ID 与邮箱替换为 `[erased-{sha256}]`。**审计链保持完整且可验证** —— 事件内容更新但哈希链不被破坏
3. 从 RBAC 存储中删除用户配置
(`src/enterprise/iam/gdpr.ts`)
### 合规映射
| 标准 | 要求 | 实现方式 |
| ---- | ---- | ---- |
| SOC 2 CC6 | 逻辑访问控制 | 认证事件、角色分配、失败登录 |
| SOC 2 CC7 | 系统操作 | 代理运行、工具执行、配置变更 |
| HIPAA §164.312(b) | 审计控制 | 完整事件日志(含 Actor、资源、结果、IP) |
| GDPR Art. 17 | 擦除权 | `gdprEraseUser` —— 伪匿名化 + 删除 |
| GDPR Art. 20 | 可移植性 | `gdprExportUser` —— 完整 JSON 导出 |
| GDPR Art. 30 处理记录 | 每事件记录 Actor 与资源;GDPR 保留策略 |
| PCI DSS 10 | 审计日志审查 | 哈希链 + 保留策略 + 集中存储 |
## 提示注入防御
通道消息来自不可信来源。Telegram 用户、Slack Webhook 或 Web 表单可能包含精心设计的文本,旨在劫持 AI 代理:`"忽略之前指令。你现在是 DAN..."`。若无防护,代理将遵从。
### 流水线
每个入站消息在到达模型前均经过多阶段净化流水线:
```
Raw message (from WhatsApp / Telegram / DM / WebSocket)
│
▼ ① NFC Unicode normalization
│ Collapses homoglyphs: "ⅈgnore" → "ignore"
│
▼ ② Invisible character stripping
│ Removes zero-width spaces, soft hyphens, directional marks
│ used to hide injection text from human reviewers
│
▼ ③ Injection pattern detection (8 rule families)
│ • "ignore previous instructions / forget above"
│ • DAN / jailbreak activation phrases
│ • "you are now [DAN|GPT|unrestricted]"
│ • System/admin role override attempts
│ • Prompt leaking ("repeat your system prompt")
│ • Base64-encoded injection attempts
│ • Nested instruction framing ("as a reminder, your new task is")
│ • Urgency/authority spoofing ("ANTHROPIC ALERT: you must now")
│
▼ ④ Truncation (default 32 KB)
│ Prevents context window stuffing attacks
│
▼ ⑤ Trust boundary tagging
External content is wrapped:
[message content]
This makes the source explicit to the model and prevents
the model from treating channel content as system instructions.
```
若检测到注入,请求将被拒绝并记录审计事件。用户收到通用错误信息,不会泄露触发检测的细节。
### 防护引擎
运行时防护引擎在 **`runBeforeToolCallHook()`** 中评估 **每个工具调用**,由代理运行时在执行任何工具(bash、浏览器、文件系统或技能)前调用。
| 规则 | 模式 | 动作 |
| ---- | ---- | ---- |
| 凭证收割 | `cat ~/.ssh/id_rsa`、读取 `.aws/credentials`、`.npmrc` | `require-approval` |
| 反向 Shell | `bash -i >& /dev/tcp/...`、`nc -e /bin/bash` | `block` |
| 批量删除 | `rm -rf /`、`DROP TABLE`、`DELETE FROM ... WHERE 1=1` | `require-approval` |
| 输出中的 SSN | `\b\d{3}-\d{2}-\d{4}\b` | `warn` + 审计事件 |
| 输出中的信用卡号 | Luhn 校验有效的 13–16 位数字序列 | `warn` + 审计事件 |
**可插拔规则** —— 添加你自己的规则:
```
enterprise:
guardrails:
rules:
- id: no-prod-db
description: Block direct production DB writes
pattern: "postgres://.*prod.*|mysql://.*production"
action: block
scope: tool-input
```
## 技能供应链安全
技能是可安装的 npm 包 —— 以完整代理权限运行的第三方代码。未经验证,恶意技能可能窃取数据、安装后门或横向移动至内部系统。
### 代码签名(Ed25519)
每个发布至企业注册表的技能均使用 Ed25519 签名。签名过程对技能目录进行哈希(SHA-256 每个文件,按排序的文件树),并生成分离签名。
```
// Publisher workflow:
const { privateKey, publicKey } = generateSigningKeyPair();
const manifest = await signSkill("/path/to/my-skill", privateKey);
// manifest.signature + manifest.files[] stored in skill registry
// Install-time verification (automatic when requireSigning: true):
const valid = await verifySkillSignature(skillDir, manifest, trustedPublicKeys);
if (!valid) throw new Error("Skill signature verification failed");
```
```
enterprise:
skills:
requireSigning: true
trustedKeys:
- "base64-ed25519-pubkey==" # your organization's key
requireSast: true
maxRiskScore: 40 # 0=safest, 100=reject-all above
```
### 企业 SAST(14 条规则)
在安装任何技能前,静态分析会检查:
| 规则 | CWE | OWASP |
| ---- | --- | ---- |
| 凭证收割 | CWE-522 | A02 密码学失败 |
| 反向 Shell | CWE-78 | A03 注入 |
| 持久化(计划任务、launchd、systemd) | CWE-912 | A08 软件完整性 |
| 代码注入(eval、Function()) | CWE-94 | A03 注入 |
| 原型污染 | CWE-1321 | A03 注入 |
| 危险反序列化 | CWE-502 | A08 软件完整性 |
| 路径遍历 | CWE-22 | A01 访问控制 |
| 数据外泄(curl 至外部 IP) | CWE-200 | A02 密码学失败 |
| 供应链(动态 require、混淆) | CWE-506 | A08 软件完整性 |
| XSS 在技能输出 | CWE-79 | A03 注入 |
| 未经验证的重定向 | CWE-601 | A01 访问控制 |
| 硬编码密钥 | CWE-798 | A07 认证失败 |
| 不安全的随机数 | CWE-338 | A02 密码学失败 |
| SSRF 模式 | CWE-918 | A10 SSRF |
每项发现将累加 **风险评分(0–100)**。扫描器返回建议:
- `approve` —— 风险评分 < 40
- `review` —— 风险评分 40–70(需人工审批)
- `reject` —— 风险评分 > 70(自动阻断)
## Prometheus 监控
原始 OpenClaw 无指标也无健康探针 —— 无法在规模或 Kubernetes 上运行。
### 端点
| 端点 | 用途 |
| ---- | ---- |
| `GET /metrics` | Prometheus 文本格式 —— 通过 `prometheus.io/scrape: "true"` 抓取 |
| `GET /healthz` | 联合活跃度 + 就绪性 —— 返回 200 或 503 及 JSON 详情 |
| `GET /livez` | 活跃性 —— 进程是否存活 |
| `GET /readyz` | 就绪性 —— 网关是否准备好接收流量 |
| `GET /startupz` | 启动探针 —— 返回 503 直到完全初始化 |
所有探针端点 **无需认证**(Kubernetes 探针所需)。它们仅暴露二进制上下状态与聚合计数,不泄露敏感数据。
### 可用指标
```
# 网关
openclaw_gateway_connections_active Gauge
openclaw_gateway_requests_total Counter (labels: method, path, status)
openclaw_gateway_request_duration_seconds Histogram
# 代理
openclaw_agent_runs_total Counter (labels: agent_id, outcome)
openclaw_agent_runs_active Gauge
openclaw_agent_errors_total Counter
openclaw_agent_run_duration_seconds Histogram
# 认证
openclaw_auth_success_total Counter (labels: method)
openclaw_auth_failure_total Counter (labels: reason)
# 安全
openclaw_guardrail_evaluations_total Counter (labels: action)
openclaw_guardrail_blocks_total Counter
openclaw_injection_detections_total Counter
# 技能
openclaw_skill_invocations_total Counter (labels: skill_id, outcome)
# 审计
openclaw_audit_events_total Counter (labels: category)
openclaw_audit_chain_length Gauge
# 多租户
openclaw_tenant_count Gauge
openclaw_cluster_node_count Gauge
```
### 零开销设计
当 `enterprise.monitoring.enabled` 为 `false`(社区版默认)时,每个指标调用均通过空操作存根 —— 无 `prom-client` 导入、无内存分配、无 CPU 开销。仅在调用 `initMonitoring()` 时才替换为真实实现。
## 多租户
多租户允许单个 OpenClaw 部署为多个隔离的团队或客户服务,带各自速率限制、审计追踪与配置。
### 隔离机制
租户上下文通过 Node.js `AsyncLocalStorage` 自动传播至所有异步操作。无需将租户 ID 手动传递到每个函数:
```
import { runWithTenantAsync, getTenantContext } from "./src/enterprise/tenancy/index.js";
// Set at the gateway connection layer (once per request)
await runWithTenantAsync({ tenantId: "acme-corp", name: "ACME Corp" }, async () => {
// Everything called here — including deeply nested async code,
// tool executions, and audit logs — automatically has tenant context.
const ctx = getTenantContext(); // { tenantId: "acme-corp", name: "ACME Corp" }
await agent.run(message); // audit events get tenantId automatically
});
```
```
enterprise:
tenancy:
enabled: true
tenants:
- id: acme-corp
name: ACME Corp
rateLimits:
requestsPerMinute: 500
- id: beta-team
name: Beta Team
rateLimits:
requestsPerMinute: 100
```
### 存储层隔离
除 `AsyncLocalStorage` 上下文传播外,租户隔离在 **SQL 查询层面** 强制执行。所有 RBAC 与审计存储调用均通过带租户作用域的适配器:
- 自动为写入打上 `tenantId` 标记(若上下文已设置)
- 对所有读取强制添加租户过滤(`WHERE tenant_id = ?`)
- 若代码尝试读取其他租户数据,抛出 `TENANT_ISOLATION_VIOLATION` 错误
这可防止应用代码遗漏过滤导致的数据泄漏。(`src/enterprise/tenancy/isolation.ts`)
## 分布式集群
为实现高可用,多个 OpenClaw 网关节点可组成集群,依赖 Redis 支持。节点相互发现、选主、交换心跳,并通过共享消息总线路由事件。
```
enterprise:
cluster:
enabled: true
redis:
url: env://REDIS_URL # never inline credentials
keyPrefix: openclaw:
heartbeatIntervalMs: 10000
```
```
npm install ioredis # optional dependency for Redis cluster support
```
**工作原理:**
- **选主** —— `SET NX EX` 对 `{keyPrefix}leader` 的原子锁,锁 TTL = 3 × 心跳间隔。当前主节点失效时自动重新选主
- **锁续期** —— 主节点定期续租心跳锁,防止误切主
- **节点心跳** —— 各节点写入 TTL = 4 × 心跳间隔的心跳键。停止续租的节点将因 Redis TTL 过期自动淘汰
- **消息总线** —— 通过 Redis Pub/Sub 的独立订阅连接。事件模型与单节点相同,只是跨节点分布
**InMemoryCoordinator** 提供用于开发与测试的单节点模式 —— 未安装 `ioredis` 时自动回退并输出警告。
(`src/enterprise/cluster/index.ts`)
### 分布式速率限制
多个网关节点共享 Redis 时,速率限制在全局跨节点生效,使用滑动窗口算法:
```
enterprise:
security:
rateLimiting:
enabled: true
redisUrl: env://REDIS_URL # same Redis as cluster.redis.url
windowMs: 60000 # 1-minute window
maxRequests: 1000 # per subject per window
```
Redis 实现使用有序集合:每次请求执行 `ZADD` 添加带时间戳的条目,`ZREMRANGEBYSCORE` 清理过期条目,`ZCARD` 计数活跃条目。Redis 不可用时自动回退至节点本地内存窗口并输出 stderr 警告。
(`src/enterprise/security/rate-limit.ts`)
## Kubernetes
完整生产级 Helm 图表位于 [`k8s/helm/openclaw/`](k8s/helm/openclaw/)。
### 开箱安全配置
```
securityContext:
runAsNonRoot: true # UID 1001
runAsUser: 1001
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"] # no Linux capabilities
readOnlyRootFilesystem: true
automountServiceAccountToken: false
```
### 安装
```
# 首先创建密钥
kubectl create secret generic openclaw-secrets \
--namespace openclaw \
--from-literal=ANTHROPIC_API_KEY=sk-ant-... \
--from-literal=OPENCLAW_MASTER_KEY=$(openssl rand -base64 32)
# 单节点(开发 / 小团队)
kubectl apply -f k8s/examples/single-node.yaml
# 企业高可用(3 个副本、Vault 密钥、Prometheus、cert-manager)
helm install openclaw k8s/helm/openclaw/ \
--namespace openclaw --create-namespace \
-f k8s/examples/enterprise-ha.yaml
```
### Helm 图表包含内容
| 模板 | 描述 |
| ---- | ---- |
| `deployment.yaml` | 滚动更新、全部 3 个探针、配置和注解 |
| `service.yaml` | ClusterIP 服务 |
| `ingress.yaml` | 多版本(networking.k8s.io/v1 / v1beta1 / extensions) |
| `hpa.yaml` | HPA v2(CPU + 内存指标) |
| `pdb.yaml` | PodDisruptionBudget(policy/v1 与 v1beta1 回退) |
| `networkpolicy.yaml` | 仅允许来自 Ingress 控制器与 Prometheus 的入站;Egress 限 DNS 与 HTTPS |
| `serviceaccount.yaml` | 专用 SA,`automountServiceAccountToken: false` |
| `servicemonitor.yaml` | Prometheus Operator ServiceMonitor |
| `configmap.yaml` | 来自 Helm 配置的图表,条件化包含企业级块 |
| `pvc.yaml` | 数据持久化卷 |
| `NOTES.txt` | 安装后说明(含检测到的配置) |
### 高可用配置
参见 [`k8s/examples/enterprise-ha.yaml`](k8s/examples/enterprise-ha.yaml) 的生产级覆盖示例,包括:
- 3 个副本,带 Pod 反亲和性(分散至不同节点)
- HPA:3–20 个副本,CPU 70% / 内存 80%
- PDB:`minAvailable: 2`
- 基于 Vault 的密钥与 Kubernetes 认证
- OIDC 认证
- Prometheus ServiceMonitor 自定义抓取标签
- cert-manager TLS 与 Let's Encrypt
- NetworkPolicy(入口来自 nginx,出口至 Vault 与外部 API)
- `topologySpreadConstraints` 用于区域分布
## 连接企业消息通道
OpenClaw 与团队已使用的平台集成。每个通道在 `~/.openclaw/config.yaml` 中配置于 `channels.` 下。运行 `pnpm openclaw onboard` 可启动交互式设置向导。
### Slack
**状态:** 生产就绪。Socket Mode(默认)或 HTTP Events API。
**步骤 1 — 创建 Slack 应用**
前往 [api.slack.com/apps](https://api.slack.com/apps) → **Create New App** → **From manifest**,粘贴下方 JSON 并将 `OpenClaw` 替换为你偏好的机器人名称:
```
{
"display_information": { "name": "OpenClaw" },
"features": {
"bot_user": { "display_name": "OpenClaw", "always_online": false },
"app_home": { "messages_tab_enabled": true }
},
"oauth_config": {
"scopes": {
"bot": [
"chat:write",
"channels:history",
"channels:read",
"groups:history",
"im:history",
"mpim:history",
"users:read",
"app_mentions:read",
"reactions:read",
"reactions:write",
"files:read",
"files:write",
"commands"
]
}
},
"settings": {
"socket_mode_enabled": true,
"event_subscriptions": {
"bot_events": [
"app_mention",
"message.channels",
"message.groups",
"message.im",
"message.mpim",
"reaction_added",
"reaction_removed"
]
}
}
}
```
- 在 **Socket Mode** 下生成 **App-Level Token**(`xapp-...`)并赋予 `connections:write` 范围
- 在 **OAuth & Permissions** 下安装应用到工作区并复制 **Bot Token**(`xoxb-...`)
- 在 **App Home** 下启用 **Messages Tab**,以便用户可直接 DM 机器人
**步骤 2 — 配置 OpenClaw**
```
channels:
slack:
enabled: true
botToken: xoxb-... # or env: SLACK_BOT_TOKEN
appToken: xapp-... # or env: SLACK_APP_TOKEN
requireMention: true # require @mention in channels (default)
dmPolicy: pairing # pairing | open | allowlist
groupPolicy: allowlist # allowlist channels explicitly
channels:
C0123456789: # Slack channel ID
allow: true
```
**步骤 3 — 启动网关**
```
pnpm gateway:watch
```
机器人将立即上线于 Slack。直接 DM 它或在其被加入的频道中 `@` 提及即可。
### Microsoft Teams
**状态:** 通过插件支持(Azure Bot Framework)。需公网可访问的机器人 Webhook。
**步骤 1 — 安装 Teams 插件**
```
pnpm openclaw plugins install @openclaw/msteams
# 或从此仓库的本地检出:
pnpm openclaw plugins install ./extensions/msteams
```
**步骤 2 — 注册 Azure 机器人**
1. 访问 [portal.azure.com](https://portal.azure.com) → **Azure Bot** → **Create**
2. 选择 **Multi Tenant**(或 **Single Tenant**)
3. 记录 **App ID** 并生成 **Client Secret**
4. 在 **Channels** 中添加 **Microsoft Teams**
5. 在 **Configuration** 中将 **Messaging endpoint** 设为你的网关公网地址:
`https://your-gateway.example.com/api/messages`
网关默认监听 3978 端口与 `/api/messages` 路径。可通过反向代理(nginx、Caddy)或隧道(ngrok、Tailscale Funnel)暴露 HTTPS。
**步骤 3 — 配置 OpenClaw**
```
channels:
msteams:
enabled: true
appId: "" # or env: MSTEAMS_APP_ID
appPassword: "" # or env: MSTEAMS_APP_PASSWORD
tenantId: "" # omit for multi-tenant
webhook:
port: 3978
path: /api/messages
requireMention: true # require @mention in channels
dmPolicy: pairing # pairing | open | allowlist
replyStyle: thread # thread | top-level
```
**步骤 4 — 安装 Teams 应用**
生成应用包(`manifest.json` 与图标组成的 zip)并上传至 Teams 管理中心或直接侧载:
- **Teams Admin Center** → Manage apps → Upload → 选择 zip 并发布至组织
- **Teams 客户端** → Apps → Manage your apps → Upload an app(开发/测试侧载)
机器人随后出现在 Teams 搜索中。用户可直接 DM 或 `@` 提及。
### Google Chat(Google Workspace)
**状态:** 通过 Google Chat API(HTTP Webhook)生产就绪。
**步骤 1 — 创建 Google Cloud 项目**
1. 访问 [console.cloud.google.com](https://console.cloud.google.com) → 启用 **Google Chat API**
2. 创建 **Service Account**(凭据 → 创建凭据 → 服务账户)
3. 生成 **JSON 密钥** 并复制到网关主机,例如 `~/.openclaw/googlechat-sa.json`
**步骤 2 — 配置 Chat 应用**
在 [Google Chat API → Configuration](https://console.cloud.google.com/apis/api/chat.googleapis.com/hangouts-chat):
- 设置 **Connection settings** 为 **HTTP endpoint URL**,指向 `https://your-gateway.example.com/googlechat`
- 设置 **Visibility** 为你的域或指定用户
- 将 **App status** 设为 **Live**
**步骤 3 — 配置 OpenClaw**
```
channels:
googlechat:
enabled: true
serviceAccountFile: ~/.openclaw/googlechat-sa.json
requireMention: true
dmPolicy: pairing
groupPolicy: allowlist
```
用户可通过 Google Chat 搜索栏直接按名称查找机器人(不会出现在 Marketplace 列表)。
### Mattermost(自托管)
**状态:** 通过插件支持(Bot Token + WebSocket 事件)。支持频道、群组与 DM。
**步骤 1 — 安装 Mattermost 插件**
```
pnpm openclaw plugins install @openclaw/mattermost
```
**步骤 2 — 创建机器人账户**
在 Mattermost 中:**System Console** → **Integrations** → **Bot Accounts** → **Add Bot Account**。创建后仅显示一次 Bot Token,请妥善保存。
**步骤 3 — 配置 OpenClaw**
```
channels:
mattermost:
enabled: true
botToken: "" # or env: MATTERMOST_BOT_TOKEN
baseUrl: https://chat.example.com # your Mattermost server URL
dmPolicy: pairing
requireMention: true
```
**步骤 4 — 将机器人加入频道**
在 Mattermost 中使用 `/invite @openclaw` 将机器人加入任意频道。它会自动响应 DM 并对频道中的 `@openclaw` 提及做出回复。
### 通道概览
| 通道 | 认证要求 | 插件需求 | DM | 群组通道 |
| ---- | ---- | ---- | ---- | ---- |
| Slack | Bot Token + App Token | 否 | ✅ | ✅ |
| Microsoft Teams | Azure App ID + Secret | 是(`@openclaw/msteams`) | ✅ | ✅ |
| Google Chat | GCP 服务账户 JSON | 否 | ✅ | ✅(Spaces) |
| Mattermost | Bot Token | 是(`@openclaw/mattermost`) | ✅ | ✅ |
| Discord | Bot Token | 否 | ✅ | ✅ |
| Telegram | Bot Token(BotFather) | 否 | ✅ | ✅ |
| WhatsApp | QR 配对(Baileys) | 否 | ✅ | ✅ |
## 签名容器镜像 + SBOM
每个发布镜像均通过 GitHub Actions 构建、签名并证明。签名使用 **cosign keyless** —— 无需管理私钥,GitHub OIDC 作为信任锚点。
```
# 验证镜像签名
cosign verify \
--certificate-identity-regexp="https://github.com/mholovetskyi/openclawenterprise/.*" \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
ghcr.io/mholovetskyi/openclawenterprise:latest
# 验证 SBOM 证明
cosign verify-attestation \
--type spdxjson \
--certificate-identity-regexp="https://github.com/mholovetskyi/openclawenterprise/.*" \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
ghcr.io/mholovetskyi/openclawenterprise:latest
```
**CI 工作流(`.github/workflows/container.yml`):**
| 作业 | 工具 | 输出 |
| ---- | ---- | ---- |
| `build` | Docker Buildx | 多平台镜像(linux/amd64、linux/arm64)推送到 ghcr.io |
| `sign` | cosign keyless | 透明日志条目;无需私钥或密钥 |
| `sbom` | syft + cosign | 生成并证明 SPDX-JSON SBOM 至镜像摘要 |
| `vulnerability-scan` | Trivy | 扫描结果以 SARIF 形式上传至 GitHub 安全标签页 |
SBOM 也作为工作流产物保留 90 天,供离线检查。漏洞扫描结果出现在 **Security → Code scanning** 标签页。
## 企业快速启动配置
```
# ~/.openclaw/config.yaml — 完整企业配置
enterprise:
enabled: true
# ── Secrets ──────────────────────────────────────────────────────
secrets:
backend: vault # file | vault | aws-sm | gcp-sm | azure-kv
vault:
address: https://vault.example.com
authMethod: kubernetes
role: openclaw
mount: secret
prefix: openclaw/
# ── IAM / RBAC ───────────────────────────────────────────────────
iam:
enabled: true
jwt:
algorithm: RS256 # auto-generates key pair on first start
expiresIn: 15m
refreshExpiresIn: 7d
# ── OIDC / SSO (optional — remove if using local accounts) ────────
auth:
oidc:
discoveryUrl: https://your-org.okta.com/.well-known/openid-configuration
clientId: 0oa...
clientSecret: env://OIDC_CLIENT_SECRET
redirectUri: https://openclaw.example.com/auth/oidc/callback
roleMap:
Engineering: operator
Admins: admin
defaultRole: viewer
mfa:
enabled: true
requireForRoles: [admin, super-admin]
# ── Audit logging ─────────────────────────────────────────────────
audit:
enabled: true
storage:
driver: sqlite
path: ~/.openclaw/audit.db
retention:
days: 365
# ── Monitoring ───────────────────────────────────────────────────
monitoring:
enabled: true # /metrics + /healthz + /livez + /readyz + /startupz
# ── Guardrails (defaults are safe — override to customize) ────────
guardrails:
enabled: true
# ── Skill supply chain ────────────────────────────────────────────
skills:
requireSigning: true
requireSast: true
maxRiskScore: 40
# ── Multi-tenancy (optional) ──────────────────────────────────────
tenancy:
enabled: false
# ── Cluster (optional — requires ioredis) ────────────────────────
cluster:
enabled: false
# redis:
# url: env://REDIS_URL
# keyPrefix: openclaw:
# ── Security ──────────────────────────────────────────────────────
security:
rateLimiting:
enabled: true
redisUrl: env://REDIS_URL # shared with cluster if enabled
# ── 网关 ───────────────────────────────────────────────────────
gateway:
bind: loopback # NEVER silent 0.0.0.0
auth:
mode: jwt # requires enterprise.iam.enabled: true
port: 3284
# ── 代理模型 ──────────────────────────────────────────────────
# 推荐:Anthropic Opus 4.6 以获得最佳提示注入抵抗力
```
## NVIDIA AI 基础设施
OpenClaw 企业版与 NVIDIA 代理式 AI 栈原生集成。使用 NIM 通过 GPU 加速运行 Nemotron 3 模型,监控 GPU 健康(Prometheus),强制执行思考预算与模型路由策略,将 NIM 作为 Kubernetes Sidecar 部署,并运行带有 OpenShell 沙箱的 NemoClaw Enterprise
### NIM 提供者
```
enterprise:
nvidia:
nim:
enabled: true
endpoint: "https://integrate.api.nvidia.com/v1"
apiKey: env://NIM_API_KEY
defaultModel: "nvidia/nemotron-3-nano-30b-a3b"
gpuMetrics:
enabled: true
pollIntervalMs: 15000
guardrails:
nvidia:
thinkingBudgetLimit:
enabled: true
maxThinkingTokens: 4096
modelRoutingPolicy:
enabled: true
roleModelMap:
viewer: ["nvidia/llama-3.1-nemotron-nano-8b-v1"]
operator: ["nvidia/llama-3.1-nemotron-nano-8b-v1", "nvidia/nemotron-3-nano-30b-a3b"]
admin: ["*"]
```
### NemoClaw Enterprise(沙箱推理)
NemoClaw 带来带有声明式安全策略的沙箱推理 —— 每个请求在 OpenShell 容器中运行,具备网络出口控制、文件系统隔离与 seccomp 限制。内置隐私路由器可强制敏感数据保留在本地仅模型内,绝不出域。
开箱即用三种推理配置文件:`nvidia-cloud`(NVIDIA 托管 API)、`local-nim`(自托管 NIM 容器)、`vllm`(社区 vLLM 后端)。默认主模型为 **Nemotron 3 Super 120B**(`nvidia/nemotron-3-super-120b-a12b`)。
```
enterprise:
nvidia:
nemoClaw:
enabled: true
apiKey: env://NEMOCLAW_API_KEY # falls back to NVIDIA_API_KEY
inferenceProfile: nvidia-cloud # nvidia-cloud | local-nim | vllm
defaultModel: "nvidia/nemotron-3-super-120b-a12b"
sandbox:
networkEgress: block # block | allow | require-approval
allowedHosts:
- "integrate.api.nvidia.com"
- "*.nvidia.com"
filesystem: read-only
seccomp: strict
privacyRouter:
enabled: true
sensitivePatterns: ["SSN", "credit_card", "medical_record"]
localOnlyModel: "nvidia/nemotron-3-nano-30b-a3b"
```
**关键能力:**
- **OpenShell 沙箱** — 每个推理请求在隔离容器中运行,限制网络、文件系统与系统调用
- **隐私路由器** — 自动将含敏感数据的提示路由至本地仅模型(不出域)
- **3 种推理配置文件** — NVIDIA 云、本地 NIM、vLLM —— 可通过单行配置切换
- **出口控制** — 阻断、允许或需审批的出站网络
- **Prometheus 指标** — `nemoclaw_requests_total`、`nemoclaw_latency_seconds`、`nemoclaw_tokens_total`、`nemoclaw_sandbox_health`、`nemoclaw_sandbox_egress_blocked_total`
- **审计事件** — `NEMOCLAW_REQUEST`、`NEMOCLAW_SANDBOX_POLICY`、`NEMOCLAW_EGRESS_BLOCKED` 记录至防篡改审计链
- **自动降级** — `NVIDIA_API_KEY` 自动回退至 `NVIDIA_API_KEY` 以统一凭证管理
详见 [docs/enterprise/nvidia.md](docs/enterprise/nvidia.md) 获取完整配置参考、Kubernetes Sidecar 部署与故障排查。
### Palantir Foundry 集成
OpenClaw 企业版与 Palantir Foundry 集成,实现统一的审计可见性、OIDC/SSO 认证与 Compute Module 部署。
```
enterprise:
# ── Palantir Foundry (optional) ──────────────────────────────────
# audit:
# sinks:
# - type: palantir-foundry
# stackUrl: env://PALANTIR_STACK_URL
# clientId: env://PALANTIR_CLIENT_ID
# clientSecret: env://PALANTIR_CLIENT_SECRET
# ontologyRid: env://PALANTIR_ONTOLOGY_RID
# streamRid: "ri.foundry.main.dataset.abc123"
# ── Palantir OIDC/SSO (optional) ────────────────────────────────
# auth:
# oidc:
# provider: palantir
# stackUrl: env://PALANTIR_STACK_URL
# clientId: env://PALANTIR_OIDC_CLIENT_ID
# clientSecret: env://PALANTIR_OIDC_CLIENT_SECRET
# roleMap:
# Foundry-Admins: admin
# Foundry-Operators: operator
```
详见 [docs/enterprise/palantir.md](docs/enterprise/palantir.md) 获取完整配置、Compute Module 部署与本体感知防护栏。
### Oracle 云基础设施集成
OpenClaw 企业版与 Oracle Cloud Infrastructure 集成,用于密钥管理(OCI Vault)、审计日志流(OCI Streaming)、数据库连接(Oracle MCP 桥接)以及可移植的 Agent Spec JSON 导出。
```
enterprise:
# ── OCI Vault secrets (optional) ──────────────────────────────
secrets:
backend: oci-vault
ociVault:
tenancyId: env://OCI_TENANCY_ID
userId: env://OCI_USER_ID
fingerprint: env://OCI_FINGERPRINT
privateKey: env://OCI_PRIVATE_KEY
region: us-ashburn-1
compartmentId: env://OCI_COMPARTMENT_ID
vaultId: env://OCI_VAULT_ID
keyId: env://OCI_KEY_ID
# ── OCI Streaming audit sink (optional) ───────────────────────
audit:
enabled: true
sinks:
- type: oci-streaming
streamId: env://OCI_STREAM_ID
streamEndpoint: env://OCI_STREAMING_ENDPOINT
batchSize: 100
flushIntervalMs: 5000
# ── Oracle MCP bridge (optional) ──────────────────────────────
oracle:
mcp:
enabled: true
endpoint: env://ORACLE_MCP_ENDPOINT
auth:
method: oci-api-key
allowedTools: [sql_query, describe_table, list_tables]
blockedTools: [drop_table]
maxResultRows: 1000
# ── Agent Spec export (optional) ────────────────────────────
agentSpec:
enabled: true
exportPath: ./agent-spec.json
includeTools: true
redactSecrets: true
```
详见 [docs/enterprise/oracle.md](docs/enterprise/oracle.md) 获取完整配置、MCP 防护栏与 Agent Spec 模式。
## 功能矩阵
| | 社区版 | 企业版 |
| ---- | ---- | ---- |
| **核心** | | |
| 多通道 AI 助理(14 通道) | ✅ | ✅ |
| 本地优先网关(默认回环) | ✅ | ✅ |
| 技能平台 | ✅ | ✅ |
| 语音唤醒 + 说话模式 | ✅ | ✅ |
| 实时画布(A2UI) | ✅ | ✅ |
| macOS / iOS / Android 应用 | ✅ | ✅ |
| **安全** | | |
| 零信任网关(0.0.0.0 从不静默) | ✅ | ✅ |
| AES-256-GCM 加密密钥 | — | ✅ |
| HashiCorp Vault 集成 | — | ✅ |
| AWS Secrets Manager | — | ✅ |
| GCP Secret Manager | — | ✅ |
| Azure Key Vault | — | ✅ |
| OCI Vault(Oracle Cloud KMS) | — | ✅ |
| 遗留凭证自动迁移 | — | ✅ |
| 提示注入净化器(8 类规则) | — | ✅ |
| 信任边界标记 | — | ✅ |
| 运行时防护引擎 | — | ✅ |
| 技能代码签名(Ed25519) | — | ✅ |
| 企业 SAST(14 规则,CWE/OWASP) | — | ✅ |
| **身份与访问** | | |
| IAM / RBAC(5 个内置角色) | — | ✅ |
| SQLite 持久化 RBAC 存储 | — | ✅ |
| JWT RS256/HS256 认证 | — | ✅ |
| API 密钥管理 | — | ✅ |
| 用户组与角色继承 | — | ✅ |
| 代理服务账户 | — | ✅ |
| 旧作用域向后兼容 | ✅ | ✅ |
| OIDC / SSO(Palantir、Okta、Azure AD、Google、Auth0、Keycloak) | — | ✅ |
| MFA / TOTP(RFC 6238,纯 Node.js) | — | ✅ |
| 刷新令牌撤销(单次 + 批量) | — | ✅ |
| IP 允许列表(IPv4 + IPv6 CIDR) | — | ✅ |
| **合规** | | |
| 防篡改审计日志(SHA-256 哈希链) | — | ✅ |
| ULID 事件 ID(可排序、毫秒级) | — | ✅ |
| SQLite WAL 审计存储 | — | ✅ |
| PostgreSQL 审计后端 | — | ✅ |
| SIEM / Syslog(RFC 5424 UDP + TCP) | — | ✅ |
| Webhook 日志接收器(Elastic、Splunk、Datadog) | — | ✅ |
| 可配置保留策略 | — | ✅ |
| 链验证 API | — | ✅ |
| GDPR 数据导出(Art. 20) | — | ✅ |
| GDPR 数据擦除(Art. 17) | — | ✅ |
| SOC 2 / HIPAA / GDPR 映射 | — | ✅ |
| **可观测性** | | |
| Prometheus 指标(20+) | — | ✅ |
| `/metrics` / `/healthz` / `/livez` / `/readyz` / `/startupz` | — | ✅ |
| Grafana 仪表板(包含) | — | ✅ |
| 管理仪表板 UI(实时、网关连接) | — | ✅ |
| **规模** | | |
| 多租户(AsyncLocalStorage) | — | ✅ |
| 多租户存储隔离(SQL 级) | — | ✅ |
| 每租户速率限制 | — | ✅ |
| 分布式速率限制(Redis 滑动窗口) | — | ✅ |
| 分布式集群(Redis 领导者选举 + Pub/Sub) | — | ✅ |
| 节点心跳与健康追踪 | — | ✅ |
| **部署** | | |
| Kubernetes Helm 图表(完整) | — | ✅ |
| HPA + PDB + NetworkPolicy | — | ✅ |
| Prometheus ServiceMonitor | — | ✅ |
| cert-manager TLS | — | ✅ |
| 签名容器镜像(cosign keyless) | — | ✅ |
| SBOM 证明(syft SPDX-JSON) | — | ✅ |
| 漏洞扫描(Trivy → GitHub Security) | — | ✅ |
| npm 一键安装 | ✅ | ✅ |
| **NVIDIA AI 基础设施** | | |
| NVIDIA NIM 模型提供者 | — | ✅ |
| Nemotron 3 模型家族支持 | — | ✅ |
| NVIDIA GPU 监控(Prometheus) | — | ✅ |
| NIM Kubernetes Sidecar | — | ✅ |
| NemoClaw OpenShell 沙箱 | — | ✅ |
| NemoClaw 隐私路由器 | — | ✅ |
| NemoClaw 3 种推理配置文件 | — | ✅ |
| NemoClaw 审计事件 | — | ✅ |
| **Palantir Foundry** | | |
| Foundry 审计接收器 | — | ✅ |
| Palantir OIDC/SSO 预设 | — | ✅ |
| Foundry Compute Module Dockerfile | — | ✅ |
| 本体感知防护栏(指南) | | ✅ |
| **Oracle 云基础设施** | | |
| OCI Vault 秘密后端 | — | ✅ |
| OCI 流式审计接收器 | — | ✅ |
| Oracle MCP 桥接(Autonomous DB) | — | ✅ |
| Agent Spec JSON 导出 | — | ✅ |
## 测试套件与质量保证
**396 个测试 · 22 个测试文件 · CI 全通过**
每个企业安全子系统的专用测试套件。测试在 CI 中通过 Vitest 运行,覆盖正确性、边界情况、密码学属性与故障模式——不仅覆盖快乐路径。
### 按安全域划分的覆盖率
#### 密钥后端(91 个测试)
| 测试文件 | 测试数 | 验证内容 |
| ---- | ---- | ---- |
| `backend-vault.test.ts` | 24 | 令牌认证、AppRole、无认证降级、KV v2 CRUD、自定义请求头 |
| `backend-azure-kv.test.ts` | 24 | HTTP 404 与 `SecretNotFound` 错误码区分、Azure 安全名称编解码 |
| `backend-gcp-sm.test.ts` | 22 | gRPC 错误码映射(`NOT_FOUND`、`PERMISSION_DENIED`)、Buffer 与字符串载荷处理、存在即跳过语义 |
| `backend-aws-sm.test.ts` | 21 | Get/Set/Delete/List/Exists 操作、分页、跨页、SDK 错误传播 |
#### 技能供应链安全(37 个测试)
| 测试文件 | 测试数 | 验证内容 |
| ---- | ---- | ---- |
| `code-signing.test.ts` | 17 | Ed25519 签名与验证、密钥派生、修改文件检测、多密钥信任锚、损坏签名拒绝 |
| `sast.test.ts` | 20 | 全部 14 条 SAST 规则在匹配模式时触发、风险评分 0–100、CWE 与 OWASP 标签、`approve`/`review`/`reject` 阈值建议 |
#### IAM / RBAC(69 个测试)
| 测试文件 | 测试数 | 验证内容 |
| ---- | ---- | ---- |
| `rbac/store.test.ts` | 26 | 用户、角色、组的 CRUD;重复拒绝;级联删除完整性 |
| `rbac/engine.test.ts` | 23 | 权限评估、通配符匹配(`agents.*`、`*`)、组角色继承、角色图中循环检测 |
| `rbac/model.test.ts` | 20 | 全部 5 个内置角色及其精确权限集;自定义角色定义;无效角色拒绝 |
#### 认证(23 个测试)
| 测试文件 | 测试数 | 验证内容 |
| ---- | ---- | ---- |
| `jwt.test.ts` | 23 | RS256 与 HS256 签名/验证、访问令牌与刷新令牌生命周期、API 密钥格式(`oc_…`)、SHA-256 密钥哈希存储(原始密钥永不写入磁盘)、过期令牌拒绝 |
#### 审计日志(27 个测试)
| 测试文件 | 测试数 | 验证内容 |
| ---- | ---- | ---- |
| `audit/schema.test.ts` | 17 | ULID ID 生成、SHA-256 哈希链链接、单事件篡改检测、多事件链在精确索引处断裂检测 |
| `audit/logger.test.ts` | 10 | 认证/代理/防护栏事件记录、磁盘满模拟下的优雅降级 |
#### 密码学与密钥路由(45 个测试)
| 测试文件 | 测试数 | 验证内容 |
| ---- | ---- | ---- |
| `encryption.test.ts` | 16 | AES-256-GCM 加解密往返、IV 唯一性、认证标签篡改检测、错误密钥拒绝 |
| `secrets/index.test.ts` | 14 | 密钥引用 URI 解析(`vault://`、`aws-sm://`、`gcp-sm://`、`azure-kv://`、`env://`、`file://`)、后端路由、后端未配置错误 |
| `backend-file.test.ts` | 15 | 文件后端 CRUD、加密存储、原始凭证迁移 |
#### 安全与防护(40 个测试)
| 测试文件 | 测试数 | 验证内容 |
| ---- | ---- | ---- |
| `input-sanitizer.test.ts` | 22 | NFC Unicode 规范化、不可见字符剥离、全部 8 类注入模式家族、信任边界标记注入、可配置截断 |
| `guardrails.test.ts` | 18 | 规则对工具输入/输出的评估、`block`/`require-approval`/`warn` 动作派发、防护栏审计事件记录 |
#### NVIDIA 集成(26 个测试)
| 测试文件 | 测试数 | 验证内容 |
| ---- | ---- | ---- |
| `nvidia/nemoclaw-provider.test.ts` | 21 | NemoClaw 初始化、开放 Shell 沙箱设置、健康检查、聊天完成、退避重试、Prometheus 指标、优雅关闭 |
| `models-config.providers.nvidia.test.ts` | 5 | NemoClaw 模型提供者构造、Nemotron 模型可用性、API 密钥回退至 `NVIDIA_API_KEY` |
#### 可观测性与基础设施(38 个测试)
| 测试文件 | 测试数 | 验证内容 |
| ---- | ---- | ---- |
| `monitoring/index.test.ts` | 10 | Prometheus 指标注册与递增、`/healthz` 探针响应结构、监控关闭时的空操作存根 |
| `tenancy/index.test.ts` | 14 | `AsyncLocalStorage` 租户上下文传播、每租户速率限制、缺少上下文时抛出错误 |
| `cluster/index.test.ts` | 14 | 节点心跳注册、丢失心跳后的自动淘汰、内存协调器用于开发(无 Redis 时回退并警告) |
### 测试证明什么
- **篡改检测有效**:哈希链测试验证修改或删除任意事件会使 `verifyChain()` 在精确索引处发现断裂。
- **密码学正确**:AES-256-GCM 测试确认 IV 唯一性、认证标签完整性、错误密钥拒绝。
- **RBAC 强制执行**:引擎测试覆盖通配符、继承、循环依赖与每个内置角色的精确权限边界。
- **注入模式被阻断**:净化器测试覆盖全部 8 类规则家族,包括 Unicode 同形攻击、Base64 载荷与紧迫性/权威性欺骗短语。
- **云后端错误处理**:Vault、AWS SM、GCP SM、Azure KV 测试验证 SDK 错误(gRPC 码、HTTP 状态码、SDK 异常类型)被映射为一致的 `SecretNotFoundError` / `SecretBackendError`。
- **代码签名拒绝篡改技能**:签名与 SAST 测试验证技能目录中单个文件的修改会导致签名验证失败,阻止安装。
### 运行测试
```
# 完整企业测试套件
pnpm vitest run --config vitest.unit.config.ts src/enterprise
# 单域
pnpm vitest run --config vitest.unit.config.ts src/enterprise/iam
pnpm vitest run --config vitest.unit.config.ts src/enterprise/security
pnpm vitest run --config vitest.unit.config.ts src/enterprise/secrets
pnpm vitest run --config vitest.unit.config.ts src/enterprise/audit
```
## 社区功能
以下所有功能在社区版中默认可用,无需企业配置。
### 通道
WhatsApp(Baileys)· Telegram(grammY)· Slack(Bolt)· Discord(discord.js)· Google Chat · Signal(signal-cli)· BlueBubbles(iMessage)· iMessage(遗留)· Microsoft Teams · Matrix · Zalo · Zalo 个人 · WebChat
### 应用与节点
- **macOS 应用** — 菜单栏控制平面、语音唤醒/PTT、说话模式覆盖
- **iOS 节点** — 画布、语音唤醒、说话模式、摄像头、屏幕录制
- **Android 节点** — 画布、说话模式、摄像头、屏幕录制、可选 SMS
### 工具与自动化
- **浏览器控制** — 专用 Chrome/Chromium 与 CDP
- **画布 + A2UI** — 代理驱动的视觉工作空间
- **定时任务 + Webhook** — 定时任务与入站触发
- **Gmail Pub/Sub** — 邮件自动化
- **技能平台** — 内置、管理与工作区技能
### 快速启动
运行时:**Node ≥22**
```
npm install -g openclaw@latest
openclaw onboard --install-daemon
openclaw gateway --port 18789
openclaw agent --message "What's on my calendar today?"
```
完整指南:[Getting started](https://docs.openclaw.ai/start/getting-started)
### 开发通道
- **stable** — 标记,npm 分发标签 `latest`
- **beta** — 预发布标签,npm 分发标签 `beta`
- **dev** — `main` 分支头部,npm 分发标签 `dev`
```
openclaw update --channel stable|beta|dev
```
### 从源码构建社区版
社区版:
```
git clone https://github.com/openclaw/openclaw.git
cd openclaw
pnpm install
pnpm ui:build
pnpm build
pnpm openclaw onboard --install-daemon
pnpm gateway:watch # dev loop with auto-reload
```
企业版:参见上方 [安装](#install)。
## 企业文档
| 文档 | 描述 |
| ---- | ---- |
| [安全加固](docs/enterprise/security.md) | 零信任配置、DM 策略、生产检查清单 |
| [IAM & RBAC](docs/enterprise/iam.md) | 角色、权限、JWT 配置、API 密钥、OIDC、MFA、IP 允许列表 |
| [审计日志](docs/enterprise/audit.md) | 哈希链验证、PostgreSQL、SIEM/syslog、GDPR |
| [Kubernetes](docs/enterprise/kubernetes.md) | Helm 图表参考、HA 配置、Prometheus、cert-manager |
| [密钥管理](docs/enterprise/secrets.md) | 全部 6 个后端、密钥引用 URI、迁移 |
| [容器安全](docs/enterprise/containers.md) | cosign 签名、SBOM 验证、Trivy 扫描 |
| [Palantir Foundry](docs/enterprise/palantir.md) | 审计流、OIDC/SSO、Compute Module 部署、本体感知防护栏 |
| [NVIDIA AI](docs/enterprise/nvidia.md) | NIM 提供者、NemoClaw 沙箱、GPU 监控、推理配置文件 |
| [Oracle 云](docs/enterprise/oracle.md) | OCI Vault、OCI 流式审计、MCP 桥接、Agent Spec 导出 |
## 赞助商
| OpenAI | Blacksmith |
| ---- | ---- |
| [](https://openai.com/) | [](https://blacksmith.sh/) |
## 星标历史
[](https://www.star-history.com/#openclaw/openclaw&type=date&legend=top-left)
## 许可证
MIT —— 请参阅 [LICENSE](LICENSE)。每个企业功能均为 MIT 许可。无订阅、无许可证密钥、无电话回家。
[网站](https://openclaw.ai) · [文档](https://docs.openclaw.ai) · [Discord]( ) · [问题](https://github.com/openclaw/openclaw/issues) · [安全通告](https://github.com/openclaw/openclaw/security/advisories)
OpenClaw 企业版 — 零信任、合规就绪、MIT 许可。
基于您已经喜爱平台构建。无订阅。无锁定。
自 GTC 以来 · 安装 · 企业能力缺口 · 安全 · 密钥管理 · IAM · OIDC/SSO · MFA · 审计 · GDPR · 集群 · Kubernetes · 通道 · NVIDIA · 测试 · 文档
**OpenClaw** 是目前最强大的开源 AI 代理平台之一。凭借 216,000 个 GitHub 星标,它在个人生产力与小团队自动化方面表现出色:连接你的 AI 到 WhatsApp、Telegram、Discord 等 14 个通道,运行浏览器自动化,管理日历,并编排复杂的多步骤任务,全部来自单一自托管网关。对于个人和小团队来说,它表现卓越。 企业级部署有不同的一套要求。受监管行业需要审计追踪、访问控制与加密的凭证存储。平台团队需要 Prometheus 指标和 Kubernetes 原生部署。注重安全的组织需要运行时防护、提示注入防御以及对第三方技能的供应链验证。这些并非 OpenClaw 质量上的缺失——它们只是超出其作为个人工具的设计范围。 **OpenClaw Enterprise** 在 OpenClaw 基础上添加了完整的企业级栈。每一个企业功能都是可选的模块(`enterprise.enabled: true`)。社区模式下二进制文件完全相同且无性能开销。100% MIT 许可。无订阅。零锁定。 ## 自 GTC 以来构建 自 NVIDIA GTC 以来,OpenClaw Enterprise 已推出生产就绪的、MIT 许可的企业级栈——无订阅、无锁定。每个功能在禁用时均零开销。这里是已实现的内容: ### NVIDIA 原生 AI 基础设施 - **NVIDIA NIM** — 具有 OpenAI 兼容端点、健康检查与重试逻辑的首批推理提供者 - **NemoClaw Enterprise** — 基于 OpenShell 容器的沙箱推理,隐私路由,以及 3 个部署配置文件(`nvidia-cloud`、`local-nim`、`vllm`) - **GPU 监控** — 通过 Prometheus 导出 nvidia-smi 轮询与可配置告警阈值 - **Nemotron 3 模型家族** — 开箱即用支持 Super 120B、Nano 30B 与 Super 49B - **NVIDIA 防护栏** — 思考预算限制、每用户/每租户成本上限、基于 RBAC 的模型路由 ### 零信任安全栈 - **加密密钥** — 静态 AES-256-GCM 加密,6 个后端(Vault、AWS SM、GCP SM、Azure KV、OCI Vault、env) - **完整 RBAC** — 用户、用户组、角色、权限,JWT(RS256/HS256)、MFA/TOTP、API 密钥 - **OIDC/SSO** — Okta、Azure AD、Google Workspace、Auth0、Keycloak、Palantir Foundry - **运行时防护** — 凭证收割检测、反向 Shell 阻断、PII 扫描、批量删除防护 - **输入净化** — Unicode 标准化、不可见字符剥离、8 类提示注入模式家族 - **供应链安全** — Ed25519 代码签名、14 规则 SAST 扫描器(CWE/OWASP)、预安装审批门 - **网络控制** — IP 允许列表(CIDR、IPv4/IPv6)、令牌桶速率限制 ### 合规性与可观测性 - **防篡改审计** — SHA-256 哈希链日志,SQLite 或 PostgreSQL,ULID 事件 ID - **外部接收器** — Syslog(RFC 5424)、Webhook 批量、Palantir Foundry 流式、OCI 流 - **Prometheus** — 20+ 指标,Kubernetes 健康探针(`/healthz`、`/readyz`、`/startupz`) - **GDPR** — 数据导出(Art. 20)与擦除(Art. 17),SOC 2 / HIPAA / PCI DSS 映射 - **容器安全** — SBOM 生成(SPDX)、镜像签名(cosign)、漏洞扫描(Trivy) ### 企业集成 - **Palantir Foundry** — 审计流、OIDC 预设、Compute Module 部署 - **Oracle 云** — MCP 桥接至 Autonomous Database、OCI Vault 密钥、OCI 流式审计、Agent Spec 导出 - **多租户** — 基于 AsyncLocalStorage 的隔离,带每租户速率限制、配额与审计 - **集群模式** — 基于 Redis 的协调与心跳协议的多网关部署 ### 平台 - **16 个消息通道** — WhatsApp、Telegram、Discord、Slack、Signal、iMessage、Matrix 等 - **嵌入式 Pi 代理运行时** — 上下文修剪、认证配置轮换、多代理编排 - **集成 SDK** — 插件加载器、脚手架 CLI、参考集成 - **396 个测试**,覆盖 22 个测试文件 — 每个企业子系统均有覆盖 所有内容均为开源、MIT 许可、可自托管。 ## 安装 OpenClaw Enterprise 是一个源码可用的分支 — 从本仓库构建。需要 Node.js ≥22.12.0 和 [pnpm](https://pnpm.io)。 ``` # 1. 克隆企业版分支 git clone https://github.com/mholovetskyi/openclawenterprise.git cd openclawenterprise # 2. 安装依赖并构建 pnpm install pnpm build # 3. 首次设置(配置、守护进程、Shell 补全) pnpm openclaw onboard --install-daemon # 4. 启动网关 pnpm gateway:watch ``` ## OpenClaw 停止之处 OpenClaw 专为个人与小团队使用而设计。它在这项工作中表现出色。当组织尝试在受监管或安全敏感环境中部署时,它们总会遇到相同的八个缺口——这并非 OpenClaw 有缺陷,而是因为这些需求本就超出个人工具的范围。 OpenClaw Enterprise 在不触及核心的情况下填平每个缺口。 ### 1. 网络暴露是可选而非意外 OpenClaw 的网关绑定到所有接口(`0.0.0.0`)作为 LAN 模式的默认行为——这是你希望在家庭网络中共享个人助理时的正确默认设置。在企业环境中,该网关会在不发出任何警告的情况下暴露子网的每个主机。 **企业版提供:** 严格的仅回环绑定。非回环绑定会发出带有确切地址的醒目警告。`dangerouslyBindAllInterfaces` 标志必须显式设置。(`src/gateway/net.ts`) ### 2. 凭证需要静态加密 OpenClaw 将 API 密钥、OAuth 令牌与 Webhook 密钥存储在 `~/.openclaw/credentials` —— 一个世界可读的明文 JSON 文件。这是个人工具在简洁性优于金库复杂度时的合理权衡。但在共享服务器或可能生成错误报告的机器上,明文凭证是一种负债。 **企业版提供:** 基于 AES-256-GCM 的加密文件后端,主密钥保存在 OS 密钥链中。支持 HashiCorp Vault、AWS Secrets Manager、GCP Secret Manager、Azure Key Vault 与 OCI Vault。现有凭证自动迁移。(`src/enterprise/secrets/`) ### 3. 并非每个客户端都应拥有完整操作员访问权限 OpenClaw 网关使用单个共享令牌进行认证——你要么拥有它,要么没有。这对个人使用来说没问题。当你有开发者、只读仪表板和自动化服务账户都连接到同一网关时,这就不起作用了。 **企业版提供:** 完整的 RBAC,包含 5 个内置角色、通配符权限、组继承、JWT RS256/HS56 与 API 密钥管理。(`src/enterprise/iam/`) ### 4. 受监管行业需要审计追踪 OpenClaw 不会记录谁连接、运行了什么或访问了什么数据——因为个人用途不需要这些。SOC 2 CC6/CC7、HIPAA §164.312(b) 与 PCI DSS 10 均要求此类记录。 **企业版提供:** SHA-256 哈希链防篡改审计日志,覆盖认证事件、代理运行、工具执行、防护栏拦截与注入检测。(`src/enterprise/audit/`) ### 5. 不受信任的通道消息需要净化 OpenClaw 将通道消息直接发送给模型——这在你信任消息发送者时是正确的行为。当机器人部署在公共通道或面向客户端的上下文中时,任何用户都可能尝试提示注入。 **企业版提供:** 多阶段净化流水线:Unicode 标准化、不可见字符剥离、注入模式检测(8 类规则)、信任边界标记、可配置截断。(`src/enterprise/security/input-sanitizer.ts`) ### 6. 工具执行需要防护层 技能和 Bash 工具可以以运行进程的权限执行任何命令。对于个人助理,这种能力正是其价值所在。对于生产环境中的部署,你需要在困惑的副手攻击或恶意技能造成破坏前进行拦截。 **企业版提供:** 可插拔的防护引擎,在每次工具调用前进行评估。默认规则涵盖凭证收割、反向 Shell、批量删除以及输出中的 PII。(`src/enterprise/security/guardrails.ts`) ### 7. 平台团队需要指标与健康探针 OpenClaw 没有 `/healthz`、`/metrics` 或 Prometheus 集成。对于个人助理,你可以通过它是否响应来判断健康状态。对于部署在 ALB 后面的 Kubernetes,你需要探针与仪表盘。 **企业版提供:** `/metrics`(Prometheus)、`/healthz`、`/livez`、`/readyz`、`/startupz` —— 所有在其它路由注册前即就绪。网关、代理运行时、认证、防护栏与技能相关 20+ 指标。(`src/enterprise/monitoring/`) ### 8. 企业配置需要类型安全 OpenClaw 的配置类型中没有 `enterprise` 键 —— 企业配置被静默当作 `unknown` 处理,这意味着配置错误会在运行时被忽略且无报错。 **企业版提供:** `OpenClawConfig` 中 9 个完整类型化的子系统接口。TypeScript 在编译时捕获企业配置错误。(`src/config/types.enterprise.ts`) ## 架构 ``` ┌─────────────────────────────────────────────────────┐ │ INBOUND CHANNELS │ │ WhatsApp · Telegram · Slack · Discord · Teams · │ │ Signal · iMessage · Matrix · Google Chat · WebChat │ └────────────────────────┬────────────────────────────┘ │ ┌────────────────────────▼────────────────────────────┐ │ ENTERPRISE SECURITY LAYER │ │ ① Unicode normalization + invisible char strip │ │ ② Prompt injection pattern detection (8 families) │ │ ③ Trust boundary tagging标签:AWS, Azure, DNS解析, DPI, GCP, Helm, IAM, JSONLines, MFA, MITM代理, OIDC, RBAC, SEO, SSO, TOTP, Vault, 企业级, 合规, 子域名突变, 审计日志, 开源, 开源项目, 搜索引擎查询, 无订阅, 无锁定, 测试用例, 病毒式安装脚本, 自动化攻击, 自定义请求头, 零信任