首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Claude Code 安全最佳实践:企业级防护指南

Claude Code 安全最佳实践:企业级防护指南

作者头像
阿特拉斯
发布2026-06-15 18:16:39
发布2026-06-15 18:16:39
4620
举报

让 AI 助手在企业环境中安全运行,不泄露敏感数据,不执行危险操作。


Claude Code 能读写文件、执行命令、调用 API。这种能力越强,安全风险越大。

企业使用最关心的问题:如何防止 AI 泄露密钥、破坏生产环境、执行未授权操作?

这篇文章系统梳理 Claude Code 的安全机制和最佳实践。


一、风险矩阵

首先明确风险类型:

风险

场景

后果

密钥泄露

Claude 读取 .env 并输出到对话

凭据暴露

文件篡改

Claude 修改 package-lock.json

依赖被污染

命令注入

Claude 执行 rm -rf 或 git push --force

数据丢失

越权访问

Claude 通过 MCP 访问未授权资源

权限突破

上下文污染

恶意输入注入指令

行为劫持

核心原则:最小权限 + 显式确认 + 防护层。


二、敏感文件保护

2.1 默认保护

Claude Code 默认不会读取这些文件:

.env

.env.*

*.pem

*.key

credentials.json

secrets.*

但这只是默认行为,Claude 仍可能被诱导读取。

2.2 PreToolUse 拦截

用 Hooks 在工具执行前拦截敏感文件访问:

#!/bin/bash

INPUT=$(cat)

