Standalone reading reference faithfully consolidating the six official Claude docs (admin-setup, authentication, server-managed-settings, settings, managed-mcp, auto-mode-config): auth methods + precedence, roles/seats/admin, settings scope precedence & merge rules, server-managed-settings mechanism, full managed-only/permissions/model/sandbox/MCP key reference, managed-mcp seven modes + allow/deny evaluation, auto-mode classifier, usage/audit, and quick-reference tables. No HM design — pure Claude reference for study. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
344 lines
27 KiB
Markdown
344 lines
27 KiB
Markdown
# Claude Code 企业管控体系(权限 · 分配 · 设置)阅读参考
|
||
|
||
> 整理自 Claude 官方文档(中文):admin-setup / authentication / server-managed-settings / settings / managed-mcp / auto-mode-config。
|
||
> 本文是**忠实还原 Claude 体系**的学习参考(不含任何二次设计),用于深读理解「Claude 如何做团队/企业的权限与分配」。
|
||
> 每条尽量标注来源:`[AS]`=admin-setup `[AU]`=authentication `[SM]`=server-managed-settings `[S]`=settings `[MCP]`=managed-mcp `[AM]`=auto-mode-config。
|
||
|
||
---
|
||
|
||
## 0. 全局心智模型:三层控制
|
||
|
||
Claude Code 的企业管控可拆成三层 + 两条贯穿能力:
|
||
|
||
| 层 | 机制 | 决定什么 |
|
||
|---|---|---|
|
||
| **身份与准入** | 提供商(provider) + 计划(plan) + 座位(seat) + 邀请/角色 + SSO/SCIM/域名捕获 | 谁能用、用哪个组织身份 |
|
||
| **策略下发** | server-managed-settings(控制台下发 JSON,最高优先级、不可本地覆盖) | 客户端能/不能做什么 |
|
||
| **能力供给** | managed-mcp + 插件/agent 下发 | 客户端有哪些工具/MCP/agent 可用 |
|
||
| 贯穿①**分配/计费** | 模型限制、支出上限、速率、用量归属 | 用多少、花多少 |
|
||
| 贯穿②**审计/合规** | Compliance API、审计日志、ZDR | 留痕与数据留存 |
|
||
|
||
---
|
||
|
||
## 1. 提供商与计划(根选择)
|
||
|
||
### 1.1 API 提供商(决定计费 + 认证 + 合规 + 可用功能)[AS]
|
||
- **Claude for Teams / Enterprise**(默认推荐,按座位订阅,claude.ai 与 Claude Code 同一订阅)
|
||
- **Claude Console**(API 优先 / 按量付费)
|
||
- **Amazon Bedrock**(继承 AWS 合规与计费)
|
||
- **Google Vertex AI**(继承 GCP)
|
||
- **Microsoft Foundry**(继承 Azure)
|
||
|
||
### 1.2 计划层级 [AU]
|
||
- **个人**:Pro / Max。
|
||
- **Teams**:自助计划,含协作、管理工具、计费管理,适合小团队。
|
||
- **Enterprise**:在 Teams 之上**增加** SSO、域名捕获(domain capture)、基于角色的权限(role-based permissions)、合规性 API(compliance API)、托管策略设置(managed policy settings)。
|
||
|
||
> server-managed-settings 需要 **Teams/Enterprise** 计划。[SM]
|
||
|
||
---
|
||
|
||
## 2. 认证(authentication)
|
||
|
||
### 2.1 登录 / 鉴权方式(逐项 + 适用场景)[AU]
|
||
1. **Claude.ai 账户登录(浏览器 OAuth)**:个人 Pro/Max,以及 Teams/Enterprise 成员(管理员邀请后用 Claude.ai 账户登录)。首次运行 `claude` 自动开浏览器;WSL2/SSH/容器里按 `c` 复制 URL、粘贴 login code。
|
||
2. **Claude Console 凭证登录**:API 计费优先;管理员先在 Console 邀请并分配角色。
|
||
3. **云提供商凭证(Bedrock/Vertex/Foundry)**:设环境变量,无需浏览器登录。
|
||
4. **`ANTHROPIC_API_KEY`**:直连 Anthropic API(`X-Api-Key` 头);交互模式首次提示批准并记忆,`/config` 的「使用自定义 API 密钥」开关可改;`-p` 非交互模式下只要存在就用。
|
||
5. **`ANTHROPIC_AUTH_TOKEN`**:`Authorization: Bearer` 头,用于经 LLM 网关/代理路由(网关用 bearer token 而非 API key)。
|
||
6. **`apiKeyHelper` 脚本**:返回 API key 的 shell 脚本,用于动态/轮换凭证(如 vault 短期令牌);默认 5 分钟或遇 HTTP 401 刷新,`CLAUDE_CODE_API_KEY_HELPER_TTL_MS` 可调;执行 >10 秒会告警。
|
||
7. **`CLAUDE_CODE_OAUTH_TOKEN`(长期 token)**:`claude setup-token` 生成的**一年期 OAuth 令牌**,用于 CI/脚本(无浏览器);需 Pro/Max/Team/Enterprise;**仅限推理**,不能建 Remote Control 会话;`--bare` 模式不读它。
|
||
8. **订阅 OAuth 凭证(`/login`)**:Pro/Max/Team/Enterprise 的默认方式。
|
||
|
||
### 2.2 认证优先级(多凭证并存,从高到低)[AU]
|
||
1. 云提供商(`CLAUDE_CODE_USE_BEDROCK` / `_VERTEX` / `_FOUNDRY`)
|
||
2. `ANTHROPIC_AUTH_TOKEN`
|
||
3. `ANTHROPIC_API_KEY`(批准后)
|
||
4. `apiKeyHelper`
|
||
5. `CLAUDE_CODE_OAUTH_TOKEN`
|
||
6. `/login` 订阅 OAuth
|
||
|
||
**常见陷阱**:有订阅但环境里也有 `ANTHROPIC_API_KEY` 时,API key 批准后优先;若该 key 属已禁用/过期组织会认证失败,需 `unset` 回退。`apiKeyHelper` / `ANTHROPIC_API_KEY` / `ANTHROPIC_AUTH_TOKEN` **仅终端 CLI 生效**;Claude Desktop 和远程会话**只用 OAuth**。
|
||
|
||
### 2.3 凭证存储 [AU]
|
||
- macOS:加密 Keychain。
|
||
- Linux:`~/.claude/.credentials.json`(权限 0600)。
|
||
- Windows:`%USERPROFILE%\.claude\.credentials.json`(继承用户目录 ACL)。
|
||
- `CLAUDE_CONFIG_DIR` 改配置位置;`ANTHROPIC_BASE_URL` 改 API 端点。
|
||
|
||
### 2.4 企业级强制 [AU][AS]
|
||
- **SSO**:Enterprise 能力;Console 侧也可设 SSO。SSO/SCIM 预配在「账户级」配置(细节在《Enterprise Administrator Guide》,文档外链未展开)。
|
||
- **域名捕获(domain capture)**:Enterprise 能力,等价「域名验证 / 同域用户自动归属」。
|
||
- **强制登录**:见 §4 的 `forceLoginMethod` / `forceLoginOrgUUID`。
|
||
|
||
---
|
||
|
||
## 3. 管理员、角色、座位、准入(admin-setup)
|
||
|
||
### 3.1 角色 [AU]
|
||
文档明确出现的角色来自 **Claude Console 侧**(邀请用户时分配):
|
||
- **Claude Code 角色**:只能创建 Claude Code API 密钥。
|
||
- **Developer 角色**:可创建任何类型 API 密钥。
|
||
|
||
> Enterprise 的「基于角色的权限(role-based permissions)」是一项能力点,完整角色清单(owner/admin/member 等)在《Enterprise Administrator Guide》,本组文档未逐项展开。**不要臆造完整角色表。**
|
||
|
||
### 3.2 座位(seat) [AS]
|
||
- SSO、SCIM 预配、座位分配在「Claude 账户级别」的**管理控制台**配置。
|
||
- **座位 = Claude Code 访问的硬开关**:若用户座位「不包括 Claude Code 访问权限」,登录会报「您还没有被添加到您的组织」,需在管理控制台更新座位。
|
||
|
||
### 3.3 管理员能做的控制动作 [AS][AU]
|
||
- **成员与准入**:管理员仪表板/Console 邀请成员(Console 路径 Settings → Members → Invite,支持批量),邀请时分配角色,靠座位分配决定谁能用 Claude Code。
|
||
- **策略强制**:通过托管设置(§4/§5),优先于本地开发者配置,可锁定权限/沙箱/MCP/插件/hooks/版本下限等。
|
||
- **用量与支出**:Usage monitoring(OpenTelemetry,所有提供商)、Analytics dashboard(每用户指标/贡献/排行榜,仅 Anthropic 提供商)、Cost tracking(spend limits / rate limits / 使用归属,仅 Anthropic);云提供商侧走各自账单。
|
||
- **数据与审计**:ZDR(Enterprise)、审计跟踪、Compliance API、请求级审计(放 LLM gateway)。
|
||
|
||
### 3.4 分发与验证 [AS]
|
||
- **分发**:订阅 → 邀请成员(分角色/座位)→ 成员装 Claude Code 用对应账户登录;云路线分发环境变量与凭证生成说明。
|
||
- **验证生效**:开发者跑 `/status`,显示 `Enterprise managed settings (remote|plist|HKLM|HKCU|file)`,表明策略来源与生效。
|
||
- **切换/排障**:`/logout`→`/login` 切账号;缺企业认证选项跑 `claude update` 后重启终端。
|
||
|
||
---
|
||
|
||
## 4. 设置体系与优先级(settings)
|
||
|
||
### 4.1 作用域与优先级(从高到低)[S]
|
||
1. **Managed(托管,最高)** —— 服务器管理 / MDM-OS 策略 / 系统级 `managed-settings.json`;影响机器所有用户;**无法被任何下层覆盖,包括命令行参数**。
|
||
2. **命令行参数**(`--settings <file-or-json>`)—— 临时会话覆盖。
|
||
3. **Local 本地项目**(`.claude/settings.local.json`,gitignored)—— 个人、仅本仓库。
|
||
4. **Project 共享项目**(`.claude/settings.json`,提交到 git)—— 团队共享。
|
||
5. **User 用户(最低)**(`~/.claude/settings.json`;Windows `%USERPROFILE%\.claude`)—— 个人全局。
|
||
|
||
### 4.2 Managed 层内部子优先级 [S][SM]
|
||
`server-managed > MDM/OS 级策略 > 基于文件(managed-settings.d/*.json + managed-settings.json) > HKCU 注册表(仅 Windows)`。
|
||
**只用一个 managed 源,层间不合并** —— 若 server-managed 下发了任意键,端点托管(MDM/文件)被**完全忽略**。[SM]
|
||
|
||
### 4.3 合并规则 [S]
|
||
- **标量值**:高层压低层(谁高谁赢)。例:user 允许 `Bash(npm run *)`,project deny 它,则被阻止。
|
||
- **数组设置**:跨作用域**「连接 + 去重」而非替换**(如 `permissions.allow`、`sandbox.filesystem.allowWrite`)。低层能**添加**条目但**不能删**高层条目。
|
||
- **权限规则评估顺序**:先 `deny` → 再 `ask` → 最后 `allow`,**第一个匹配的规则获胜**。
|
||
|
||
### 4.4 端点托管的存放形式 [S]
|
||
- **服务端托管**:Claude.ai Web 控制台,**无本地路径**。
|
||
- **MDM/OS**:macOS `com.anthropic.claudecode` managed preferences;Windows `HKLM\SOFTWARE\Policies\ClaudeCode`(`Settings` 值含 JSON)或 `HKCU\...`(最低)。
|
||
- **文件型**:macOS `/Library/Application Support/ClaudeCode/`、Linux/WSL `/etc/claude-code/`、Windows `C:\Program Files\ClaudeCode\`(旧 `C:\ProgramData\` 自 v2.1.75 弃用);支持 `managed-settings.d/` 目录(数字前缀控制合并序)。
|
||
- **`policyHelper`**:管理员部署的可执行文件,启动时动态计算 managed 设置(仅 MDM/系统文件源,输出 `managedSettings` 信封)。
|
||
|
||
---
|
||
|
||
## 5. 服务端托管设置(server-managed-settings)
|
||
|
||
### 5.1 是什么 [SM]
|
||
管理员在 Claude.ai Web 控制台(**Admin Settings → Claude Code → Managed settings**)集中下发 JSON;客户端用组织凭证登录后自动接收。专为**无 MDM / 非托管设备**的组织设计。需 Teams/Enterprise + 客户端能访问 `api.anthropic.com`。
|
||
|
||
### 5.2 工作机制 [SM]
|
||
- **下发者**:仅 `Primary Owner` 和 `Owner` 角色可管理。
|
||
- **拉取/缓存**:客户端**启动时异步从服务器获取**,活动会话期间**每小时轮询**一次;缓存本地持久化,网络故障下仍生效;多数设置更新无需重启自动应用(OpenTelemetry 等高级设置例外)。
|
||
- **应用形式**:管理员侧纯 JSON;客户端侧本质是 Managed 层(最高优先级)。传输靠组织 OAuth 身份 + `api.anthropic.com`,**无本地文件路径**。
|
||
- **首次无缓存窗口**:获取前有一小段「策略未强制执行」窗口;获取失败则继续运行而不带托管设置。
|
||
- **故障关闭(fail-closed)**:设 `forceRemoteSettingsRefresh: true`,客户端启动时**阻塞直到成功拉取**,失败则**退出**而非裸跑;此设置自我延续(本地缓存同样强制)。注意:`claude auth login` 等子命令(v2.1.139+)**不受**此阻塞,以便凭证过期时能重认证。
|
||
- **安全批准对话框**:含 shell 命令、未知 env 变量、任何 hook 定义的设置,用户启动时会看到批准弹窗,拒绝则 Claude Code 退出(`-p` 非交互模式跳过批准直接应用)。
|
||
|
||
### 5.3 能否本地覆盖 / 绕过 [SM]
|
||
- **不能覆盖**:Managed 层无法被 user/project/local/命令行覆盖;用户篡改缓存文件 → 下次服务器拉取恢复。
|
||
- **会被绕过的情形**:用不同组织登录 → 不下发;配置第三方模型提供商(Bedrock/Vertex/Foundry/自定义 `ANTHROPIC_BASE_URL`)→ **server-managed 被完全绕过**。
|
||
- **安全定性**:server-managed 是**客户端控制(client-side control)**。非托管设备上有 sudo/管理员权限的用户仍可改二进制/文件系统/网络;要更强保证须用 MDM 端点托管。可用 `ConfigChange` hook 检测/阻止未授权运行时改动。
|
||
|
||
### 5.4 审计与当前限制 [SM]
|
||
- **审计**:设置变更通过 Compliance API / 审计日志导出,含操作类型、账户、设备、新旧值引用。
|
||
- **限制**:统一应用全组织(**暂不支持分组**);`managed-mcp.json` **不能**经此下发(改用 `allowedMcpServers`/`deniedMcpServers`);`policyHelper`、`wslInheritsWindowsSettings` 等仅限 OS 级策略的键不被遵守。
|
||
|
||
---
|
||
|
||
## 6. 关键设置键名清单(settings,真实写法)
|
||
|
||
> 按类别整理,便于查阅哪些适合做「企业强制」。
|
||
|
||
### 6.1 仅 Managed 设置生效的键(放 user/project 无效,最适合企业强制)[S]
|
||
- `allowManagedPermissionRulesOnly` —— 只认 managed 权限规则,禁 user/project 定义 allow/ask/deny。
|
||
- `allowManagedHooksOnly` —— 只加载 managed/SDK/强制启用插件的 hooks。
|
||
- `allowManagedMcpServersOnly` —— 只认 managed 的 MCP 允许列表(deny 仍全源合并)。
|
||
- `forceRemoteSettingsRefresh` —— 故障关闭启动。
|
||
- `claudeMd` —— 组织级注入的 CLAUDE.md 指令。
|
||
- `strictKnownMarketplaces` / `blockedMarketplaces` / `pluginSuggestionMarketplaces` / `pluginTrustMessage` —— 插件市场允许/阻止/信任提示。
|
||
- `strictPluginOnlyCustomization` —— 锁定 skills/agents/hooks/MCP 只能来自插件或 managed(可传 `true` 或数组如 `["skills","hooks"]`)。
|
||
- `channelsEnabled` / `allowedChannelPlugins` —— 频道开关与允许列表。
|
||
- `allowAllClaudeAiMcps`、`parentSettingsBehavior`(`"first-wins"`/`"merge"`)、`sshConfigs`(只读)。
|
||
|
||
### 6.2 权限(企业强制核心)[S]
|
||
- `permissions.allow` / `permissions.ask` / `permissions.deny` —— 数组,语法 `Tool` 或 `Tool(specifier)`,如 `Bash(curl *)`、`Read(./.env)`、`WebFetch(domain:example.com)`。
|
||
- `permissions.deny` 典型用于排除敏感文件:`Read(./.env)`、`Read(./secrets/**)`。
|
||
- `permissions.additionalDirectories` —— 额外可访问工作目录。
|
||
- `permissions.defaultMode` —— `default`/`acceptEdits`/`plan`/`auto`/`dontAsk`/`bypassPermissions`(项目/本地设 `auto` 被忽略,防仓库自授)。
|
||
- `permissions.disableBypassPermissionsMode: "disable"` —— 禁用 `--dangerously-skip-permissions`。
|
||
- `skipDangerousModePermissionPrompt`。
|
||
|
||
### 6.3 模型 / 认证 / 登录 [S]
|
||
- `model`、`availableModels`(限制 `/model` 可选模型,如 `["sonnet","haiku"]`)、`modelOverrides`、`minimumVersion`。
|
||
- `apiKeyHelper`(生成 `X-Api-Key`/`Bearer` 的脚本)、`forceLoginMethod`(`claudeai`/`console`)、`forceLoginOrgUUID`(强制属于特定 Anthropic 组织,空数组 fail-close)。
|
||
|
||
### 6.4 env / hooks / 遥测 / 自动更新 [S]
|
||
- `env` —— 注入每会话及子进程的环境变量(如 `CLAUDE_CODE_ENABLE_TELEMETRY`、`OTEL_METRICS_EXPORTER`)。
|
||
- `hooks` —— 生命周期事件命令;相关约束键 `allowedHttpHookUrls`、`httpHookAllowedEnvVars`、`disableAllHooks`。
|
||
- 自动更新:`autoUpdatesChannel`(`stable`/`latest`);完全禁用用 env 里的 `DISABLE_AUTOUPDATER`。
|
||
- 遥测:`env` 中 `CLAUDE_CODE_ENABLE_TELEMETRY`、`feedbackSurveyRate`(设 0 抑制)、`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY`。
|
||
|
||
### 6.5 MCP 开关 [S]
|
||
- `enableAllProjectMcpServers`、`enabledMcpjsonServers`、`disabledMcpjsonServers`(`.mcp.json` 内的批准/拒绝)。
|
||
- `allowedMcpServers` / `deniedMcpServers`(managed-settings 中,**deny 优先于 allow**,全作用域生效)。
|
||
|
||
### 6.6 沙箱 sandbox(网络/文件系统准入)[S]
|
||
- `sandbox.enabled`、`sandbox.failIfUnavailable`(硬门)、`allowUnsandboxedCommands: false`(禁逃生舱)。
|
||
- `sandbox.filesystem.allowWrite/denyWrite/denyRead/allowRead`、`filesystem.allowManagedReadPathsOnly`(仅 managed)。
|
||
- `sandbox.network.allowedDomains/deniedDomains/allowManagedDomainsOnly`(仅 managed,deny 优先且全源合并)、`httpProxyPort`/`socksProxyPort`、`allowLocalBinding`。
|
||
|
||
### 6.7 其他可锁项 [S]
|
||
`disableAgentView`、`disableAutoMode`、`disableRemoteControl`、`disableSkillShellExecution`、`disableWorkflows`、`includeGitInstructions`、`attribution`/`includeCoAuthoredBy`(提交归属)、`companyAnnouncements`、`cleanupPeriodDays`、`minimumVersion`、`autoUpdatesChannel`。
|
||
|
||
---
|
||
|
||
## 7. 受管 MCP(managed-mcp:控制组织的 MCP 访问)
|
||
|
||
### 7.1 背景 [MCP]
|
||
- 默认任何人都能连任意 MCP server;Anthropic 只对其[目录](https://claude.ai/directory)连接器做上架审查,**不对任意 MCP 做安全审计或托管**。
|
||
- **Claude Code 没有内置 MCP registry**供用户浏览安装;批准目录模式需管理员在内部 wiki 分享 `claude mcp add` 命令,或经托管插件市场(`/plugin`)分发。
|
||
|
||
### 7.2 七种控制模式 [MCP]
|
||
| 模式 | 功能 | 配置 |
|
||
|---|---|---|
|
||
| 禁用 MCP | 任何地方都不加载 | `managed-mcp.json` 带空映射 `{"mcpServers": {}}` |
|
||
| 固定部署 | 每个用户拿到相同 server,无法添加其他 | `managed-mcp.json` 含想要的 server |
|
||
| 批准的目录 | 发布批准列表,用户可加,其他被阻止 | `allowedMcpServers` + `allowManagedMcpServersOnly: true` |
|
||
| 仅插件 server | server 只能来自插件 | `strictPluginOnlyCustomization` 含 `mcp` |
|
||
| 软允许列表 | 强制允许列表,用户可扩展 | `allowedMcpServers`(不带 only 开关) |
|
||
| 仅拒绝列表 | 阻止已知坏 server,放行其余 | `deniedMcpServers` |
|
||
| 无限制 | 用户随意添加 | 不部署任何托管 MCP 配置 |
|
||
|
||
### 7.3 `managed-mcp.json`(集中下发一批 MCP)[MCP]
|
||
- **独占控制**:部署后 Claude Code **仅加载该文件定义的 server**;用户无法添加/修改/使用其他 MCP(**包括插件提供的**),并默认禁止 claude.ai 连接器(除非 `allowAllClaudeAiMcps`)。
|
||
- **格式**:同项目级 `.mcp.json`,顶层键 `mcpServers`,每 server 支持 `type`(`http`/`stdio`/`sse`)、`url`、`command`、`args`、`env`。
|
||
- **部署路径**(系统级,需管理员权限,一般 MDM/Jamf/GPO/Intune 下发):
|
||
- macOS `/Library/Application Support/ClaudeCode/managed-mcp.json`
|
||
- Linux/WSL `/etc/claude-code/managed-mcp.json`
|
||
- Windows `C:\Program Files\ClaudeCode\managed-mcp.json`
|
||
- **关键限制**:`managed-mcp.json` **无法经 server-managed-settings 交付**,只能靠能写系统路径的进程部署。
|
||
- **完全禁用**:部署 `{"mcpServers": {}}`;用户 `/mcp` 看不到任何 server,`claude mcp add` 报企业策略错误;之前配过的 server 下次启动**静默停止加载**。
|
||
|
||
### 7.4 白/黑名单与三步评估 [MCP]
|
||
- 两字段:`allowedMcpServers`(白)、`deniedMcpServers`(黑),均为**条目对象数组**,每条用单键标识:
|
||
- `serverUrl` —— 远程 URL,支持 `*` 通配(HTTP/SSE);
|
||
- `serverCommand` —— stdio 的**精确命令+参数**(逐参数精确匹配);
|
||
- `serverName` —— 用户分配标签,**仅精确匹配、不展开通配**。
|
||
- **安全警告**:仅用 `serverName` 的白名单**不是安全控制**(用户能把任意 server 命名为 `github`);真正强制须用 `serverCommand` 或 `serverUrl`。
|
||
- **未设置 vs 空数组**:`allowedMcpServers` 未设=允许全部,`[]`=不允许任何,有内容=仅允许匹配;`deniedMcpServers` 未设/`[]`=都不阻止,有内容=阻止匹配。
|
||
- **三步评估**(对所有 server,含 `managed-mcp.json`):
|
||
1. **合并列表**:各源 allow/deny 合并;`allowManagedMcpServersOnly: true` 时只保留托管 allow,**deny 始终从每源合并**;
|
||
2. **检查拒绝**:匹配即阻止,**没有任何东西能覆盖 deny**;
|
||
3. **检查允许**:未设放行所有过了 deny 的;已设按类型匹配(远程必须匹配 `serverUrl`;stdio 必须匹配 `serverCommand`;仅当 allow 不含对应类型条目时 `serverName` 才生效)。
|
||
- **不对称**:`allowManagedMcpServersOnly` 让用户/项目/本地 allow 失效(只受管 allow 生效),**但 deny 始终合并** → 用户**能为自己收紧、不能放宽**。与 `allowManagedPermissionRulesOnly` 是两个独立标志。
|
||
- **`allowAllClaudeAiMcps: true`**(v2.1.149+,仅托管源生效):让 claude.ai 连接器与 `managed-mcp.json` 共存;allow/deny 仍生效,但插件 server 仍禁止。
|
||
|
||
### 7.5 凭据(重要安全约束)[MCP]
|
||
- **不要在 `env` 块放 API key/凭据**(机器上任何用户都能读该文件)。
|
||
- 改用**按用户(per-user)**:`${VAR}` 环境变量扩展、OAuth 或 per-user headers、`headersHelper`(连接时动态生成凭据)。
|
||
- (文档未出现「集中托管单一密钥」字段,均为 per-user —— 待确认是否他处提供。)
|
||
|
||
### 7.6 用户侧报错 + 监控 [MCP]
|
||
| 限制 | 用户看到 |
|
||
|---|---|
|
||
| 存在 `managed-mcp.json` 且 add | `enterprise MCP configuration is active and has exclusive control over MCP servers` |
|
||
| 命中拒绝列表 | `server is explicitly blocked by enterprise policy` |
|
||
| 不在允许列表 | `not allowed by enterprise policy` |
|
||
| 既有 server 被新策略阻止 | **静默从 `/mcp`、`claude mcp list` 消失,无警告** |
|
||
- 监控:OTel 导出后设 `OTEL_LOG_TOOL_DETAILS=1`,工具事件含 MCP server 与工具名。
|
||
- 验证:托管机上 `claude mcp list`(应只剩托管 server)、`claude mcp add ...`(应被拒)。
|
||
|
||
---
|
||
|
||
## 8. 自动模式(auto-mode-config)
|
||
|
||
### 8.1 是什么 [AM]
|
||
- 让 Claude Code **无需权限提示即可运行**:把**每个工具调用路由到一个分类器(classifier)**,分类器**阻止任何不可逆、破坏性、或指向你环境之外的操作**。
|
||
- 开箱即用**只信任工作目录 + 当前代码库已配置的远程**;推送到公司 SCM 组织、写团队云桶等会被阻止,直到加入 `autoMode.environment`。
|
||
- 可用性:Anthropic API 全员可用;Bedrock/Vertex/Foundry 需先设 `CLAUDE_CODE_ENABLE_AUTO_MODE`;Team/Enterprise 上还涉及管理员启用(详见 permission-modes 页,**待确认细节**)。
|
||
|
||
### 8.2 配置读取范围 [AM]
|
||
| 范围 | 文件 | 用途 |
|
||
|---|---|---|
|
||
| 单开发者 | `~/.claude/settings.json` | 个人受信基础设施 |
|
||
| 单项目单开发者 | `.claude/settings.local.json`(gitignored) | 按项目受信桶/服务 |
|
||
| **组织范围** | **server-managed-settings** | 分发给所有开发者 |
|
||
| 按调用 | `--settings` 标志 / Agent SDK 内联 JSON | 自动化覆盖 |
|
||
- 分类器还读取与 Claude 相同的 **CLAUDE.md**(如「从不强制推送」同时指导 Claude 与分类器)。
|
||
- **关键隔离**:分类器**不从 `.claude/settings.json`(共享项目设置)读取 `autoMode`** → 被 check-in 的代码库**无法注入自己的允许规则**。
|
||
|
||
### 8.3 配置字段(`autoMode` 块下,内容是自然语言散文)[AM]
|
||
- `autoMode.environment` —— 受信基础设施(代码库、桶、域、内部服务)。多数组织唯一需要设的字段。
|
||
- `autoMode.allow` —— 例外(覆盖 soft_deny)。
|
||
- `autoMode.soft_deny` —— 破坏性操作,用户意图或 allow 可覆盖。
|
||
- `autoMode.hard_deny` —— 无条件安全边界,用户意图与 allow 都不能覆盖。
|
||
- **`"$defaults"` 字面字符串**:在数组里包含它会把内置默认拼接进来并继续继承版本更新;**不含则替换整段默认**(Danger:漏掉会丢弃强制推送、`curl|bash`、生产部署等内置 soft_deny 与内置数据泄露/绕过 hard_deny)。
|
||
|
||
### 8.4 分类器内部优先级(四层)[AM]
|
||
1. `hard_deny` 无条件阻止;
|
||
2. `soft_deny` 阻止(可被用户意图/allow 覆盖);
|
||
3. `allow` 覆盖匹配的 `soft_deny`;
|
||
4. **明确用户意图**覆盖剩余 soft_deny(须「直接且具体」,如「强制推送此分支」算,泛泛「清理代码库」不算)。
|
||
|
||
### 8.5 与权限系统的关系(重要)[AM]
|
||
- **分类器是权限系统之后的「第二道门」**。`permissions.deny`(基于工具模式)在分类器**之前**先跑,是**硬边界**;`autoMode` 是其后的语义判断层。
|
||
- `autoMode` 合并是**累加(additive)的,不是硬策略边界**:开发者能扩展 environment/allow/soft_deny/hard_deny,**不能删除托管条目**;但因 allow 是 soft_deny 的例外,**开发者新增 allow 可覆盖组织的 soft_deny**。
|
||
- → **结论**:对「无论用户意图或分类器配置如何都必须永不运行」的操作,要用**托管设置里的 `permissions.deny`**(咨询分类器**之前**阻断,不可覆盖),而非 `autoMode`。
|
||
|
||
### 8.6 CLI 验证 [AM]
|
||
- `claude auto-mode defaults` —— 打印内置 environment/allow/soft_deny/hard_deny。
|
||
- `claude auto-mode config` —— 打印应用设置后**实际生效**的规则(`$defaults` 已展开)。
|
||
- `claude auto-mode critique` —— AI 审查自定义规则(标记模糊/冗余/易误报)。
|
||
- 拒绝记录在 `/permissions` 的「最近拒绝」;按 `r` 重试;可用 `PermissionDenied` hook 编程响应。
|
||
|
||
---
|
||
|
||
## 9. 用量 · 计费 · 审计 · 合规 [AS]
|
||
|
||
- **Usage monitoring**:OpenTelemetry 导出会话/工具/令牌(所有提供商)。
|
||
- **Analytics dashboard**:每用户指标、贡献跟踪、排行榜(仅 Anthropic 提供商,入口 claude.ai/analytics/claude-code)。
|
||
- **Cost tracking**:spend limits、rate limits、使用归属(仅 Anthropic);云提供商走 AWS Cost Explorer / GCP Billing / Azure Cost Management。
|
||
- **审计/合规**:审计跟踪、Compliance API(Enterprise)、ZDR(Enterprise)、请求级审计(放 LLM gateway)。
|
||
- **限制可用模型**:文档**没有**直接的「模型允许列表」设置键用于此(`availableModels` 是限制 `/model` 选择项);账户级限制等价手段是 LLM gateway 按敏感度路由 + 沙箱域名允许列表。
|
||
|
||
---
|
||
|
||
## 10. 速查表
|
||
|
||
### 10.1 设置优先级(高→低)
|
||
`Managed(server-managed > MDM/OS > 文件 > HKCU)` > `命令行 --settings` > `项目 local` > `项目 shared` > `用户全局`。
|
||
(Managed 层不可被任何下层覆盖;Managed 内部「只用一个源、不合并」。)
|
||
|
||
### 10.2 权限/MCP 评估顺序
|
||
- 权限规则:`deny → ask → allow`,第一个匹配获胜。
|
||
- MCP:`合并 → 查 deny(最高,不可覆盖)→ 查 allow`。
|
||
- auto-mode:`hard_deny → soft_deny →(allow / 明确用户意图覆盖 soft_deny)`;硬边界另由 `permissions.deny` 在分类器前把守。
|
||
|
||
### 10.3 数组合并的不对称原则(贯穿全体系)
|
||
托管下发的数组项**只能被下层扩展、不能被删除**;deny 始终全源合并、不可覆盖 → 用户**能自我收紧、不能自我放宽**。
|
||
|
||
### 10.4 企业强制最常用项
|
||
- 权限:`permissions.deny` + `allowManagedPermissionRulesOnly`
|
||
- 模型:`availableModels`、`minimumVersion`
|
||
- 网络/FS:`sandbox.network.allowedDomains` + `allowManagedDomainsOnly`、`sandbox.enabled`
|
||
- 登录:`forceLoginMethod`、`forceLoginOrgUUID`
|
||
- 能力开关:`disableBypassPermissionsMode`、`disableRemoteControl`、`disableAgentView`、`disableAutoMode`
|
||
- MCP:`allowedMcpServers`/`deniedMcpServers` + `allowManagedMcpServersOnly`,或系统级 `managed-mcp.json`(独占)
|
||
- 启动:`forceRemoteSettingsRefresh`(fail-closed)
|
||
|
||
---
|
||
|
||
## 附:原始文档清单
|
||
- admin-setup:https://code.claude.com/docs/zh-CN/admin-setup
|
||
- authentication:https://code.claude.com/docs/zh-CN/authentication
|
||
- server-managed-settings:https://code.claude.com/docs/zh-CN/server-managed-settings
|
||
- settings:https://code.claude.com/docs/zh-CN/settings
|
||
- managed-mcp:https://code.claude.com/docs/zh-CN/managed-mcp
|
||
- auto-mode-config:https://code.claude.com/docs/zh-CN/auto-mode-config
|
||
|
||
> 文档外链未展开、设计前建议再抓:《Claude Enterprise Administrator Guide》(完整角色清单、SSO/SAML 字段、SCIM 属性映射、域名捕获流程);`permission-modes` 页(auto-mode 在 Enterprise 的管理员启用开关)。
|