深度

Claude Code 环境变量与密钥管理:安全配置 API Key 和敏感信息的完整指南

Claude Code 开发中安全处理环境变量和 API 密钥的完整指南:.env 文件规范、dotenv 与系统环境变量的区别、密钥轮换策略、防止密钥泄露到 Git、secrets 加密存储、生产环境的 Vault/AWS Secrets Manager 集成,以及 CLAUDE.md 安全规范配置。

2026/3/164分钟 阅读ClaudeEagle

API 密钥泄露是开发中最常见的安全事故之一。本文讲解如何在使用 Claude Code 开发时, 安全地管理环境变量和各类密钥。

基础原则

❌ 永远不要把密钥写在代码里 ❌ 永远不要把 .env 文件提交到 Git ✅ 用环境变量,不用硬编码 ✅ .gitignore 里明确排除密钥文件 ✅ 生产环境用专门的密钥管理服务

告诉 Claude Code 这些规范

在项目 CLAUDE.md 里写明:

markdown
## 安全规范(强制执行)

### 密钥管理
- 所有密钥和 Token **必须** 从环境变量读取
- 代码里绝对不能出现:sk-、password=、token=、secret= 等明文值
- 新增环境变量时,同步更新 .env.example(不含真实值)

### .gitignore 必须包含
- .env
- .env.local
- .env.*.local
- *.pem, *.key
- secrets/

### 代码示例(正确做法)
```python
import os
API_KEY = os.environ.get("OPENAI_API_KEY")
if not API_KEY:
    raise ValueError("OPENAI_API_KEY environment variable not set")
## 项目 .env 文件规范 ```bash # .env.example(提交到 Git 的模板,无真实值) # 复制为 .env 并填入真实值 # Anthropic ANTHROPIC_API_KEY=sk-ant-your-key-here # 数据库 DATABASE_URL=postgresql://user:password@localhost:5432/mydb # 第三方服务 STRIPE_SECRET_KEY=sk_test_your-key-here SENDGRID_API_KEY=SG.your-key-here # 应用配置 NODE_ENV=development PORT=3000 JWT_SECRET=change-this-in-production
bash
# .gitignore(必须包含)
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
*.pem
*.key
secrets/
.secrets

在代码中安全读取

Python

python
from dotenv import load_dotenv
import os

load_dotenv()  # 读取 .env 文件

ANTHROPIC_API_KEY = os.environ.get("ANTHROPIC_API_KEY")
DATABASE_URL = os.environ.get("DATABASE_URL")

# 启动时验证必要变量
required_vars = ["ANTHROPIC_API_KEY", "DATABASE_URL", "JWT_SECRET"]
missing = [v for v in required_vars if not os.environ.get(v)]
if missing:
    raise EnvironmentError(f"Missing required env vars: {', '.join(missing)}")

Node.js / TypeScript

typescript
import dotenv from "dotenv";
dotenv.config();

// 带类型的环境变量封装
function getEnv(key: string, required = true): string {
  const value = process.env[key];
  if (required && !value) {
    throw new Error(`Missing required environment variable: ${key}`);
  }
  return value || "";
}

export const config = {
  anthropicKey: getEnv("ANTHROPIC_API_KEY"),
  databaseUrl: getEnv("DATABASE_URL"),
  jwtSecret: getEnv("JWT_SECRET"),
  port: parseInt(getEnv("PORT", false) || "3000"),
};

Claude Code 的 Anthropic API Key 配置

bash
# 方式 1:临时设置(当前会话)
export ANTHROPIC_API_KEY="sk-ant-你的key"
claude

# 方式 2:永久设置(推荐)
echo 'export ANTHROPIC_API_KEY="sk-ant-你的key"' >> ~/.bashrc
source ~/.bashrc

# 方式 3:.env 文件(Claude Code 项目使用)
# 在项目根目录创建 .env
echo 'ANTHROPIC_API_KEY=sk-ant-你的key' > .env
# claude 会自动加载当前目录的 .env

防止 Claude Code 意外泄露密钥

CLAUDE.md 中明确指示:

markdown
## 禁止行为
1. 不要在任何输出中打印环境变量的值
2. 不要在日志里记录 API Key(即使是调试日志)
3. 不要把 .env 内容复制到代码注释里
4. 生成的代码示例要用占位符,不用真实值:
   - 正确:`API_KEY = os.environ.get("OPENAI_API_KEY")`
   - 错误:`API_KEY = "sk-abc123..."`

已泄露密钥的应急处理

如果密钥意外提交到 Git:

bash
# 1. 立刻吊销泄露的密钥(去对应服务的控制台)

# 2. 从 Git 历史中删除(git-filter-repo 方法)
pip install git-filter-repo
git filter-repo --path .env --invert-paths

# 3. 强制推送(需要团队协调)
git push --force

# 4. 通知所有有仓库克隆的人重新 clone

重要:删除 Git 历史不等于安全,因为如果仓库是公开的, 可能已被 GitHub 的密钥扫描系统或爬虫记录。必须先吊销密钥

生产环境密钥管理