FILE_PATH=(echo "

SENSITIVE_PATTERNS=(

".env"

".env.local"

".env.production"

"credentials"

"secrets"

"*.pem"

"*.key"

"id_rsa"

"id_ed25519"

"*.p12"

"*.pfx"

"package-lock.json"

"yarn.lock"

"pnpm-lock.yaml"

)

for pattern in "${SENSITIVE_PATTERNS[@]}"; do

if [[ "

echo "🚫 Blocked:

exit 2 # exit 2 = 阻止操作

fi

done

exit 0 # exit 0 = 放行

配置到 settings.json:

{

"hooks": {

"PreToolUse": [

{

"matcher": "Read|Edit|Write",

"hooks": [

{

"type": "command",

"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/protect-sensitive.sh"

}

]

}

]

}

}

2.3 阻止输出敏感信息

即使读取了敏感文件,也要阻止 Claude 输出:

#!/bin/bash

INPUT=$(cat)

PATTERNS=(

"sk-[a-zA-Z0-9]{20,}" # OpenAI API Key

"sk-ant-[a-zA-Z0-9]{20,}" # Anthropic API Key

"ghp_[a-zA-Z0-9]{36}" # GitHub Token

"AKIA[0-9A-Z]{16}" # AWS Access Key

"[a-f0-9]{32}" # 可能的 MD5/Secret

)

for pattern in "${PATTERNS[@]}"; do

if echo "

echo "🚫 Output contains potential secret, blocked" >&2

exit 2

fi

done

exit 0


三、命令执行控制

3.1 危险命令拦截

阻止高风险命令:

#!/bin/bash

INPUT=$(cat)

COMMAND=(echo "

DANGEROUS_PATTERNS=(

"rm -rf /"

"rm -rf ~"

"rm -rf *"

"git push --force"

"git reset --hard HEAD~"

"DROP TABLE"

"DROP DATABASE"

"TRUNCATE"

"DELETE FROM"

":(){:|:&};:" # Fork bomb

"chmod -R 777"

"chown -R"

"> /dev/sda"

"dd if="

"mkfs"

)

for pattern in "${DANGEROUS_PATTERNS[@]}"; do

if [[ "

echo "🚫 Dangerous command blocked: $COMMAND" >&2

exit 2

fi

done

exit 0

配置:

{

"hooks": {

"PreToolUse": [

{

"matcher": "Bash",

"hooks": [

{

"type": "command",

"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-dangerous-commands.sh"

}

]

}

]

}

}

3.2 沙箱模式

Claude Code 支持沙箱模式,限制文件系统和网络访问:

{

"permissions": {

"sandbox": {

"enabled": true,

"allowedPaths": ["/home/user/project"],

"allowedDomains": ["api.example.com"],

"deniedPaths": ["/etc", "/var", "~/.ssh"]

}

}

}


四、权限配置

4.1 权限级别

Claude Code 的权限分为三级:

级别

行为

适用场景

ask

每次操作都请求确认

默认,最安全

allow

自动允许,记录日志

可信操作

deny

直接拒绝

危险操作

4.2 settings.json 配置

{

"permissions": {

"defaultMode": "ask",

"allow": [

"Read(**)",

"Bash(git status)",

"Bash(git diff)",

"Bash(npm test)",

"Bash(npm run lint)"

],

"deny": [

"Bash(rm -rf **)",

"Bash(git push --force)",

"Bash(sudo **)",

"Write(**/.env*)",

"Read(**/.env*)"

]

}

}

4.3 按项目配置

在项目级 .claude/settings.json 中覆盖:

{

"permissions": {

"allow": [

"Bash(docker compose up)",

"Bash(docker compose down)"

],

"deny": [

"Bash(docker system prune -a)"

]

}

}


五、CLAUDE.md 安全规则

在 CLAUDE.md 中声明项目安全约束:

## Security

<critical>

- NEVER read or output .env files

- NEVER commit secrets to git

- NEVER use --force flags on git commands

- ALWAYS ask before running database migrations

- ALWAYS use parameterized queries for SQL

</critical>

## Protected Files

The following files are off-limits:

- `.env.*` - Environment variables

- `credentials.json` - Service account keys

- `secrets/` - Secret storage

## Allowed Commands

Safe commands that can run without confirmation:

- `npm test`

- `npm run lint`

- `git status`

- `git diff`

## Forbidden Commands

These commands should never be executed:

- `rm -rf` (except for specific temp directories)

- `git push --force`

- `DROP TABLE/DATABASE`

- `sudo` commands

关键点:用 <critical> 标签包裹最重要的安全规则,Claude 会优先遵守。


六、MCP 服务器安全

6.1 最小权限原则

MCP 服务器可以访问外部资源,配置时要遵循最小权限原则:

{

"mcpServers": {

"database": {

"command": "mcp-server-postgres",

"args": ["--read-only"] // 只读模式

},

"github": {

"command": "mcp-server-github",

"env": {

"GITHUB_TOKEN": "${GITHUB_READ_ONLY_TOKEN}" // 只读 Token

}

}

}

}

6.2 环境变量隔离

不要在 MCP 配置中硬编码密钥:

// ❌ 危险

{

"mcpServers": {

"api": {

"env": {

"API_KEY": "sk-xxxxx" // 硬编码

}

}

}

}

// ✅ 安全

{

"mcpServers": {

"api": {

"env": {

"API_KEY": "${API_KEY}" // 从环境变量读取

}

}

}

}

6.3 作用域限制

为 MCP 服务器配置作用域:

{

"mcpServers": {

"internal-api": {

"command": "mcp-server-http",

"args": ["--base-url", "https://internal.company.com"],

"scope": "project" // 仅当前项目可用

}

}

}


七、团队安全策略

7.1 共享安全配置

将安全配置提交到 Git,团队共享:

.claude/

├── settings.json # 共享配置

├── hooks/

│ ├── protect-sensitive.sh

│ ├── block-dangerous-commands.sh

│ └── filter-output.sh

└── CLAUDE.md # 安全规则

7.2 本地覆盖

敏感配置放在 .claude/settings.local.json,gitignored:

{

"mcpServers": {

"production": {

"env": {

"PROD_API_KEY": "${PROD_API_KEY}"

}

}

}

}

.claude/settings.local.json

.env.*

7.3 审计日志

启用操作日志,审计所有 Claude 执行的操作:

{

"logging": {

"enabled": true,

"level": "info",

"file": "~/.claude/logs/audit.log"

}

}

日志格式:

[2026-04-29 10:30:15] INFO Bash: npm test

[2026-04-29 10:30:18] INFO Read: src/auth.ts

[2026-04-29 10:30:20] WARN Blocked: Read .env (by hook)

[2026-04-29 10:30:25] INFO Write: src/auth.ts


八、企业部署建议

8.1 网络隔离

在企业环境中,限制 Claude Code 的网络访问:

┌─────────────────┐ ┌─────────────────┐

│ Claude Code │────▶│ LLM Proxy │

└─────────────────┘ └─────────────────┘

│ │

│ ▼

│ ┌─────────────────┐

│ │ Anthropic API │

│ └─────────────────┘

┌─────────────────┐

│ Internal APIs │ ← 白名单控制

└─────────────────┘

8.2 凭据管理

使用企业级凭据管理:

方案

说明

HashiCorp Vault

动态凭据,自动轮换

AWS Secrets Manager

云原生方案

Azure Key Vault

Azure 集成

1Password CLI

开发者友好

配置示例:

export API_KEY=$(vault kv get -field=api_key secret/claude-code)

8.3 合规检查

定期检查合规性:

find . -name ".env*" -o -name "*credentials*" | xargs ls -la

git log -p | grep -E "(sk-|AKIA|ghp_)" || echo "No secrets found"

cat .claude/settings.json | jq '.permissions.deny'


九、应急响应

9.1 密钥泄露

如果怀疑密钥泄露:

1. 立即轮换:撤销旧密钥,生成新密钥

2. 审计日志:检查操作日志,确认泄露范围

3. 更新配置:更新所有使用该密钥的配置

4. 通知相关方:如果涉及第三方 API,通知服务商

9.2 误操作恢复

如果 Claude 执行了误操作:

1. 停止操作:Ctrl+C 或 /stop

2. 检查影响git statusgit diff

3. 回滚git checkout -- .git reset --hard

4. 分析原因:检查 Hook 是否触发,权限配置是否正确

9.3 行为异常

如果 Claude 行为异常:

1. 清除上下文/clear

2. 检查 CLAUDE.md:确认安全规则完整

3. 检查 Hooks:确认 Hook 脚本正常

4. 检查 MCP:确认 MCP 服务器配置正确


十、安全检查清单

部署前检查:

## 敏感文件保护

- [ ] .env 文件在 .gitignore 中

- [ ] PreToolUse Hook 配置正确

- [ ] 敏感文件模式列表完整

## 命令执行控制

- [ ] 危险命令拦截配置

- [ ] 沙箱模式按需启用

- [ ] 权限级别正确设置

## CLAUDE.md 安全规则

- [ ] <critical> 标签包裹核心规则

- [ ] 保护文件清单完整

- [ ] 允许/禁止命令清单完整

## MCP 服务器

- [ ] 使用只读 Token

- [ ] 环境变量不硬编码

- [ ] 作用域正确配置

## 团队配置

- [ ] 安全配置提交到 Git

- [ ] 敏感配置在 settings.local.json

- [ ] 审计日志启用

## 企业部署

- [ ] 网络隔离配置

- [ ] 凭据管理集成

- [ ] 合规检查通过


总结

Claude Code 的安全防护是多层次的:

层次

机制

职责

默认保护

内置黑名单

基础防护

Hooks

PreToolUse 拦截

自定义防护

权限配置

allow/deny 规则

细粒度控制

CLAUDE.md

项目规则

上下文约束

MCP 作用域

资源隔离

外部访问控制

审计日志

操作记录

事后追溯

核心原则: - 最小权限:只给必要的权限 - 显式确认:危险操作必须确认 - 防护层:多层防护,单点失效不影响整体 - 可审计:所有操作有日志可查

安全不是一次性的工作,而是持续的过程。定期检查配置、更新规则、审计日志,才能确保 Claude Code 在企业环境中安全运行。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 一、风险矩阵
  • 二、敏感文件保护
    • 2.1 默认保护
    • 2.2 PreToolUse 拦截
    • 2.3 阻止输出敏感信息
  • 三、命令执行控制
    • 3.1 危险命令拦截
    • 3.2 沙箱模式
  • 四、权限配置
    • 4.1 权限级别
    • 4.2 settings.json 配置
    • 4.3 按项目配置
  • 五、CLAUDE.md 安全规则
  • 六、MCP 服务器安全
    • 6.1 最小权限原则
    • 6.2 环境变量隔离
    • 6.3 作用域限制
  • 七、团队安全策略
    • 7.1 共享安全配置
    • 7.2 本地覆盖
    • 7.3 审计日志
  • 八、企业部署建议
    • 8.1 网络隔离
    • 8.2 凭据管理
    • 8.3 合规检查
  • 九、应急响应
    • 9.1 密钥泄露
    • 9.2 误操作恢复
    • 9.3 行为异常
  • 十、安全检查清单
  • 总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档