AWS Secrets Manager

python
import boto3, json

def get_secret(secret_name, region="us-east-1"):
    client = boto3.client("secretsmanager", region_name=region)
    response = client.get_secret_value(SecretId=secret_name)
    return json.loads(response["SecretString"])

# 使用
secrets = get_secret("my-app/production")
API_KEY = secrets["ANTHROPIC_API_KEY"]

GitHub Actions Secrets(CI/CD)

yaml
# .github/workflows/deploy.yml
jobs:
  deploy:
    steps:
      - name: Run with secrets
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          DATABASE_URL: ${{ secrets.DATABASE_URL }}
        run: |
          claude -p "Run production checks" --no-interactive

密钥扫描(Pre-commit Hook)

bash
# 安装 detect-secrets
pip install detect-secrets

# 初始化基准
detect-secrets scan > .secrets.baseline

# 添加 pre-commit hook
cat > .git/hooks/pre-commit << 'EOF'
#!/bin/sh
detect-secrets-hook --baseline .secrets.baseline
EOF
chmod +x .git/hooks/pre-commit

以后每次 git commit 都会自动扫描,发现密钥会阻止提交。


来源:Claude Code Settings - Anthropic 官方文档

相关文章推荐

深度Claude Code 安全最佳实践:团队项目权限管理与敏感信息防泄漏Claude Code 安全使用完整指南:权限最小化配置(allow/deny 规则)、环境变量与密钥安全管理、CLAUDE.md 安全策略、企业团队管控配置(managed-settings.json)、CI/CD 密钥保护、防止敏感信息泄漏的 10 个规则。2026/3/15深度Claude Code 沙箱隔离深度指南:OS 级文件系统与网络隔离、Auto-allow 模式与逃生舱机制Claude Code 沙箱隔离深度指南:传统权限模型三大问题(审批疲劳/效率损失/自主性受限)、文件系统隔离(写入限当前目录/读取全系统/OS 级子进程继承)、网络隔离(代理服务器域名控制/allowManagedDomainsOnly)、三平台实现(macOS Seatbelt/Linux bubblewrap/WSL2 支持/WSL1 不支持)、安装启用(/sandbox 命令)、两种沙箱模式(Auto-allow 自动批准 vs Regular 标准流程)、settings.json 完整配置(allowWrite/denyWrite/denyRead/路径前缀/多层合并行为)、工具兼容性(kubectl/watchman/docker 处理方式)、逃生舱机制(dangerouslyDisableSandbox/allowUnsandboxedCommands 禁用)、三项安全收益和沙箱局限性。2026/3/9深度Claude Code 权限系统深度解析:规则语法、5 种权限模式与 Hooks 扩展Claude Code 权限系统完整解析:三层工具类型(只读/Bash/文件修改)审批规则、/permissions 管理界面(Allow/Ask/Deny 规则 deny→ask→allow 优先顺序)、5 种权限模式(default/acceptEdits/plan/dontAsk/bypassPermissions 及禁用方式)、权限规则语法(Tool/Tool(specifier)/通配符/空格边界规则/Shell 操作符感知)、四种路径前缀格式(//绝对路径/~/home/项目根/相对)、MCP 工具和 Agent 权限规则、WebFetch 网络控制局限性(无法阻止 Bash curl)及三种可靠 URL 过滤方案、PreToolUse Hooks 扩展权限、工作目录扩展(--add-dir/additionalDirectories),以及权限与沙箱互补关系和两个配置示例。2026/3/9深度Claude Code 安全机制全解:权限架构、提示词注入防护、云端隔离与团队安全最佳实践Claude Code 安全机制完整解析:最小权限原则(默认只读/一次性批准/白名单)、四大内置保护(Sandbox/写入范围限制/权限疲劳缓解/Accept Edits)、八大提示词注入防护(权限系统/上下文分析/命令黑名单/隔离 Context/Fail-closed 匹配)、隐私保障与凭证加密、MCP 安全注意事项(Anthropic 不审计)、云端 VM 六大安全控制 vs Remote Control TLS 本地执行,以及个人和团队安全最佳实践。2026/3/6深度Claude Code 沙箱隔离完全指南:文件系统隔离、网络访问控制与 OS 级安全边界Claude Code 沙箱隔离完全指南:文件系统(默认读全机/写当前目录)和网络隔离机制、macOS Seatbelt 和 Linux bubblewrap OS 级执行、两种沙箱模式(Auto-allow/Regular 权限)、allowWrite/denyRead/denyWrite 路径配置、自定义网络代理,以及提示注入防护和已知安全限制。2026/3/3深度Claude Code 权限系统深度解析:Allow/Deny 规则、五种权限模式与通配符语法Claude Code 权限系统完全解析:三类工具默认审批规则、Allow/Ask/Deny 三种规则类型及优先级、五种权限模式(default/acceptEdits/plan/dontAsk/bypassPermissions)、通配符语法详解(空格词边界的关键区别),以及 Read/Edit/WebFetch/MCP/Agent 各工具权限规则示例。2026/3/3